// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: bazel-out/local-fastbuild/bin/src/main/protobuf/libremote_protocol_java_proto_srcjar.srcjar.preprocessed/remote_protocol.proto

package com.google.devtools.build.lib.remote;

public final class RemoteProtocol {
  private RemoteProtocol() {}
  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 ContentDigestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.ContentDigest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * A hash of the contents of the file, blob, or tree node
     * </pre>
     *
     * <code>optional bytes digest = 1;</code>
     */
    com.google.protobuf.ByteString getDigest();

    /**
     * <pre>
     * (see below). The contents are digested using SHA1 (20 bytes).
     * </pre>
     *
     * <code>optional int64 size_bytes = 2;</code>
     */
    long getSizeBytes();

    /**
     * <pre>
     * Will be 0 by default, and increase if we ever change
     * </pre>
     *
     * <code>optional int32 version = 3;</code>
     */
    int getVersion();
  }
  /**
   * Protobuf type {@code build.remote.ContentDigest}
   */
  public  static final class ContentDigest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.ContentDigest)
      ContentDigestOrBuilder {
    // Use ContentDigest.newBuilder() to construct.
    private ContentDigest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ContentDigest() {
      digest_ = com.google.protobuf.ByteString.EMPTY;
      sizeBytes_ = 0L;
      version_ = 0;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private ContentDigest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {

              digest_ = input.readBytes();
              break;
            }
            case 16: {

              sizeBytes_ = input.readInt64();
              break;
            }
            case 24: {

              version_ = input.readInt32();
              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ContentDigest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ContentDigest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.class, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder.class);
    }

    public static final int DIGEST_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString digest_;
    /**
     * <pre>
     * A hash of the contents of the file, blob, or tree node
     * </pre>
     *
     * <code>optional bytes digest = 1;</code>
     */
    public com.google.protobuf.ByteString getDigest() {
      return digest_;
    }

    public static final int SIZE_BYTES_FIELD_NUMBER = 2;
    private long sizeBytes_;
    /**
     * <pre>
     * (see below). The contents are digested using SHA1 (20 bytes).
     * </pre>
     *
     * <code>optional int64 size_bytes = 2;</code>
     */
    public long getSizeBytes() {
      return sizeBytes_;
    }

    public static final int VERSION_FIELD_NUMBER = 3;
    private int version_;
    /**
     * <pre>
     * Will be 0 by default, and increase if we ever change
     * </pre>
     *
     * <code>optional int32 version = 3;</code>
     */
    public int getVersion() {
      return version_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!digest_.isEmpty()) {
        output.writeBytes(1, digest_);
      }
      if (sizeBytes_ != 0L) {
        output.writeInt64(2, sizeBytes_);
      }
      if (version_ != 0) {
        output.writeInt32(3, version_);
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!digest_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, digest_);
      }
      if (sizeBytes_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, sizeBytes_);
      }
      if (version_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, version_);
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest other = (com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest) obj;

      boolean result = true;
      result = result && getDigest()
          .equals(other.getDigest());
      result = result && (getSizeBytes()
          == other.getSizeBytes());
      result = result && (getVersion()
          == other.getVersion());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      hash = (37 * hash) + DIGEST_FIELD_NUMBER;
      hash = (53 * hash) + getDigest().hashCode();
      hash = (37 * hash) + SIZE_BYTES_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getSizeBytes());
      hash = (37 * hash) + VERSION_FIELD_NUMBER;
      hash = (53 * hash) + getVersion();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest 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.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest 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.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.ContentDigest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.ContentDigest)
        com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ContentDigest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ContentDigest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.class, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

        sizeBytes_ = 0L;

        version_ = 0;

        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ContentDigest_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest result = new com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest(this);
        result.digest_ = digest_;
        result.sizeBytes_ = sizeBytes_;
        result.version_ = version_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance()) return this;
        if (other.getDigest() != com.google.protobuf.ByteString.EMPTY) {
          setDigest(other.getDigest());
        }
        if (other.getSizeBytes() != 0L) {
          setSizeBytes(other.getSizeBytes());
        }
        if (other.getVersion() != 0) {
          setVersion(other.getVersion());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.protobuf.ByteString digest_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <pre>
       * A hash of the contents of the file, blob, or tree node
       * </pre>
       *
       * <code>optional bytes digest = 1;</code>
       */
      public com.google.protobuf.ByteString getDigest() {
        return digest_;
      }
      /**
       * <pre>
       * A hash of the contents of the file, blob, or tree node
       * </pre>
       *
       * <code>optional bytes digest = 1;</code>
       */
      public Builder setDigest(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        digest_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * A hash of the contents of the file, blob, or tree node
       * </pre>
       *
       * <code>optional bytes digest = 1;</code>
       */
      public Builder clearDigest() {
        
        digest_ = getDefaultInstance().getDigest();
        onChanged();
        return this;
      }

      private long sizeBytes_ ;
      /**
       * <pre>
       * (see below). The contents are digested using SHA1 (20 bytes).
       * </pre>
       *
       * <code>optional int64 size_bytes = 2;</code>
       */
      public long getSizeBytes() {
        return sizeBytes_;
      }
      /**
       * <pre>
       * (see below). The contents are digested using SHA1 (20 bytes).
       * </pre>
       *
       * <code>optional int64 size_bytes = 2;</code>
       */
      public Builder setSizeBytes(long value) {
        
        sizeBytes_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * (see below). The contents are digested using SHA1 (20 bytes).
       * </pre>
       *
       * <code>optional int64 size_bytes = 2;</code>
       */
      public Builder clearSizeBytes() {
        
        sizeBytes_ = 0L;
        onChanged();
        return this;
      }

      private int version_ ;
      /**
       * <pre>
       * Will be 0 by default, and increase if we ever change
       * </pre>
       *
       * <code>optional int32 version = 3;</code>
       */
      public int getVersion() {
        return version_;
      }
      /**
       * <pre>
       * Will be 0 by default, and increase if we ever change
       * </pre>
       *
       * <code>optional int32 version = 3;</code>
       */
      public Builder setVersion(int value) {
        
        version_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Will be 0 by default, and increase if we ever change
       * </pre>
       *
       * <code>optional int32 version = 3;</code>
       */
      public Builder clearVersion() {
        
        version_ = 0;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.ContentDigest)
    }

    // @@protoc_insertion_point(class_scope:build.remote.ContentDigest)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ContentDigest>
        PARSER = new com.google.protobuf.AbstractParser<ContentDigest>() {
      public ContentDigest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new ContentDigest(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface FileMetadataOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.FileMetadata)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .build.remote.ContentDigest digest = 1;</code>
     */
    boolean hasDigest();
    /**
     * <code>optional .build.remote.ContentDigest digest = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest();
    /**
     * <code>optional .build.remote.ContentDigest digest = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder();

    /**
     * <code>optional bool executable = 3;</code>
     */
    boolean getExecutable();
  }
  /**
   * Protobuf type {@code build.remote.FileMetadata}
   */
  public  static final class FileMetadata extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.FileMetadata)
      FileMetadataOrBuilder {
    // Use FileMetadata.newBuilder() to construct.
    private FileMetadata(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private FileMetadata() {
      executable_ = false;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private FileMetadata(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder subBuilder = null;
              if (digest_ != null) {
                subBuilder = digest_.toBuilder();
              }
              digest_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(digest_);
                digest_ = subBuilder.buildPartial();
              }

              break;
            }
            case 24: {

              executable_ = input.readBool();
              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_FileMetadata_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_FileMetadata_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.class, com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.Builder.class);
    }

    public static final int DIGEST_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest digest_;
    /**
     * <code>optional .build.remote.ContentDigest digest = 1;</code>
     */
    public boolean hasDigest() {
      return digest_ != null;
    }
    /**
     * <code>optional .build.remote.ContentDigest digest = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest() {
      return digest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : digest_;
    }
    /**
     * <code>optional .build.remote.ContentDigest digest = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder() {
      return getDigest();
    }

    public static final int EXECUTABLE_FIELD_NUMBER = 3;
    private boolean executable_;
    /**
     * <code>optional bool executable = 3;</code>
     */
    public boolean getExecutable() {
      return executable_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (digest_ != null) {
        output.writeMessage(1, getDigest());
      }
      if (executable_ != false) {
        output.writeBool(3, executable_);
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (digest_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getDigest());
      }
      if (executable_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, executable_);
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata other = (com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata) obj;

      boolean result = true;
      result = result && (hasDigest() == other.hasDigest());
      if (hasDigest()) {
        result = result && getDigest()
            .equals(other.getDigest());
      }
      result = result && (getExecutable()
          == other.getExecutable());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasDigest()) {
        hash = (37 * hash) + DIGEST_FIELD_NUMBER;
        hash = (53 * hash) + getDigest().hashCode();
      }
      hash = (37 * hash) + EXECUTABLE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getExecutable());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata 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.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata 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.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.FileMetadata}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.FileMetadata)
        com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_FileMetadata_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_FileMetadata_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.class, com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        if (digestBuilder_ == null) {
          digest_ = null;
        } else {
          digest_ = null;
          digestBuilder_ = null;
        }
        executable_ = false;

        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_FileMetadata_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata result = new com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata(this);
        if (digestBuilder_ == null) {
          result.digest_ = digest_;
        } else {
          result.digest_ = digestBuilder_.build();
        }
        result.executable_ = executable_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.getDefaultInstance()) return this;
        if (other.hasDigest()) {
          mergeDigest(other.getDigest());
        }
        if (other.getExecutable() != false) {
          setExecutable(other.getExecutable());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest digest_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> digestBuilder_;
      /**
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      public boolean hasDigest() {
        return digestBuilder_ != null || digest_ != null;
      }
      /**
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest() {
        if (digestBuilder_ == null) {
          return digest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : digest_;
        } else {
          return digestBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder setDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (digestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          digest_ = value;
          onChanged();
        } else {
          digestBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder setDigest(
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (digestBuilder_ == null) {
          digest_ = builderForValue.build();
          onChanged();
        } else {
          digestBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder mergeDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (digestBuilder_ == null) {
          if (digest_ != null) {
            digest_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.newBuilder(digest_).mergeFrom(value).buildPartial();
          } else {
            digest_ = value;
          }
          onChanged();
        } else {
          digestBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder clearDigest() {
        if (digestBuilder_ == null) {
          digest_ = null;
          onChanged();
        } else {
          digest_ = null;
          digestBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder getDigestBuilder() {
        
        onChanged();
        return getDigestFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder() {
        if (digestBuilder_ != null) {
          return digestBuilder_.getMessageOrBuilder();
        } else {
          return digest_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : digest_;
        }
      }
      /**
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
          getDigestFieldBuilder() {
        if (digestBuilder_ == null) {
          digestBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder>(
                  getDigest(),
                  getParentForChildren(),
                  isClean());
          digest_ = null;
        }
        return digestBuilder_;
      }

      private boolean executable_ ;
      /**
       * <code>optional bool executable = 3;</code>
       */
      public boolean getExecutable() {
        return executable_;
      }
      /**
       * <code>optional bool executable = 3;</code>
       */
      public Builder setExecutable(boolean value) {
        
        executable_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool executable = 3;</code>
       */
      public Builder clearExecutable() {
        
        executable_ = false;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.FileMetadata)
    }

    // @@protoc_insertion_point(class_scope:build.remote.FileMetadata)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<FileMetadata>
        PARSER = new com.google.protobuf.AbstractParser<FileMetadata>() {
      public FileMetadata parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new FileMetadata(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PlatformOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.Platform)
      com.google.protobuf.MessageOrBuilder {
  }
  /**
   * <pre>
   * The contents of this message will be determined later, with the purpose of
   * specifying everything that is required for the action execution, but cannot
   * be uploaded as part of the inputs.
   * It will likely contain fields as architecture, vendor, OS + version,
   * ABI, etc.
   * </pre>
   *
   * Protobuf type {@code build.remote.Platform}
   */
  public  static final class Platform extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.Platform)
      PlatformOrBuilder {
    // Use Platform.newBuilder() to construct.
    private Platform(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Platform() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private Platform(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Platform_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Platform_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.Platform.class, com.google.devtools.build.lib.remote.RemoteProtocol.Platform.Builder.class);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.Platform)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.Platform other = (com.google.devtools.build.lib.remote.RemoteProtocol.Platform) obj;

      boolean result = true;
      return result;
    }

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

    public static com.google.devtools.build.lib.remote.RemoteProtocol.Platform parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Platform parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Platform parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Platform parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Platform parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Platform 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.google.devtools.build.lib.remote.RemoteProtocol.Platform parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Platform 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.google.devtools.build.lib.remote.RemoteProtocol.Platform parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Platform parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.Platform prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * The contents of this message will be determined later, with the purpose of
     * specifying everything that is required for the action execution, but cannot
     * be uploaded as part of the inputs.
     * It will likely contain fields as architecture, vendor, OS + version,
     * ABI, etc.
     * </pre>
     *
     * Protobuf type {@code build.remote.Platform}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.Platform)
        com.google.devtools.build.lib.remote.RemoteProtocol.PlatformOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Platform_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Platform_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.Platform.class, com.google.devtools.build.lib.remote.RemoteProtocol.Platform.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.Platform.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Platform_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.Platform getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.Platform.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.Platform build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.Platform result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.Platform buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.Platform result = new com.google.devtools.build.lib.remote.RemoteProtocol.Platform(this);
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.Platform) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.Platform)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.Platform other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.Platform.getDefaultInstance()) return this;
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.Platform parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.Platform) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.Platform)
    }

    // @@protoc_insertion_point(class_scope:build.remote.Platform)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.Platform DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.Platform();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.Platform getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Platform>
        PARSER = new com.google.protobuf.AbstractParser<Platform>() {
      public Platform parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new Platform(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.Platform getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ActionOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.Action)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * The digest of the command (as an encoded proto blob).
     * Digested separately, because it is both long and reusable.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest command_digest = 1;</code>
     */
    boolean hasCommandDigest();
    /**
     * <pre>
     * The digest of the command (as an encoded proto blob).
     * Digested separately, because it is both long and reusable.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest command_digest = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getCommandDigest();
    /**
     * <pre>
     * The digest of the command (as an encoded proto blob).
     * Digested separately, because it is both long and reusable.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest command_digest = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getCommandDigestOrBuilder();

    /**
     * <pre>
     * The Merkle digest of the root input directory.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest input_root_digest = 2;</code>
     */
    boolean hasInputRootDigest();
    /**
     * <pre>
     * The Merkle digest of the root input directory.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest input_root_digest = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getInputRootDigest();
    /**
     * <pre>
     * The Merkle digest of the root input directory.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest input_root_digest = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getInputRootDigestOrBuilder();

    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * The standard output and error stream contents are always returned
     * in addition (see ActionResult message).
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted!
     * </pre>
     *
     * <code>repeated string output_path = 4;</code>
     */
    java.util.List<java.lang.String>
        getOutputPathList();
    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * The standard output and error stream contents are always returned
     * in addition (see ActionResult message).
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted!
     * </pre>
     *
     * <code>repeated string output_path = 4;</code>
     */
    int getOutputPathCount();
    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * The standard output and error stream contents are always returned
     * in addition (see ActionResult message).
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted!
     * </pre>
     *
     * <code>repeated string output_path = 4;</code>
     */
    java.lang.String getOutputPath(int index);
    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * The standard output and error stream contents are always returned
     * in addition (see ActionResult message).
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted!
     * </pre>
     *
     * <code>repeated string output_path = 4;</code>
     */
    com.google.protobuf.ByteString
        getOutputPathBytes(int index);

    /**
     * <pre>
     * All other requirements that affect the result of the action should be
     * here as well.
     * </pre>
     *
     * <code>optional .build.remote.Platform platform = 5;</code>
     */
    boolean hasPlatform();
    /**
     * <pre>
     * All other requirements that affect the result of the action should be
     * here as well.
     * </pre>
     *
     * <code>optional .build.remote.Platform platform = 5;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.Platform getPlatform();
    /**
     * <pre>
     * All other requirements that affect the result of the action should be
     * here as well.
     * </pre>
     *
     * <code>optional .build.remote.Platform platform = 5;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.PlatformOrBuilder getPlatformOrBuilder();
  }
  /**
   * <pre>
   * All the fields of this message have the following in common: they are
   * expected to define a result. All instructions to remote execution that do
   * not affect the result should be out of this message, because this message
   * will be used as the Execution Cache key.
   * </pre>
   *
   * Protobuf type {@code build.remote.Action}
   */
  public  static final class Action extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.Action)
      ActionOrBuilder {
    // Use Action.newBuilder() to construct.
    private Action(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Action() {
      outputPath_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private Action(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder subBuilder = null;
              if (commandDigest_ != null) {
                subBuilder = commandDigest_.toBuilder();
              }
              commandDigest_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(commandDigest_);
                commandDigest_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder subBuilder = null;
              if (inputRootDigest_ != null) {
                subBuilder = inputRootDigest_.toBuilder();
              }
              inputRootDigest_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(inputRootDigest_);
                inputRootDigest_ = subBuilder.buildPartial();
              }

              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                outputPath_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000004;
              }
              outputPath_.add(s);
              break;
            }
            case 42: {
              com.google.devtools.build.lib.remote.RemoteProtocol.Platform.Builder subBuilder = null;
              if (platform_ != null) {
                subBuilder = platform_.toBuilder();
              }
              platform_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.Platform.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(platform_);
                platform_ = subBuilder.buildPartial();
              }

              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_ & 0x00000004) == 0x00000004)) {
          outputPath_ = outputPath_.getUnmodifiableView();
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Action_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Action_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.Action.class, com.google.devtools.build.lib.remote.RemoteProtocol.Action.Builder.class);
    }

    private int bitField0_;
    public static final int COMMAND_DIGEST_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest commandDigest_;
    /**
     * <pre>
     * The digest of the command (as an encoded proto blob).
     * Digested separately, because it is both long and reusable.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest command_digest = 1;</code>
     */
    public boolean hasCommandDigest() {
      return commandDigest_ != null;
    }
    /**
     * <pre>
     * The digest of the command (as an encoded proto blob).
     * Digested separately, because it is both long and reusable.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest command_digest = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getCommandDigest() {
      return commandDigest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : commandDigest_;
    }
    /**
     * <pre>
     * The digest of the command (as an encoded proto blob).
     * Digested separately, because it is both long and reusable.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest command_digest = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getCommandDigestOrBuilder() {
      return getCommandDigest();
    }

    public static final int INPUT_ROOT_DIGEST_FIELD_NUMBER = 2;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest inputRootDigest_;
    /**
     * <pre>
     * The Merkle digest of the root input directory.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest input_root_digest = 2;</code>
     */
    public boolean hasInputRootDigest() {
      return inputRootDigest_ != null;
    }
    /**
     * <pre>
     * The Merkle digest of the root input directory.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest input_root_digest = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getInputRootDigest() {
      return inputRootDigest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : inputRootDigest_;
    }
    /**
     * <pre>
     * The Merkle digest of the root input directory.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest input_root_digest = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getInputRootDigestOrBuilder() {
      return getInputRootDigest();
    }

    public static final int OUTPUT_PATH_FIELD_NUMBER = 4;
    private com.google.protobuf.LazyStringList outputPath_;
    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * The standard output and error stream contents are always returned
     * in addition (see ActionResult message).
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted!
     * </pre>
     *
     * <code>repeated string output_path = 4;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getOutputPathList() {
      return outputPath_;
    }
    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * The standard output and error stream contents are always returned
     * in addition (see ActionResult message).
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted!
     * </pre>
     *
     * <code>repeated string output_path = 4;</code>
     */
    public int getOutputPathCount() {
      return outputPath_.size();
    }
    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * The standard output and error stream contents are always returned
     * in addition (see ActionResult message).
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted!
     * </pre>
     *
     * <code>repeated string output_path = 4;</code>
     */
    public java.lang.String getOutputPath(int index) {
      return outputPath_.get(index);
    }
    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * The standard output and error stream contents are always returned
     * in addition (see ActionResult message).
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted!
     * </pre>
     *
     * <code>repeated string output_path = 4;</code>
     */
    public com.google.protobuf.ByteString
        getOutputPathBytes(int index) {
      return outputPath_.getByteString(index);
    }

    public static final int PLATFORM_FIELD_NUMBER = 5;
    private com.google.devtools.build.lib.remote.RemoteProtocol.Platform platform_;
    /**
     * <pre>
     * All other requirements that affect the result of the action should be
     * here as well.
     * </pre>
     *
     * <code>optional .build.remote.Platform platform = 5;</code>
     */
    public boolean hasPlatform() {
      return platform_ != null;
    }
    /**
     * <pre>
     * All other requirements that affect the result of the action should be
     * here as well.
     * </pre>
     *
     * <code>optional .build.remote.Platform platform = 5;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.Platform getPlatform() {
      return platform_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.Platform.getDefaultInstance() : platform_;
    }
    /**
     * <pre>
     * All other requirements that affect the result of the action should be
     * here as well.
     * </pre>
     *
     * <code>optional .build.remote.Platform platform = 5;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.PlatformOrBuilder getPlatformOrBuilder() {
      return getPlatform();
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (commandDigest_ != null) {
        output.writeMessage(1, getCommandDigest());
      }
      if (inputRootDigest_ != null) {
        output.writeMessage(2, getInputRootDigest());
      }
      for (int i = 0; i < outputPath_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, outputPath_.getRaw(i));
      }
      if (platform_ != null) {
        output.writeMessage(5, getPlatform());
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (commandDigest_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getCommandDigest());
      }
      if (inputRootDigest_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getInputRootDigest());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < outputPath_.size(); i++) {
          dataSize += computeStringSizeNoTag(outputPath_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getOutputPathList().size();
      }
      if (platform_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getPlatform());
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.Action)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.Action other = (com.google.devtools.build.lib.remote.RemoteProtocol.Action) obj;

      boolean result = true;
      result = result && (hasCommandDigest() == other.hasCommandDigest());
      if (hasCommandDigest()) {
        result = result && getCommandDigest()
            .equals(other.getCommandDigest());
      }
      result = result && (hasInputRootDigest() == other.hasInputRootDigest());
      if (hasInputRootDigest()) {
        result = result && getInputRootDigest()
            .equals(other.getInputRootDigest());
      }
      result = result && getOutputPathList()
          .equals(other.getOutputPathList());
      result = result && (hasPlatform() == other.hasPlatform());
      if (hasPlatform()) {
        result = result && getPlatform()
            .equals(other.getPlatform());
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasCommandDigest()) {
        hash = (37 * hash) + COMMAND_DIGEST_FIELD_NUMBER;
        hash = (53 * hash) + getCommandDigest().hashCode();
      }
      if (hasInputRootDigest()) {
        hash = (37 * hash) + INPUT_ROOT_DIGEST_FIELD_NUMBER;
        hash = (53 * hash) + getInputRootDigest().hashCode();
      }
      if (getOutputPathCount() > 0) {
        hash = (37 * hash) + OUTPUT_PATH_FIELD_NUMBER;
        hash = (53 * hash) + getOutputPathList().hashCode();
      }
      if (hasPlatform()) {
        hash = (37 * hash) + PLATFORM_FIELD_NUMBER;
        hash = (53 * hash) + getPlatform().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.Action parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Action parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Action parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Action parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Action parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Action 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.google.devtools.build.lib.remote.RemoteProtocol.Action parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Action 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.google.devtools.build.lib.remote.RemoteProtocol.Action parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Action parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.Action prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * All the fields of this message have the following in common: they are
     * expected to define a result. All instructions to remote execution that do
     * not affect the result should be out of this message, because this message
     * will be used as the Execution Cache key.
     * </pre>
     *
     * Protobuf type {@code build.remote.Action}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.Action)
        com.google.devtools.build.lib.remote.RemoteProtocol.ActionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Action_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Action_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.Action.class, com.google.devtools.build.lib.remote.RemoteProtocol.Action.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.Action.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        if (commandDigestBuilder_ == null) {
          commandDigest_ = null;
        } else {
          commandDigest_ = null;
          commandDigestBuilder_ = null;
        }
        if (inputRootDigestBuilder_ == null) {
          inputRootDigest_ = null;
        } else {
          inputRootDigest_ = null;
          inputRootDigestBuilder_ = null;
        }
        outputPath_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        if (platformBuilder_ == null) {
          platform_ = null;
        } else {
          platform_ = null;
          platformBuilder_ = null;
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Action_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.Action getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.Action.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.Action build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.Action result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.Action buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.Action result = new com.google.devtools.build.lib.remote.RemoteProtocol.Action(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (commandDigestBuilder_ == null) {
          result.commandDigest_ = commandDigest_;
        } else {
          result.commandDigest_ = commandDigestBuilder_.build();
        }
        if (inputRootDigestBuilder_ == null) {
          result.inputRootDigest_ = inputRootDigest_;
        } else {
          result.inputRootDigest_ = inputRootDigestBuilder_.build();
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          outputPath_ = outputPath_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.outputPath_ = outputPath_;
        if (platformBuilder_ == null) {
          result.platform_ = platform_;
        } else {
          result.platform_ = platformBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.Action) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.Action)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.Action other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.Action.getDefaultInstance()) return this;
        if (other.hasCommandDigest()) {
          mergeCommandDigest(other.getCommandDigest());
        }
        if (other.hasInputRootDigest()) {
          mergeInputRootDigest(other.getInputRootDigest());
        }
        if (!other.outputPath_.isEmpty()) {
          if (outputPath_.isEmpty()) {
            outputPath_ = other.outputPath_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureOutputPathIsMutable();
            outputPath_.addAll(other.outputPath_);
          }
          onChanged();
        }
        if (other.hasPlatform()) {
          mergePlatform(other.getPlatform());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.Action parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.Action) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest commandDigest_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> commandDigestBuilder_;
      /**
       * <pre>
       * The digest of the command (as an encoded proto blob).
       * Digested separately, because it is both long and reusable.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest command_digest = 1;</code>
       */
      public boolean hasCommandDigest() {
        return commandDigestBuilder_ != null || commandDigest_ != null;
      }
      /**
       * <pre>
       * The digest of the command (as an encoded proto blob).
       * Digested separately, because it is both long and reusable.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest command_digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getCommandDigest() {
        if (commandDigestBuilder_ == null) {
          return commandDigest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : commandDigest_;
        } else {
          return commandDigestBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * The digest of the command (as an encoded proto blob).
       * Digested separately, because it is both long and reusable.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest command_digest = 1;</code>
       */
      public Builder setCommandDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (commandDigestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          commandDigest_ = value;
          onChanged();
        } else {
          commandDigestBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * The digest of the command (as an encoded proto blob).
       * Digested separately, because it is both long and reusable.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest command_digest = 1;</code>
       */
      public Builder setCommandDigest(
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (commandDigestBuilder_ == null) {
          commandDigest_ = builderForValue.build();
          onChanged();
        } else {
          commandDigestBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * The digest of the command (as an encoded proto blob).
       * Digested separately, because it is both long and reusable.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest command_digest = 1;</code>
       */
      public Builder mergeCommandDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (commandDigestBuilder_ == null) {
          if (commandDigest_ != null) {
            commandDigest_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.newBuilder(commandDigest_).mergeFrom(value).buildPartial();
          } else {
            commandDigest_ = value;
          }
          onChanged();
        } else {
          commandDigestBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * The digest of the command (as an encoded proto blob).
       * Digested separately, because it is both long and reusable.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest command_digest = 1;</code>
       */
      public Builder clearCommandDigest() {
        if (commandDigestBuilder_ == null) {
          commandDigest_ = null;
          onChanged();
        } else {
          commandDigest_ = null;
          commandDigestBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * The digest of the command (as an encoded proto blob).
       * Digested separately, because it is both long and reusable.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest command_digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder getCommandDigestBuilder() {
        
        onChanged();
        return getCommandDigestFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * The digest of the command (as an encoded proto blob).
       * Digested separately, because it is both long and reusable.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest command_digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getCommandDigestOrBuilder() {
        if (commandDigestBuilder_ != null) {
          return commandDigestBuilder_.getMessageOrBuilder();
        } else {
          return commandDigest_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : commandDigest_;
        }
      }
      /**
       * <pre>
       * The digest of the command (as an encoded proto blob).
       * Digested separately, because it is both long and reusable.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest command_digest = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
          getCommandDigestFieldBuilder() {
        if (commandDigestBuilder_ == null) {
          commandDigestBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder>(
                  getCommandDigest(),
                  getParentForChildren(),
                  isClean());
          commandDigest_ = null;
        }
        return commandDigestBuilder_;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest inputRootDigest_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> inputRootDigestBuilder_;
      /**
       * <pre>
       * The Merkle digest of the root input directory.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest input_root_digest = 2;</code>
       */
      public boolean hasInputRootDigest() {
        return inputRootDigestBuilder_ != null || inputRootDigest_ != null;
      }
      /**
       * <pre>
       * The Merkle digest of the root input directory.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest input_root_digest = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getInputRootDigest() {
        if (inputRootDigestBuilder_ == null) {
          return inputRootDigest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : inputRootDigest_;
        } else {
          return inputRootDigestBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * The Merkle digest of the root input directory.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest input_root_digest = 2;</code>
       */
      public Builder setInputRootDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (inputRootDigestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          inputRootDigest_ = value;
          onChanged();
        } else {
          inputRootDigestBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * The Merkle digest of the root input directory.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest input_root_digest = 2;</code>
       */
      public Builder setInputRootDigest(
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (inputRootDigestBuilder_ == null) {
          inputRootDigest_ = builderForValue.build();
          onChanged();
        } else {
          inputRootDigestBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * The Merkle digest of the root input directory.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest input_root_digest = 2;</code>
       */
      public Builder mergeInputRootDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (inputRootDigestBuilder_ == null) {
          if (inputRootDigest_ != null) {
            inputRootDigest_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.newBuilder(inputRootDigest_).mergeFrom(value).buildPartial();
          } else {
            inputRootDigest_ = value;
          }
          onChanged();
        } else {
          inputRootDigestBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * The Merkle digest of the root input directory.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest input_root_digest = 2;</code>
       */
      public Builder clearInputRootDigest() {
        if (inputRootDigestBuilder_ == null) {
          inputRootDigest_ = null;
          onChanged();
        } else {
          inputRootDigest_ = null;
          inputRootDigestBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * The Merkle digest of the root input directory.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest input_root_digest = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder getInputRootDigestBuilder() {
        
        onChanged();
        return getInputRootDigestFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * The Merkle digest of the root input directory.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest input_root_digest = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getInputRootDigestOrBuilder() {
        if (inputRootDigestBuilder_ != null) {
          return inputRootDigestBuilder_.getMessageOrBuilder();
        } else {
          return inputRootDigest_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : inputRootDigest_;
        }
      }
      /**
       * <pre>
       * The Merkle digest of the root input directory.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest input_root_digest = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
          getInputRootDigestFieldBuilder() {
        if (inputRootDigestBuilder_ == null) {
          inputRootDigestBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder>(
                  getInputRootDigest(),
                  getParentForChildren(),
                  isClean());
          inputRootDigest_ = null;
        }
        return inputRootDigestBuilder_;
      }

      private com.google.protobuf.LazyStringList outputPath_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureOutputPathIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          outputPath_ = new com.google.protobuf.LazyStringArrayList(outputPath_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * The standard output and error stream contents are always returned
       * in addition (see ActionResult message).
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted!
       * </pre>
       *
       * <code>repeated string output_path = 4;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getOutputPathList() {
        return outputPath_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * The standard output and error stream contents are always returned
       * in addition (see ActionResult message).
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted!
       * </pre>
       *
       * <code>repeated string output_path = 4;</code>
       */
      public int getOutputPathCount() {
        return outputPath_.size();
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * The standard output and error stream contents are always returned
       * in addition (see ActionResult message).
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted!
       * </pre>
       *
       * <code>repeated string output_path = 4;</code>
       */
      public java.lang.String getOutputPath(int index) {
        return outputPath_.get(index);
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * The standard output and error stream contents are always returned
       * in addition (see ActionResult message).
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted!
       * </pre>
       *
       * <code>repeated string output_path = 4;</code>
       */
      public com.google.protobuf.ByteString
          getOutputPathBytes(int index) {
        return outputPath_.getByteString(index);
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * The standard output and error stream contents are always returned
       * in addition (see ActionResult message).
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted!
       * </pre>
       *
       * <code>repeated string output_path = 4;</code>
       */
      public Builder setOutputPath(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureOutputPathIsMutable();
        outputPath_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * The standard output and error stream contents are always returned
       * in addition (see ActionResult message).
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted!
       * </pre>
       *
       * <code>repeated string output_path = 4;</code>
       */
      public Builder addOutputPath(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureOutputPathIsMutable();
        outputPath_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * The standard output and error stream contents are always returned
       * in addition (see ActionResult message).
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted!
       * </pre>
       *
       * <code>repeated string output_path = 4;</code>
       */
      public Builder addAllOutputPath(
          java.lang.Iterable<java.lang.String> values) {
        ensureOutputPathIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, outputPath_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * The standard output and error stream contents are always returned
       * in addition (see ActionResult message).
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted!
       * </pre>
       *
       * <code>repeated string output_path = 4;</code>
       */
      public Builder clearOutputPath() {
        outputPath_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * The standard output and error stream contents are always returned
       * in addition (see ActionResult message).
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted!
       * </pre>
       *
       * <code>repeated string output_path = 4;</code>
       */
      public Builder addOutputPathBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureOutputPathIsMutable();
        outputPath_.add(value);
        onChanged();
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.Platform platform_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.Platform, com.google.devtools.build.lib.remote.RemoteProtocol.Platform.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.PlatformOrBuilder> platformBuilder_;
      /**
       * <pre>
       * All other requirements that affect the result of the action should be
       * here as well.
       * </pre>
       *
       * <code>optional .build.remote.Platform platform = 5;</code>
       */
      public boolean hasPlatform() {
        return platformBuilder_ != null || platform_ != null;
      }
      /**
       * <pre>
       * All other requirements that affect the result of the action should be
       * here as well.
       * </pre>
       *
       * <code>optional .build.remote.Platform platform = 5;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.Platform getPlatform() {
        if (platformBuilder_ == null) {
          return platform_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.Platform.getDefaultInstance() : platform_;
        } else {
          return platformBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * All other requirements that affect the result of the action should be
       * here as well.
       * </pre>
       *
       * <code>optional .build.remote.Platform platform = 5;</code>
       */
      public Builder setPlatform(com.google.devtools.build.lib.remote.RemoteProtocol.Platform value) {
        if (platformBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          platform_ = value;
          onChanged();
        } else {
          platformBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * All other requirements that affect the result of the action should be
       * here as well.
       * </pre>
       *
       * <code>optional .build.remote.Platform platform = 5;</code>
       */
      public Builder setPlatform(
          com.google.devtools.build.lib.remote.RemoteProtocol.Platform.Builder builderForValue) {
        if (platformBuilder_ == null) {
          platform_ = builderForValue.build();
          onChanged();
        } else {
          platformBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * All other requirements that affect the result of the action should be
       * here as well.
       * </pre>
       *
       * <code>optional .build.remote.Platform platform = 5;</code>
       */
      public Builder mergePlatform(com.google.devtools.build.lib.remote.RemoteProtocol.Platform value) {
        if (platformBuilder_ == null) {
          if (platform_ != null) {
            platform_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.Platform.newBuilder(platform_).mergeFrom(value).buildPartial();
          } else {
            platform_ = value;
          }
          onChanged();
        } else {
          platformBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * All other requirements that affect the result of the action should be
       * here as well.
       * </pre>
       *
       * <code>optional .build.remote.Platform platform = 5;</code>
       */
      public Builder clearPlatform() {
        if (platformBuilder_ == null) {
          platform_ = null;
          onChanged();
        } else {
          platform_ = null;
          platformBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * All other requirements that affect the result of the action should be
       * here as well.
       * </pre>
       *
       * <code>optional .build.remote.Platform platform = 5;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.Platform.Builder getPlatformBuilder() {
        
        onChanged();
        return getPlatformFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * All other requirements that affect the result of the action should be
       * here as well.
       * </pre>
       *
       * <code>optional .build.remote.Platform platform = 5;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.PlatformOrBuilder getPlatformOrBuilder() {
        if (platformBuilder_ != null) {
          return platformBuilder_.getMessageOrBuilder();
        } else {
          return platform_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.Platform.getDefaultInstance() : platform_;
        }
      }
      /**
       * <pre>
       * All other requirements that affect the result of the action should be
       * here as well.
       * </pre>
       *
       * <code>optional .build.remote.Platform platform = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.Platform, com.google.devtools.build.lib.remote.RemoteProtocol.Platform.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.PlatformOrBuilder> 
          getPlatformFieldBuilder() {
        if (platformBuilder_ == null) {
          platformBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.Platform, com.google.devtools.build.lib.remote.RemoteProtocol.Platform.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.PlatformOrBuilder>(
                  getPlatform(),
                  getParentForChildren(),
                  isClean());
          platform_ = null;
        }
        return platformBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.Action)
    }

    // @@protoc_insertion_point(class_scope:build.remote.Action)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.Action DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.Action();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.Action getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Action>
        PARSER = new com.google.protobuf.AbstractParser<Action>() {
      public Action parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new Action(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.Action getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CommandOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.Command)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * The argument vector.  argv[0] is the binary.
     * </pre>
     *
     * <code>repeated string argv = 1;</code>
     */
    java.util.List<java.lang.String>
        getArgvList();
    /**
     * <pre>
     * The argument vector.  argv[0] is the binary.
     * </pre>
     *
     * <code>repeated string argv = 1;</code>
     */
    int getArgvCount();
    /**
     * <pre>
     * The argument vector.  argv[0] is the binary.
     * </pre>
     *
     * <code>repeated string argv = 1;</code>
     */
    java.lang.String getArgv(int index);
    /**
     * <pre>
     * The argument vector.  argv[0] is the binary.
     * </pre>
     *
     * <code>repeated string argv = 1;</code>
     */
    com.google.protobuf.ByteString
        getArgvBytes(int index);

    /**
     * <pre>
     * Environment variables, sorted by variable.
     * </pre>
     *
     * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
     */
    java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry> 
        getEnvironmentList();
    /**
     * <pre>
     * Environment variables, sorted by variable.
     * </pre>
     *
     * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry getEnvironment(int index);
    /**
     * <pre>
     * Environment variables, sorted by variable.
     * </pre>
     *
     * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
     */
    int getEnvironmentCount();
    /**
     * <pre>
     * Environment variables, sorted by variable.
     * </pre>
     *
     * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntryOrBuilder> 
        getEnvironmentOrBuilderList();
    /**
     * <pre>
     * Environment variables, sorted by variable.
     * </pre>
     *
     * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntryOrBuilder getEnvironmentOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code build.remote.Command}
   */
  public  static final class Command extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.Command)
      CommandOrBuilder {
    // Use Command.newBuilder() to construct.
    private Command(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Command() {
      argv_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      environment_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private Command(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                argv_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              argv_.add(s);
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                environment_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry>();
                mutable_bitField0_ |= 0x00000002;
              }
              environment_.add(
                  input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.parser(), extensionRegistry));
              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) == 0x00000001)) {
          argv_ = argv_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          environment_ = java.util.Collections.unmodifiableList(environment_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Command_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Command_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.Command.class, com.google.devtools.build.lib.remote.RemoteProtocol.Command.Builder.class);
    }

    public interface EnvironmentEntryOrBuilder extends
        // @@protoc_insertion_point(interface_extends:build.remote.Command.EnvironmentEntry)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>optional string variable = 1;</code>
       */
      java.lang.String getVariable();
      /**
       * <code>optional string variable = 1;</code>
       */
      com.google.protobuf.ByteString
          getVariableBytes();

      /**
       * <code>optional string value = 2;</code>
       */
      java.lang.String getValue();
      /**
       * <code>optional string value = 2;</code>
       */
      com.google.protobuf.ByteString
          getValueBytes();
    }
    /**
     * <pre>
     * A map of environment variables.
     * This is part of the command rather than Platform, because it does not
     * affect scheduling.
     * </pre>
     *
     * Protobuf type {@code build.remote.Command.EnvironmentEntry}
     */
    public  static final class EnvironmentEntry extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:build.remote.Command.EnvironmentEntry)
        EnvironmentEntryOrBuilder {
      // Use EnvironmentEntry.newBuilder() to construct.
      private EnvironmentEntry(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private EnvironmentEntry() {
        variable_ = "";
        value_ = "";
      }

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

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

                value_ = s;
                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 {
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Command_EnvironmentEntry_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Command_EnvironmentEntry_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.class, com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.Builder.class);
      }

      public static final int VARIABLE_FIELD_NUMBER = 1;
      private volatile java.lang.Object variable_;
      /**
       * <code>optional string variable = 1;</code>
       */
      public java.lang.String getVariable() {
        java.lang.Object ref = variable_;
        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();
          variable_ = s;
          return s;
        }
      }
      /**
       * <code>optional string variable = 1;</code>
       */
      public com.google.protobuf.ByteString
          getVariableBytes() {
        java.lang.Object ref = variable_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          variable_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int VALUE_FIELD_NUMBER = 2;
      private volatile java.lang.Object value_;
      /**
       * <code>optional string value = 2;</code>
       */
      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;
        }
      }
      /**
       * <code>optional string value = 2;</code>
       */
      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;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (!getVariableBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, variable_);
        }
        if (!getValueBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, value_);
        }
      }

      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (!getVariableBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, variable_);
        }
        if (!getValueBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, value_);
        }
        memoizedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry)) {
          return super.equals(obj);
        }
        com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry other = (com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry) obj;

        boolean result = true;
        result = result && getVariable()
            .equals(other.getVariable());
        result = result && getValue()
            .equals(other.getValue());
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptorForType().hashCode();
        hash = (37 * hash) + VARIABLE_FIELD_NUMBER;
        hash = (53 * hash) + getVariable().hashCode();
        hash = (37 * hash) + VALUE_FIELD_NUMBER;
        hash = (53 * hash) + getValue().hashCode();
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry 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.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry 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.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * A map of environment variables.
       * This is part of the command rather than Platform, because it does not
       * affect scheduling.
       * </pre>
       *
       * Protobuf type {@code build.remote.Command.EnvironmentEntry}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:build.remote.Command.EnvironmentEntry)
          com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntryOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Command_EnvironmentEntry_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Command_EnvironmentEntry_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.class, com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.Builder.class);
        }

        // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        public Builder clear() {
          super.clear();
          variable_ = "";

          value_ = "";

          return this;
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Command_EnvironmentEntry_descriptor;
        }

        public com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry getDefaultInstanceForType() {
          return com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.getDefaultInstance();
        }

        public com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry build() {
          com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry buildPartial() {
          com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry result = new com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry(this);
          result.variable_ = variable_;
          result.value_ = value_;
          onBuilt();
          return result;
        }

        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry) {
            return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry other) {
          if (other == com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.getDefaultInstance()) return this;
          if (!other.getVariable().isEmpty()) {
            variable_ = other.variable_;
            onChanged();
          }
          if (!other.getValue().isEmpty()) {
            value_ = other.value_;
            onChanged();
          }
          onChanged();
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private java.lang.Object variable_ = "";
        /**
         * <code>optional string variable = 1;</code>
         */
        public java.lang.String getVariable() {
          java.lang.Object ref = variable_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            variable_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string variable = 1;</code>
         */
        public com.google.protobuf.ByteString
            getVariableBytes() {
          java.lang.Object ref = variable_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            variable_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string variable = 1;</code>
         */
        public Builder setVariable(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          variable_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string variable = 1;</code>
         */
        public Builder clearVariable() {
          
          variable_ = getDefaultInstance().getVariable();
          onChanged();
          return this;
        }
        /**
         * <code>optional string variable = 1;</code>
         */
        public Builder setVariableBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          variable_ = value;
          onChanged();
          return this;
        }

        private java.lang.Object value_ = "";
        /**
         * <code>optional string value = 2;</code>
         */
        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;
          }
        }
        /**
         * <code>optional string value = 2;</code>
         */
        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;
          }
        }
        /**
         * <code>optional string value = 2;</code>
         */
        public Builder setValue(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          value_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string value = 2;</code>
         */
        public Builder clearValue() {
          
          value_ = getDefaultInstance().getValue();
          onChanged();
          return this;
        }
        /**
         * <code>optional string value = 2;</code>
         */
        public Builder setValueBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          value_ = value;
          onChanged();
          return this;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return this;
        }

        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return this;
        }


        // @@protoc_insertion_point(builder_scope:build.remote.Command.EnvironmentEntry)
      }

      // @@protoc_insertion_point(class_scope:build.remote.Command.EnvironmentEntry)
      private static final com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry();
      }

      public static com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<EnvironmentEntry>
          PARSER = new com.google.protobuf.AbstractParser<EnvironmentEntry>() {
        public EnvironmentEntry parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
            return new EnvironmentEntry(input, extensionRegistry);
        }
      };

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

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

      public com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public static final int ARGV_FIELD_NUMBER = 1;
    private com.google.protobuf.LazyStringList argv_;
    /**
     * <pre>
     * The argument vector.  argv[0] is the binary.
     * </pre>
     *
     * <code>repeated string argv = 1;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getArgvList() {
      return argv_;
    }
    /**
     * <pre>
     * The argument vector.  argv[0] is the binary.
     * </pre>
     *
     * <code>repeated string argv = 1;</code>
     */
    public int getArgvCount() {
      return argv_.size();
    }
    /**
     * <pre>
     * The argument vector.  argv[0] is the binary.
     * </pre>
     *
     * <code>repeated string argv = 1;</code>
     */
    public java.lang.String getArgv(int index) {
      return argv_.get(index);
    }
    /**
     * <pre>
     * The argument vector.  argv[0] is the binary.
     * </pre>
     *
     * <code>repeated string argv = 1;</code>
     */
    public com.google.protobuf.ByteString
        getArgvBytes(int index) {
      return argv_.getByteString(index);
    }

    public static final int ENVIRONMENT_FIELD_NUMBER = 2;
    private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry> environment_;
    /**
     * <pre>
     * Environment variables, sorted by variable.
     * </pre>
     *
     * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
     */
    public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry> getEnvironmentList() {
      return environment_;
    }
    /**
     * <pre>
     * Environment variables, sorted by variable.
     * </pre>
     *
     * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntryOrBuilder> 
        getEnvironmentOrBuilderList() {
      return environment_;
    }
    /**
     * <pre>
     * Environment variables, sorted by variable.
     * </pre>
     *
     * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
     */
    public int getEnvironmentCount() {
      return environment_.size();
    }
    /**
     * <pre>
     * Environment variables, sorted by variable.
     * </pre>
     *
     * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry getEnvironment(int index) {
      return environment_.get(index);
    }
    /**
     * <pre>
     * Environment variables, sorted by variable.
     * </pre>
     *
     * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntryOrBuilder getEnvironmentOrBuilder(
        int index) {
      return environment_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < argv_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, argv_.getRaw(i));
      }
      for (int i = 0; i < environment_.size(); i++) {
        output.writeMessage(2, environment_.get(i));
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < argv_.size(); i++) {
          dataSize += computeStringSizeNoTag(argv_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getArgvList().size();
      }
      for (int i = 0; i < environment_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, environment_.get(i));
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.Command)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.Command other = (com.google.devtools.build.lib.remote.RemoteProtocol.Command) obj;

      boolean result = true;
      result = result && getArgvList()
          .equals(other.getArgvList());
      result = result && getEnvironmentList()
          .equals(other.getEnvironmentList());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (getArgvCount() > 0) {
        hash = (37 * hash) + ARGV_FIELD_NUMBER;
        hash = (53 * hash) + getArgvList().hashCode();
      }
      if (getEnvironmentCount() > 0) {
        hash = (37 * hash) + ENVIRONMENT_FIELD_NUMBER;
        hash = (53 * hash) + getEnvironmentList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.Command parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Command parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Command parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Command parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Command parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Command 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.google.devtools.build.lib.remote.RemoteProtocol.Command parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Command 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.google.devtools.build.lib.remote.RemoteProtocol.Command parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Command parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.Command prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.Command}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.Command)
        com.google.devtools.build.lib.remote.RemoteProtocol.CommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Command_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Command_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.Command.class, com.google.devtools.build.lib.remote.RemoteProtocol.Command.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.Command.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getEnvironmentFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        argv_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (environmentBuilder_ == null) {
          environment_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          environmentBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Command_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.Command getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.Command.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.Command build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.Command result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.Command buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.Command result = new com.google.devtools.build.lib.remote.RemoteProtocol.Command(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          argv_ = argv_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.argv_ = argv_;
        if (environmentBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            environment_ = java.util.Collections.unmodifiableList(environment_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.environment_ = environment_;
        } else {
          result.environment_ = environmentBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.Command) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.Command)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.Command other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.Command.getDefaultInstance()) return this;
        if (!other.argv_.isEmpty()) {
          if (argv_.isEmpty()) {
            argv_ = other.argv_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureArgvIsMutable();
            argv_.addAll(other.argv_);
          }
          onChanged();
        }
        if (environmentBuilder_ == null) {
          if (!other.environment_.isEmpty()) {
            if (environment_.isEmpty()) {
              environment_ = other.environment_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureEnvironmentIsMutable();
              environment_.addAll(other.environment_);
            }
            onChanged();
          }
        } else {
          if (!other.environment_.isEmpty()) {
            if (environmentBuilder_.isEmpty()) {
              environmentBuilder_.dispose();
              environmentBuilder_ = null;
              environment_ = other.environment_;
              bitField0_ = (bitField0_ & ~0x00000002);
              environmentBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getEnvironmentFieldBuilder() : null;
            } else {
              environmentBuilder_.addAllMessages(other.environment_);
            }
          }
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.Command parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.Command) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.LazyStringList argv_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureArgvIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          argv_ = new com.google.protobuf.LazyStringArrayList(argv_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       * The argument vector.  argv[0] is the binary.
       * </pre>
       *
       * <code>repeated string argv = 1;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getArgvList() {
        return argv_.getUnmodifiableView();
      }
      /**
       * <pre>
       * The argument vector.  argv[0] is the binary.
       * </pre>
       *
       * <code>repeated string argv = 1;</code>
       */
      public int getArgvCount() {
        return argv_.size();
      }
      /**
       * <pre>
       * The argument vector.  argv[0] is the binary.
       * </pre>
       *
       * <code>repeated string argv = 1;</code>
       */
      public java.lang.String getArgv(int index) {
        return argv_.get(index);
      }
      /**
       * <pre>
       * The argument vector.  argv[0] is the binary.
       * </pre>
       *
       * <code>repeated string argv = 1;</code>
       */
      public com.google.protobuf.ByteString
          getArgvBytes(int index) {
        return argv_.getByteString(index);
      }
      /**
       * <pre>
       * The argument vector.  argv[0] is the binary.
       * </pre>
       *
       * <code>repeated string argv = 1;</code>
       */
      public Builder setArgv(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureArgvIsMutable();
        argv_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The argument vector.  argv[0] is the binary.
       * </pre>
       *
       * <code>repeated string argv = 1;</code>
       */
      public Builder addArgv(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureArgvIsMutable();
        argv_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The argument vector.  argv[0] is the binary.
       * </pre>
       *
       * <code>repeated string argv = 1;</code>
       */
      public Builder addAllArgv(
          java.lang.Iterable<java.lang.String> values) {
        ensureArgvIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, argv_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The argument vector.  argv[0] is the binary.
       * </pre>
       *
       * <code>repeated string argv = 1;</code>
       */
      public Builder clearArgv() {
        argv_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The argument vector.  argv[0] is the binary.
       * </pre>
       *
       * <code>repeated string argv = 1;</code>
       */
      public Builder addArgvBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureArgvIsMutable();
        argv_.add(value);
        onChanged();
        return this;
      }

      private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry> environment_ =
        java.util.Collections.emptyList();
      private void ensureEnvironmentIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          environment_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry>(environment_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry, com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntryOrBuilder> environmentBuilder_;

      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry> getEnvironmentList() {
        if (environmentBuilder_ == null) {
          return java.util.Collections.unmodifiableList(environment_);
        } else {
          return environmentBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public int getEnvironmentCount() {
        if (environmentBuilder_ == null) {
          return environment_.size();
        } else {
          return environmentBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry getEnvironment(int index) {
        if (environmentBuilder_ == null) {
          return environment_.get(index);
        } else {
          return environmentBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public Builder setEnvironment(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry value) {
        if (environmentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEnvironmentIsMutable();
          environment_.set(index, value);
          onChanged();
        } else {
          environmentBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public Builder setEnvironment(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.Builder builderForValue) {
        if (environmentBuilder_ == null) {
          ensureEnvironmentIsMutable();
          environment_.set(index, builderForValue.build());
          onChanged();
        } else {
          environmentBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public Builder addEnvironment(com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry value) {
        if (environmentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEnvironmentIsMutable();
          environment_.add(value);
          onChanged();
        } else {
          environmentBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public Builder addEnvironment(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry value) {
        if (environmentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEnvironmentIsMutable();
          environment_.add(index, value);
          onChanged();
        } else {
          environmentBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public Builder addEnvironment(
          com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.Builder builderForValue) {
        if (environmentBuilder_ == null) {
          ensureEnvironmentIsMutable();
          environment_.add(builderForValue.build());
          onChanged();
        } else {
          environmentBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public Builder addEnvironment(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.Builder builderForValue) {
        if (environmentBuilder_ == null) {
          ensureEnvironmentIsMutable();
          environment_.add(index, builderForValue.build());
          onChanged();
        } else {
          environmentBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public Builder addAllEnvironment(
          java.lang.Iterable<? extends com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry> values) {
        if (environmentBuilder_ == null) {
          ensureEnvironmentIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, environment_);
          onChanged();
        } else {
          environmentBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public Builder clearEnvironment() {
        if (environmentBuilder_ == null) {
          environment_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          environmentBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public Builder removeEnvironment(int index) {
        if (environmentBuilder_ == null) {
          ensureEnvironmentIsMutable();
          environment_.remove(index);
          onChanged();
        } else {
          environmentBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.Builder getEnvironmentBuilder(
          int index) {
        return getEnvironmentFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntryOrBuilder getEnvironmentOrBuilder(
          int index) {
        if (environmentBuilder_ == null) {
          return environment_.get(index);  } else {
          return environmentBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntryOrBuilder> 
           getEnvironmentOrBuilderList() {
        if (environmentBuilder_ != null) {
          return environmentBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(environment_);
        }
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.Builder addEnvironmentBuilder() {
        return getEnvironmentFieldBuilder().addBuilder(
            com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.getDefaultInstance());
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.Builder addEnvironmentBuilder(
          int index) {
        return getEnvironmentFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.getDefaultInstance());
      }
      /**
       * <pre>
       * Environment variables, sorted by variable.
       * </pre>
       *
       * <code>repeated .build.remote.Command.EnvironmentEntry environment = 2;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.Builder> 
           getEnvironmentBuilderList() {
        return getEnvironmentFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry, com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntryOrBuilder> 
          getEnvironmentFieldBuilder() {
        if (environmentBuilder_ == null) {
          environmentBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry, com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntry.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.Command.EnvironmentEntryOrBuilder>(
                  environment_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          environment_ = null;
        }
        return environmentBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.Command)
    }

    // @@protoc_insertion_point(class_scope:build.remote.Command)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.Command DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.Command();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.Command getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Command>
        PARSER = new com.google.protobuf.AbstractParser<Command>() {
      public Command parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new Command(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.Command getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface OutputOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.Output)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string path = 1;</code>
     */
    java.lang.String getPath();
    /**
     * <code>optional string path = 1;</code>
     */
    com.google.protobuf.ByteString
        getPathBytes();

    /**
     * <pre>
     * Populated for directory outputs only, contains the root FileNode digest.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest digest = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest();
    /**
     * <pre>
     * Populated for directory outputs only, contains the root FileNode digest.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest digest = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder();

    /**
     * <pre>
     * Populated for file outputs only.
     * </pre>
     *
     * <code>optional .build.remote.FileMetadata file_metadata = 3;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata getFileMetadata();
    /**
     * <pre>
     * Populated for file outputs only.
     * </pre>
     *
     * <code>optional .build.remote.FileMetadata file_metadata = 3;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadataOrBuilder getFileMetadataOrBuilder();

    public com.google.devtools.build.lib.remote.RemoteProtocol.Output.ContentCase getContentCase();
  }
  /**
   * Protobuf type {@code build.remote.Output}
   */
  public  static final class Output extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.Output)
      OutputOrBuilder {
    // Use Output.newBuilder() to construct.
    private Output(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Output() {
      path_ = "";
    }

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

              path_ = s;
              break;
            }
            case 18: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder subBuilder = null;
              if (contentCase_ == 2) {
                subBuilder = ((com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest) content_).toBuilder();
              }
              content_ =
                  input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest) content_);
                content_ = subBuilder.buildPartial();
              }
              contentCase_ = 2;
              break;
            }
            case 26: {
              com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.Builder subBuilder = null;
              if (contentCase_ == 3) {
                subBuilder = ((com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata) content_).toBuilder();
              }
              content_ =
                  input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata) content_);
                content_ = subBuilder.buildPartial();
              }
              contentCase_ = 3;
              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Output_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Output_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.Output.class, com.google.devtools.build.lib.remote.RemoteProtocol.Output.Builder.class);
    }

    private int contentCase_ = 0;
    private java.lang.Object content_;
    public enum ContentCase
        implements com.google.protobuf.Internal.EnumLite {
      DIGEST(2),
      FILE_METADATA(3),
      CONTENT_NOT_SET(0);
      private final int value;
      private ContentCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ContentCase valueOf(int value) {
        return forNumber(value);
      }

      public static ContentCase forNumber(int value) {
        switch (value) {
          case 2: return DIGEST;
          case 3: return FILE_METADATA;
          case 0: return CONTENT_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public ContentCase
    getContentCase() {
      return ContentCase.forNumber(
          contentCase_);
    }

    public static final int PATH_FIELD_NUMBER = 1;
    private volatile java.lang.Object path_;
    /**
     * <code>optional string path = 1;</code>
     */
    public java.lang.String getPath() {
      java.lang.Object ref = path_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        path_ = s;
        return s;
      }
    }
    /**
     * <code>optional string path = 1;</code>
     */
    public com.google.protobuf.ByteString
        getPathBytes() {
      java.lang.Object ref = path_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        path_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DIGEST_FIELD_NUMBER = 2;
    /**
     * <pre>
     * Populated for directory outputs only, contains the root FileNode digest.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest digest = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest() {
      if (contentCase_ == 2) {
         return (com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest) content_;
      }
      return com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance();
    }
    /**
     * <pre>
     * Populated for directory outputs only, contains the root FileNode digest.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest digest = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder() {
      if (contentCase_ == 2) {
         return (com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest) content_;
      }
      return com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance();
    }

    public static final int FILE_METADATA_FIELD_NUMBER = 3;
    /**
     * <pre>
     * Populated for file outputs only.
     * </pre>
     *
     * <code>optional .build.remote.FileMetadata file_metadata = 3;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata getFileMetadata() {
      if (contentCase_ == 3) {
         return (com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata) content_;
      }
      return com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.getDefaultInstance();
    }
    /**
     * <pre>
     * Populated for file outputs only.
     * </pre>
     *
     * <code>optional .build.remote.FileMetadata file_metadata = 3;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadataOrBuilder getFileMetadataOrBuilder() {
      if (contentCase_ == 3) {
         return (com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata) content_;
      }
      return com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.getDefaultInstance();
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!getPathBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, path_);
      }
      if (contentCase_ == 2) {
        output.writeMessage(2, (com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest) content_);
      }
      if (contentCase_ == 3) {
        output.writeMessage(3, (com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata) content_);
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getPathBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, path_);
      }
      if (contentCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, (com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest) content_);
      }
      if (contentCase_ == 3) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, (com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata) content_);
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.Output)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.Output other = (com.google.devtools.build.lib.remote.RemoteProtocol.Output) obj;

      boolean result = true;
      result = result && getPath()
          .equals(other.getPath());
      result = result && getContentCase().equals(
          other.getContentCase());
      if (!result) return false;
      switch (contentCase_) {
        case 2:
          result = result && getDigest()
              .equals(other.getDigest());
          break;
        case 3:
          result = result && getFileMetadata()
              .equals(other.getFileMetadata());
          break;
        case 0:
        default:
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      hash = (37 * hash) + PATH_FIELD_NUMBER;
      hash = (53 * hash) + getPath().hashCode();
      switch (contentCase_) {
        case 2:
          hash = (37 * hash) + DIGEST_FIELD_NUMBER;
          hash = (53 * hash) + getDigest().hashCode();
          break;
        case 3:
          hash = (37 * hash) + FILE_METADATA_FIELD_NUMBER;
          hash = (53 * hash) + getFileMetadata().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.Output parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Output parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Output parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Output parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Output parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Output 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.google.devtools.build.lib.remote.RemoteProtocol.Output parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Output 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.google.devtools.build.lib.remote.RemoteProtocol.Output parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.Output parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.Output prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.Output}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.Output)
        com.google.devtools.build.lib.remote.RemoteProtocol.OutputOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Output_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Output_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.Output.class, com.google.devtools.build.lib.remote.RemoteProtocol.Output.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.Output.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        path_ = "";

        contentCase_ = 0;
        content_ = null;
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_Output_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.Output getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.Output.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.Output build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.Output result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.Output buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.Output result = new com.google.devtools.build.lib.remote.RemoteProtocol.Output(this);
        result.path_ = path_;
        if (contentCase_ == 2) {
          if (digestBuilder_ == null) {
            result.content_ = content_;
          } else {
            result.content_ = digestBuilder_.build();
          }
        }
        if (contentCase_ == 3) {
          if (fileMetadataBuilder_ == null) {
            result.content_ = content_;
          } else {
            result.content_ = fileMetadataBuilder_.build();
          }
        }
        result.contentCase_ = contentCase_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.Output) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.Output)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.Output other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.Output.getDefaultInstance()) return this;
        if (!other.getPath().isEmpty()) {
          path_ = other.path_;
          onChanged();
        }
        switch (other.getContentCase()) {
          case DIGEST: {
            mergeDigest(other.getDigest());
            break;
          }
          case FILE_METADATA: {
            mergeFileMetadata(other.getFileMetadata());
            break;
          }
          case CONTENT_NOT_SET: {
            break;
          }
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.Output parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.Output) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int contentCase_ = 0;
      private java.lang.Object content_;
      public ContentCase
          getContentCase() {
        return ContentCase.forNumber(
            contentCase_);
      }

      public Builder clearContent() {
        contentCase_ = 0;
        content_ = null;
        onChanged();
        return this;
      }


      private java.lang.Object path_ = "";
      /**
       * <code>optional string path = 1;</code>
       */
      public java.lang.String getPath() {
        java.lang.Object ref = path_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          path_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string path = 1;</code>
       */
      public com.google.protobuf.ByteString
          getPathBytes() {
        java.lang.Object ref = path_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          path_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string path = 1;</code>
       */
      public Builder setPath(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        path_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string path = 1;</code>
       */
      public Builder clearPath() {
        
        path_ = getDefaultInstance().getPath();
        onChanged();
        return this;
      }
      /**
       * <code>optional string path = 1;</code>
       */
      public Builder setPathBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        path_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> digestBuilder_;
      /**
       * <pre>
       * Populated for directory outputs only, contains the root FileNode digest.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest() {
        if (digestBuilder_ == null) {
          if (contentCase_ == 2) {
            return (com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest) content_;
          }
          return com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance();
        } else {
          if (contentCase_ == 2) {
            return digestBuilder_.getMessage();
          }
          return com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Populated for directory outputs only, contains the root FileNode digest.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 2;</code>
       */
      public Builder setDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (digestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          content_ = value;
          onChanged();
        } else {
          digestBuilder_.setMessage(value);
        }
        contentCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * Populated for directory outputs only, contains the root FileNode digest.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 2;</code>
       */
      public Builder setDigest(
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (digestBuilder_ == null) {
          content_ = builderForValue.build();
          onChanged();
        } else {
          digestBuilder_.setMessage(builderForValue.build());
        }
        contentCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * Populated for directory outputs only, contains the root FileNode digest.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 2;</code>
       */
      public Builder mergeDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (digestBuilder_ == null) {
          if (contentCase_ == 2 &&
              content_ != com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance()) {
            content_ = com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.newBuilder((com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest) content_)
                .mergeFrom(value).buildPartial();
          } else {
            content_ = value;
          }
          onChanged();
        } else {
          if (contentCase_ == 2) {
            digestBuilder_.mergeFrom(value);
          }
          digestBuilder_.setMessage(value);
        }
        contentCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * Populated for directory outputs only, contains the root FileNode digest.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 2;</code>
       */
      public Builder clearDigest() {
        if (digestBuilder_ == null) {
          if (contentCase_ == 2) {
            contentCase_ = 0;
            content_ = null;
            onChanged();
          }
        } else {
          if (contentCase_ == 2) {
            contentCase_ = 0;
            content_ = null;
          }
          digestBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Populated for directory outputs only, contains the root FileNode digest.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder getDigestBuilder() {
        return getDigestFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Populated for directory outputs only, contains the root FileNode digest.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder() {
        if ((contentCase_ == 2) && (digestBuilder_ != null)) {
          return digestBuilder_.getMessageOrBuilder();
        } else {
          if (contentCase_ == 2) {
            return (com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest) content_;
          }
          return com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Populated for directory outputs only, contains the root FileNode digest.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
          getDigestFieldBuilder() {
        if (digestBuilder_ == null) {
          if (!(contentCase_ == 2)) {
            content_ = com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance();
          }
          digestBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder>(
                  (com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest) content_,
                  getParentForChildren(),
                  isClean());
          content_ = null;
        }
        contentCase_ = 2;
        onChanged();;
        return digestBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata, com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadataOrBuilder> fileMetadataBuilder_;
      /**
       * <pre>
       * Populated for file outputs only.
       * </pre>
       *
       * <code>optional .build.remote.FileMetadata file_metadata = 3;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata getFileMetadata() {
        if (fileMetadataBuilder_ == null) {
          if (contentCase_ == 3) {
            return (com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata) content_;
          }
          return com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.getDefaultInstance();
        } else {
          if (contentCase_ == 3) {
            return fileMetadataBuilder_.getMessage();
          }
          return com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Populated for file outputs only.
       * </pre>
       *
       * <code>optional .build.remote.FileMetadata file_metadata = 3;</code>
       */
      public Builder setFileMetadata(com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata value) {
        if (fileMetadataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          content_ = value;
          onChanged();
        } else {
          fileMetadataBuilder_.setMessage(value);
        }
        contentCase_ = 3;
        return this;
      }
      /**
       * <pre>
       * Populated for file outputs only.
       * </pre>
       *
       * <code>optional .build.remote.FileMetadata file_metadata = 3;</code>
       */
      public Builder setFileMetadata(
          com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.Builder builderForValue) {
        if (fileMetadataBuilder_ == null) {
          content_ = builderForValue.build();
          onChanged();
        } else {
          fileMetadataBuilder_.setMessage(builderForValue.build());
        }
        contentCase_ = 3;
        return this;
      }
      /**
       * <pre>
       * Populated for file outputs only.
       * </pre>
       *
       * <code>optional .build.remote.FileMetadata file_metadata = 3;</code>
       */
      public Builder mergeFileMetadata(com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata value) {
        if (fileMetadataBuilder_ == null) {
          if (contentCase_ == 3 &&
              content_ != com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.getDefaultInstance()) {
            content_ = com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.newBuilder((com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata) content_)
                .mergeFrom(value).buildPartial();
          } else {
            content_ = value;
          }
          onChanged();
        } else {
          if (contentCase_ == 3) {
            fileMetadataBuilder_.mergeFrom(value);
          }
          fileMetadataBuilder_.setMessage(value);
        }
        contentCase_ = 3;
        return this;
      }
      /**
       * <pre>
       * Populated for file outputs only.
       * </pre>
       *
       * <code>optional .build.remote.FileMetadata file_metadata = 3;</code>
       */
      public Builder clearFileMetadata() {
        if (fileMetadataBuilder_ == null) {
          if (contentCase_ == 3) {
            contentCase_ = 0;
            content_ = null;
            onChanged();
          }
        } else {
          if (contentCase_ == 3) {
            contentCase_ = 0;
            content_ = null;
          }
          fileMetadataBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Populated for file outputs only.
       * </pre>
       *
       * <code>optional .build.remote.FileMetadata file_metadata = 3;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.Builder getFileMetadataBuilder() {
        return getFileMetadataFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Populated for file outputs only.
       * </pre>
       *
       * <code>optional .build.remote.FileMetadata file_metadata = 3;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadataOrBuilder getFileMetadataOrBuilder() {
        if ((contentCase_ == 3) && (fileMetadataBuilder_ != null)) {
          return fileMetadataBuilder_.getMessageOrBuilder();
        } else {
          if (contentCase_ == 3) {
            return (com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata) content_;
          }
          return com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Populated for file outputs only.
       * </pre>
       *
       * <code>optional .build.remote.FileMetadata file_metadata = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata, com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadataOrBuilder> 
          getFileMetadataFieldBuilder() {
        if (fileMetadataBuilder_ == null) {
          if (!(contentCase_ == 3)) {
            content_ = com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.getDefaultInstance();
          }
          fileMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata, com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadataOrBuilder>(
                  (com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata) content_,
                  getParentForChildren(),
                  isClean());
          content_ = null;
        }
        contentCase_ = 3;
        onChanged();;
        return fileMetadataBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.Output)
    }

    // @@protoc_insertion_point(class_scope:build.remote.Output)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.Output DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.Output();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.Output getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Output>
        PARSER = new com.google.protobuf.AbstractParser<Output>() {
      public Output parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new Output(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.Output getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ActionResultOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.ActionResult)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted by path.
     * </pre>
     *
     * <code>repeated .build.remote.Output output = 1;</code>
     */
    java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.Output> 
        getOutputList();
    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted by path.
     * </pre>
     *
     * <code>repeated .build.remote.Output output = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.Output getOutput(int index);
    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted by path.
     * </pre>
     *
     * <code>repeated .build.remote.Output output = 1;</code>
     */
    int getOutputCount();
    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted by path.
     * </pre>
     *
     * <code>repeated .build.remote.Output output = 1;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.OutputOrBuilder> 
        getOutputOrBuilderList();
    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted by path.
     * </pre>
     *
     * <code>repeated .build.remote.Output output = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.OutputOrBuilder getOutputOrBuilder(
        int index);

    /**
     * <code>optional int32 return_code = 2;</code>
     */
    int getReturnCode();

    /**
     * <code>optional .build.remote.ContentDigest stdout_digest = 3;</code>
     */
    boolean hasStdoutDigest();
    /**
     * <code>optional .build.remote.ContentDigest stdout_digest = 3;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getStdoutDigest();
    /**
     * <code>optional .build.remote.ContentDigest stdout_digest = 3;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getStdoutDigestOrBuilder();

    /**
     * <code>optional .build.remote.ContentDigest stderr_digest = 4;</code>
     */
    boolean hasStderrDigest();
    /**
     * <code>optional .build.remote.ContentDigest stderr_digest = 4;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getStderrDigest();
    /**
     * <code>optional .build.remote.ContentDigest stderr_digest = 4;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getStderrDigestOrBuilder();
  }
  /**
   * Protobuf type {@code build.remote.ActionResult}
   */
  public  static final class ActionResult extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.ActionResult)
      ActionResultOrBuilder {
    // Use ActionResult.newBuilder() to construct.
    private ActionResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ActionResult() {
      output_ = java.util.Collections.emptyList();
      returnCode_ = 0;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private ActionResult(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                output_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.Output>();
                mutable_bitField0_ |= 0x00000001;
              }
              output_.add(
                  input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.Output.parser(), extensionRegistry));
              break;
            }
            case 16: {

              returnCode_ = input.readInt32();
              break;
            }
            case 26: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder subBuilder = null;
              if (stdoutDigest_ != null) {
                subBuilder = stdoutDigest_.toBuilder();
              }
              stdoutDigest_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(stdoutDigest_);
                stdoutDigest_ = subBuilder.buildPartial();
              }

              break;
            }
            case 34: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder subBuilder = null;
              if (stderrDigest_ != null) {
                subBuilder = stderrDigest_.toBuilder();
              }
              stderrDigest_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(stderrDigest_);
                stderrDigest_ = subBuilder.buildPartial();
              }

              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) == 0x00000001)) {
          output_ = java.util.Collections.unmodifiableList(output_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ActionResult_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ActionResult_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.class, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder.class);
    }

    private int bitField0_;
    public static final int OUTPUT_FIELD_NUMBER = 1;
    private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.Output> output_;
    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted by path.
     * </pre>
     *
     * <code>repeated .build.remote.Output output = 1;</code>
     */
    public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.Output> getOutputList() {
      return output_;
    }
    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted by path.
     * </pre>
     *
     * <code>repeated .build.remote.Output output = 1;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.OutputOrBuilder> 
        getOutputOrBuilderList() {
      return output_;
    }
    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted by path.
     * </pre>
     *
     * <code>repeated .build.remote.Output output = 1;</code>
     */
    public int getOutputCount() {
      return output_.size();
    }
    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted by path.
     * </pre>
     *
     * <code>repeated .build.remote.Output output = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.Output getOutput(int index) {
      return output_.get(index);
    }
    /**
     * <pre>
     * Relative paths to the action's output files and directories.
     * Any unnamed output files will be discarded.
     * A path will be interpreted as a directory iff it contains a trailing
     * slash.
     * This should be sorted by path.
     * </pre>
     *
     * <code>repeated .build.remote.Output output = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.OutputOrBuilder getOutputOrBuilder(
        int index) {
      return output_.get(index);
    }

    public static final int RETURN_CODE_FIELD_NUMBER = 2;
    private int returnCode_;
    /**
     * <code>optional int32 return_code = 2;</code>
     */
    public int getReturnCode() {
      return returnCode_;
    }

    public static final int STDOUT_DIGEST_FIELD_NUMBER = 3;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest stdoutDigest_;
    /**
     * <code>optional .build.remote.ContentDigest stdout_digest = 3;</code>
     */
    public boolean hasStdoutDigest() {
      return stdoutDigest_ != null;
    }
    /**
     * <code>optional .build.remote.ContentDigest stdout_digest = 3;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getStdoutDigest() {
      return stdoutDigest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : stdoutDigest_;
    }
    /**
     * <code>optional .build.remote.ContentDigest stdout_digest = 3;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getStdoutDigestOrBuilder() {
      return getStdoutDigest();
    }

    public static final int STDERR_DIGEST_FIELD_NUMBER = 4;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest stderrDigest_;
    /**
     * <code>optional .build.remote.ContentDigest stderr_digest = 4;</code>
     */
    public boolean hasStderrDigest() {
      return stderrDigest_ != null;
    }
    /**
     * <code>optional .build.remote.ContentDigest stderr_digest = 4;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getStderrDigest() {
      return stderrDigest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : stderrDigest_;
    }
    /**
     * <code>optional .build.remote.ContentDigest stderr_digest = 4;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getStderrDigestOrBuilder() {
      return getStderrDigest();
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < output_.size(); i++) {
        output.writeMessage(1, output_.get(i));
      }
      if (returnCode_ != 0) {
        output.writeInt32(2, returnCode_);
      }
      if (stdoutDigest_ != null) {
        output.writeMessage(3, getStdoutDigest());
      }
      if (stderrDigest_ != null) {
        output.writeMessage(4, getStderrDigest());
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < output_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, output_.get(i));
      }
      if (returnCode_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, returnCode_);
      }
      if (stdoutDigest_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getStdoutDigest());
      }
      if (stderrDigest_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getStderrDigest());
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult other = (com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult) obj;

      boolean result = true;
      result = result && getOutputList()
          .equals(other.getOutputList());
      result = result && (getReturnCode()
          == other.getReturnCode());
      result = result && (hasStdoutDigest() == other.hasStdoutDigest());
      if (hasStdoutDigest()) {
        result = result && getStdoutDigest()
            .equals(other.getStdoutDigest());
      }
      result = result && (hasStderrDigest() == other.hasStderrDigest());
      if (hasStderrDigest()) {
        result = result && getStderrDigest()
            .equals(other.getStderrDigest());
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (getOutputCount() > 0) {
        hash = (37 * hash) + OUTPUT_FIELD_NUMBER;
        hash = (53 * hash) + getOutputList().hashCode();
      }
      hash = (37 * hash) + RETURN_CODE_FIELD_NUMBER;
      hash = (53 * hash) + getReturnCode();
      if (hasStdoutDigest()) {
        hash = (37 * hash) + STDOUT_DIGEST_FIELD_NUMBER;
        hash = (53 * hash) + getStdoutDigest().hashCode();
      }
      if (hasStderrDigest()) {
        hash = (37 * hash) + STDERR_DIGEST_FIELD_NUMBER;
        hash = (53 * hash) + getStderrDigest().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult 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.google.devtools.build.lib.remote.RemoteProtocol.ActionResult parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult 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.google.devtools.build.lib.remote.RemoteProtocol.ActionResult parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.ActionResult}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.ActionResult)
        com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ActionResult_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ActionResult_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.class, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getOutputFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (outputBuilder_ == null) {
          output_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          outputBuilder_.clear();
        }
        returnCode_ = 0;

        if (stdoutDigestBuilder_ == null) {
          stdoutDigest_ = null;
        } else {
          stdoutDigest_ = null;
          stdoutDigestBuilder_ = null;
        }
        if (stderrDigestBuilder_ == null) {
          stderrDigest_ = null;
        } else {
          stderrDigest_ = null;
          stderrDigestBuilder_ = null;
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ActionResult_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult result = new com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (outputBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            output_ = java.util.Collections.unmodifiableList(output_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.output_ = output_;
        } else {
          result.output_ = outputBuilder_.build();
        }
        result.returnCode_ = returnCode_;
        if (stdoutDigestBuilder_ == null) {
          result.stdoutDigest_ = stdoutDigest_;
        } else {
          result.stdoutDigest_ = stdoutDigestBuilder_.build();
        }
        if (stderrDigestBuilder_ == null) {
          result.stderrDigest_ = stderrDigest_;
        } else {
          result.stderrDigest_ = stderrDigestBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.getDefaultInstance()) return this;
        if (outputBuilder_ == null) {
          if (!other.output_.isEmpty()) {
            if (output_.isEmpty()) {
              output_ = other.output_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureOutputIsMutable();
              output_.addAll(other.output_);
            }
            onChanged();
          }
        } else {
          if (!other.output_.isEmpty()) {
            if (outputBuilder_.isEmpty()) {
              outputBuilder_.dispose();
              outputBuilder_ = null;
              output_ = other.output_;
              bitField0_ = (bitField0_ & ~0x00000001);
              outputBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getOutputFieldBuilder() : null;
            } else {
              outputBuilder_.addAllMessages(other.output_);
            }
          }
        }
        if (other.getReturnCode() != 0) {
          setReturnCode(other.getReturnCode());
        }
        if (other.hasStdoutDigest()) {
          mergeStdoutDigest(other.getStdoutDigest());
        }
        if (other.hasStderrDigest()) {
          mergeStderrDigest(other.getStderrDigest());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.Output> output_ =
        java.util.Collections.emptyList();
      private void ensureOutputIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          output_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.Output>(output_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.Output, com.google.devtools.build.lib.remote.RemoteProtocol.Output.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.OutputOrBuilder> outputBuilder_;

      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.Output> getOutputList() {
        if (outputBuilder_ == null) {
          return java.util.Collections.unmodifiableList(output_);
        } else {
          return outputBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public int getOutputCount() {
        if (outputBuilder_ == null) {
          return output_.size();
        } else {
          return outputBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.Output getOutput(int index) {
        if (outputBuilder_ == null) {
          return output_.get(index);
        } else {
          return outputBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public Builder setOutput(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.Output value) {
        if (outputBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOutputIsMutable();
          output_.set(index, value);
          onChanged();
        } else {
          outputBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public Builder setOutput(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.Output.Builder builderForValue) {
        if (outputBuilder_ == null) {
          ensureOutputIsMutable();
          output_.set(index, builderForValue.build());
          onChanged();
        } else {
          outputBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public Builder addOutput(com.google.devtools.build.lib.remote.RemoteProtocol.Output value) {
        if (outputBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOutputIsMutable();
          output_.add(value);
          onChanged();
        } else {
          outputBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public Builder addOutput(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.Output value) {
        if (outputBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOutputIsMutable();
          output_.add(index, value);
          onChanged();
        } else {
          outputBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public Builder addOutput(
          com.google.devtools.build.lib.remote.RemoteProtocol.Output.Builder builderForValue) {
        if (outputBuilder_ == null) {
          ensureOutputIsMutable();
          output_.add(builderForValue.build());
          onChanged();
        } else {
          outputBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public Builder addOutput(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.Output.Builder builderForValue) {
        if (outputBuilder_ == null) {
          ensureOutputIsMutable();
          output_.add(index, builderForValue.build());
          onChanged();
        } else {
          outputBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public Builder addAllOutput(
          java.lang.Iterable<? extends com.google.devtools.build.lib.remote.RemoteProtocol.Output> values) {
        if (outputBuilder_ == null) {
          ensureOutputIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, output_);
          onChanged();
        } else {
          outputBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public Builder clearOutput() {
        if (outputBuilder_ == null) {
          output_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          outputBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public Builder removeOutput(int index) {
        if (outputBuilder_ == null) {
          ensureOutputIsMutable();
          output_.remove(index);
          onChanged();
        } else {
          outputBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.Output.Builder getOutputBuilder(
          int index) {
        return getOutputFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.OutputOrBuilder getOutputOrBuilder(
          int index) {
        if (outputBuilder_ == null) {
          return output_.get(index);  } else {
          return outputBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.OutputOrBuilder> 
           getOutputOrBuilderList() {
        if (outputBuilder_ != null) {
          return outputBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(output_);
        }
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.Output.Builder addOutputBuilder() {
        return getOutputFieldBuilder().addBuilder(
            com.google.devtools.build.lib.remote.RemoteProtocol.Output.getDefaultInstance());
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.Output.Builder addOutputBuilder(
          int index) {
        return getOutputFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.remote.RemoteProtocol.Output.getDefaultInstance());
      }
      /**
       * <pre>
       * Relative paths to the action's output files and directories.
       * Any unnamed output files will be discarded.
       * A path will be interpreted as a directory iff it contains a trailing
       * slash.
       * This should be sorted by path.
       * </pre>
       *
       * <code>repeated .build.remote.Output output = 1;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.Output.Builder> 
           getOutputBuilderList() {
        return getOutputFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.Output, com.google.devtools.build.lib.remote.RemoteProtocol.Output.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.OutputOrBuilder> 
          getOutputFieldBuilder() {
        if (outputBuilder_ == null) {
          outputBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.Output, com.google.devtools.build.lib.remote.RemoteProtocol.Output.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.OutputOrBuilder>(
                  output_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          output_ = null;
        }
        return outputBuilder_;
      }

      private int returnCode_ ;
      /**
       * <code>optional int32 return_code = 2;</code>
       */
      public int getReturnCode() {
        return returnCode_;
      }
      /**
       * <code>optional int32 return_code = 2;</code>
       */
      public Builder setReturnCode(int value) {
        
        returnCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 return_code = 2;</code>
       */
      public Builder clearReturnCode() {
        
        returnCode_ = 0;
        onChanged();
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest stdoutDigest_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> stdoutDigestBuilder_;
      /**
       * <code>optional .build.remote.ContentDigest stdout_digest = 3;</code>
       */
      public boolean hasStdoutDigest() {
        return stdoutDigestBuilder_ != null || stdoutDigest_ != null;
      }
      /**
       * <code>optional .build.remote.ContentDigest stdout_digest = 3;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getStdoutDigest() {
        if (stdoutDigestBuilder_ == null) {
          return stdoutDigest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : stdoutDigest_;
        } else {
          return stdoutDigestBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.ContentDigest stdout_digest = 3;</code>
       */
      public Builder setStdoutDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (stdoutDigestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          stdoutDigest_ = value;
          onChanged();
        } else {
          stdoutDigestBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest stdout_digest = 3;</code>
       */
      public Builder setStdoutDigest(
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (stdoutDigestBuilder_ == null) {
          stdoutDigest_ = builderForValue.build();
          onChanged();
        } else {
          stdoutDigestBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest stdout_digest = 3;</code>
       */
      public Builder mergeStdoutDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (stdoutDigestBuilder_ == null) {
          if (stdoutDigest_ != null) {
            stdoutDigest_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.newBuilder(stdoutDigest_).mergeFrom(value).buildPartial();
          } else {
            stdoutDigest_ = value;
          }
          onChanged();
        } else {
          stdoutDigestBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest stdout_digest = 3;</code>
       */
      public Builder clearStdoutDigest() {
        if (stdoutDigestBuilder_ == null) {
          stdoutDigest_ = null;
          onChanged();
        } else {
          stdoutDigest_ = null;
          stdoutDigestBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest stdout_digest = 3;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder getStdoutDigestBuilder() {
        
        onChanged();
        return getStdoutDigestFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.ContentDigest stdout_digest = 3;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getStdoutDigestOrBuilder() {
        if (stdoutDigestBuilder_ != null) {
          return stdoutDigestBuilder_.getMessageOrBuilder();
        } else {
          return stdoutDigest_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : stdoutDigest_;
        }
      }
      /**
       * <code>optional .build.remote.ContentDigest stdout_digest = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
          getStdoutDigestFieldBuilder() {
        if (stdoutDigestBuilder_ == null) {
          stdoutDigestBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder>(
                  getStdoutDigest(),
                  getParentForChildren(),
                  isClean());
          stdoutDigest_ = null;
        }
        return stdoutDigestBuilder_;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest stderrDigest_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> stderrDigestBuilder_;
      /**
       * <code>optional .build.remote.ContentDigest stderr_digest = 4;</code>
       */
      public boolean hasStderrDigest() {
        return stderrDigestBuilder_ != null || stderrDigest_ != null;
      }
      /**
       * <code>optional .build.remote.ContentDigest stderr_digest = 4;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getStderrDigest() {
        if (stderrDigestBuilder_ == null) {
          return stderrDigest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : stderrDigest_;
        } else {
          return stderrDigestBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.ContentDigest stderr_digest = 4;</code>
       */
      public Builder setStderrDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (stderrDigestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          stderrDigest_ = value;
          onChanged();
        } else {
          stderrDigestBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest stderr_digest = 4;</code>
       */
      public Builder setStderrDigest(
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (stderrDigestBuilder_ == null) {
          stderrDigest_ = builderForValue.build();
          onChanged();
        } else {
          stderrDigestBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest stderr_digest = 4;</code>
       */
      public Builder mergeStderrDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (stderrDigestBuilder_ == null) {
          if (stderrDigest_ != null) {
            stderrDigest_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.newBuilder(stderrDigest_).mergeFrom(value).buildPartial();
          } else {
            stderrDigest_ = value;
          }
          onChanged();
        } else {
          stderrDigestBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest stderr_digest = 4;</code>
       */
      public Builder clearStderrDigest() {
        if (stderrDigestBuilder_ == null) {
          stderrDigest_ = null;
          onChanged();
        } else {
          stderrDigest_ = null;
          stderrDigestBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest stderr_digest = 4;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder getStderrDigestBuilder() {
        
        onChanged();
        return getStderrDigestFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.ContentDigest stderr_digest = 4;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getStderrDigestOrBuilder() {
        if (stderrDigestBuilder_ != null) {
          return stderrDigestBuilder_.getMessageOrBuilder();
        } else {
          return stderrDigest_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : stderrDigest_;
        }
      }
      /**
       * <code>optional .build.remote.ContentDigest stderr_digest = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
          getStderrDigestFieldBuilder() {
        if (stderrDigestBuilder_ == null) {
          stderrDigestBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder>(
                  getStderrDigest(),
                  getParentForChildren(),
                  isClean());
          stderrDigest_ = null;
        }
        return stderrDigestBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.ActionResult)
    }

    // @@protoc_insertion_point(class_scope:build.remote.ActionResult)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ActionResult>
        PARSER = new com.google.protobuf.AbstractParser<ActionResult>() {
      public ActionResult parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new ActionResult(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CasStatusOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.CasStatus)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Whether the requested action had server side errors
     * </pre>
     *
     * <code>optional bool succeeded = 1;</code>
     */
    boolean getSucceeded();

    /**
     * <code>optional .build.remote.CasStatus.ErrorCode error = 2;</code>
     */
    int getErrorValue();
    /**
     * <code>optional .build.remote.CasStatus.ErrorCode error = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.ErrorCode getError();

    /**
     * <pre>
     * Human readable error.
     * </pre>
     *
     * <code>optional string error_detail = 3;</code>
     */
    java.lang.String getErrorDetail();
    /**
     * <pre>
     * Human readable error.
     * </pre>
     *
     * <code>optional string error_detail = 3;</code>
     */
    com.google.protobuf.ByteString
        getErrorDetailBytes();

    /**
     * <pre>
     * These are a common part of the status for many CAS requests:
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
     */
    java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> 
        getMissingDigestList();
    /**
     * <pre>
     * These are a common part of the status for many CAS requests:
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getMissingDigest(int index);
    /**
     * <pre>
     * These are a common part of the status for many CAS requests:
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
     */
    int getMissingDigestCount();
    /**
     * <pre>
     * These are a common part of the status for many CAS requests:
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
        getMissingDigestOrBuilderList();
    /**
     * <pre>
     * These are a common part of the status for many CAS requests:
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getMissingDigestOrBuilder(
        int index);

    /**
     * <pre>
     * Only relevant to trees.
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
     */
    java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> 
        getParseFailedDigestList();
    /**
     * <pre>
     * Only relevant to trees.
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getParseFailedDigest(int index);
    /**
     * <pre>
     * Only relevant to trees.
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
     */
    int getParseFailedDigestCount();
    /**
     * <pre>
     * Only relevant to trees.
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
        getParseFailedDigestOrBuilderList();
    /**
     * <pre>
     * Only relevant to trees.
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getParseFailedDigestOrBuilder(
        int index);
  }
  /**
   * <pre>
   * Status message shared by all CAS requests.
   * </pre>
   *
   * Protobuf type {@code build.remote.CasStatus}
   */
  public  static final class CasStatus extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.CasStatus)
      CasStatusOrBuilder {
    // Use CasStatus.newBuilder() to construct.
    private CasStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CasStatus() {
      succeeded_ = false;
      error_ = 0;
      errorDetail_ = "";
      missingDigest_ = java.util.Collections.emptyList();
      parseFailedDigest_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private CasStatus(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 8: {

              succeeded_ = input.readBool();
              break;
            }
            case 16: {
              int rawValue = input.readEnum();

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

              errorDetail_ = s;
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                missingDigest_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest>();
                mutable_bitField0_ |= 0x00000008;
              }
              missingDigest_.add(
                  input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.parser(), extensionRegistry));
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                parseFailedDigest_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest>();
                mutable_bitField0_ |= 0x00000010;
              }
              parseFailedDigest_.add(
                  input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.parser(), extensionRegistry));
              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_ & 0x00000008) == 0x00000008)) {
          missingDigest_ = java.util.Collections.unmodifiableList(missingDigest_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          parseFailedDigest_ = java.util.Collections.unmodifiableList(parseFailedDigest_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasStatus_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasStatus_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder.class);
    }

    /**
     * <pre>
     * or not.
     * </pre>
     *
     * Protobuf enum {@code build.remote.CasStatus.ErrorCode}
     */
    public enum ErrorCode
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN = 0;</code>
       */
      UNKNOWN(0),
      /**
       * <pre>
       * The client behaved incorrectly. error_detail should
       * </pre>
       *
       * <code>INVALID_ARGUMENT = 1;</code>
       */
      INVALID_ARGUMENT(1),
      /**
       * <pre>
       * have more information.
       * </pre>
       *
       * <code>MISSING_DIGEST = 2;</code>
       */
      MISSING_DIGEST(2),
      /**
       * <pre>
       * Upload only error, when requested digest does not
       * </pre>
       *
       * <code>DIGEST_MISMATCH = 3;</code>
       */
      DIGEST_MISMATCH(3),
      /**
       * <pre>
       * match the server side computed one.
       * </pre>
       *
       * <code>NODE_PARSE_ERROR = 4;</code>
       */
      NODE_PARSE_ERROR(4),
      UNRECOGNIZED(-1),
      ;

      /**
       * <code>UNKNOWN = 0;</code>
       */
      public static final int UNKNOWN_VALUE = 0;
      /**
       * <pre>
       * The client behaved incorrectly. error_detail should
       * </pre>
       *
       * <code>INVALID_ARGUMENT = 1;</code>
       */
      public static final int INVALID_ARGUMENT_VALUE = 1;
      /**
       * <pre>
       * have more information.
       * </pre>
       *
       * <code>MISSING_DIGEST = 2;</code>
       */
      public static final int MISSING_DIGEST_VALUE = 2;
      /**
       * <pre>
       * Upload only error, when requested digest does not
       * </pre>
       *
       * <code>DIGEST_MISMATCH = 3;</code>
       */
      public static final int DIGEST_MISMATCH_VALUE = 3;
      /**
       * <pre>
       * match the server side computed one.
       * </pre>
       *
       * <code>NODE_PARSE_ERROR = 4;</code>
       */
      public static final int NODE_PARSE_ERROR_VALUE = 4;


      public final int getNumber() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalArgumentException(
              "Can't get the number of an unknown enum value.");
        }
        return value;
      }

      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ErrorCode valueOf(int value) {
        return forNumber(value);
      }

      public static ErrorCode forNumber(int value) {
        switch (value) {
          case 0: return UNKNOWN;
          case 1: return INVALID_ARGUMENT;
          case 2: return MISSING_DIGEST;
          case 3: return DIGEST_MISMATCH;
          case 4: return NODE_PARSE_ERROR;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDescriptor().getEnumTypes().get(0);
      }

      private static final ErrorCode[] VALUES = values();

      public static ErrorCode valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        if (desc.getIndex() == -1) {
          return UNRECOGNIZED;
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

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

      // @@protoc_insertion_point(enum_scope:build.remote.CasStatus.ErrorCode)
    }

    private int bitField0_;
    public static final int SUCCEEDED_FIELD_NUMBER = 1;
    private boolean succeeded_;
    /**
     * <pre>
     * Whether the requested action had server side errors
     * </pre>
     *
     * <code>optional bool succeeded = 1;</code>
     */
    public boolean getSucceeded() {
      return succeeded_;
    }

    public static final int ERROR_FIELD_NUMBER = 2;
    private int error_;
    /**
     * <code>optional .build.remote.CasStatus.ErrorCode error = 2;</code>
     */
    public int getErrorValue() {
      return error_;
    }
    /**
     * <code>optional .build.remote.CasStatus.ErrorCode error = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.ErrorCode getError() {
      com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.ErrorCode result = com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.ErrorCode.valueOf(error_);
      return result == null ? com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.ErrorCode.UNRECOGNIZED : result;
    }

    public static final int ERROR_DETAIL_FIELD_NUMBER = 3;
    private volatile java.lang.Object errorDetail_;
    /**
     * <pre>
     * Human readable error.
     * </pre>
     *
     * <code>optional string error_detail = 3;</code>
     */
    public java.lang.String getErrorDetail() {
      java.lang.Object ref = errorDetail_;
      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();
        errorDetail_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Human readable error.
     * </pre>
     *
     * <code>optional string error_detail = 3;</code>
     */
    public com.google.protobuf.ByteString
        getErrorDetailBytes() {
      java.lang.Object ref = errorDetail_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        errorDetail_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MISSING_DIGEST_FIELD_NUMBER = 4;
    private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> missingDigest_;
    /**
     * <pre>
     * These are a common part of the status for many CAS requests:
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
     */
    public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> getMissingDigestList() {
      return missingDigest_;
    }
    /**
     * <pre>
     * These are a common part of the status for many CAS requests:
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
        getMissingDigestOrBuilderList() {
      return missingDigest_;
    }
    /**
     * <pre>
     * These are a common part of the status for many CAS requests:
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
     */
    public int getMissingDigestCount() {
      return missingDigest_.size();
    }
    /**
     * <pre>
     * These are a common part of the status for many CAS requests:
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getMissingDigest(int index) {
      return missingDigest_.get(index);
    }
    /**
     * <pre>
     * These are a common part of the status for many CAS requests:
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getMissingDigestOrBuilder(
        int index) {
      return missingDigest_.get(index);
    }

    public static final int PARSE_FAILED_DIGEST_FIELD_NUMBER = 5;
    private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> parseFailedDigest_;
    /**
     * <pre>
     * Only relevant to trees.
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
     */
    public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> getParseFailedDigestList() {
      return parseFailedDigest_;
    }
    /**
     * <pre>
     * Only relevant to trees.
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
        getParseFailedDigestOrBuilderList() {
      return parseFailedDigest_;
    }
    /**
     * <pre>
     * Only relevant to trees.
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
     */
    public int getParseFailedDigestCount() {
      return parseFailedDigest_.size();
    }
    /**
     * <pre>
     * Only relevant to trees.
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getParseFailedDigest(int index) {
      return parseFailedDigest_.get(index);
    }
    /**
     * <pre>
     * Only relevant to trees.
     * </pre>
     *
     * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getParseFailedDigestOrBuilder(
        int index) {
      return parseFailedDigest_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (succeeded_ != false) {
        output.writeBool(1, succeeded_);
      }
      if (error_ != com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.ErrorCode.UNKNOWN.getNumber()) {
        output.writeEnum(2, error_);
      }
      if (!getErrorDetailBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, errorDetail_);
      }
      for (int i = 0; i < missingDigest_.size(); i++) {
        output.writeMessage(4, missingDigest_.get(i));
      }
      for (int i = 0; i < parseFailedDigest_.size(); i++) {
        output.writeMessage(5, parseFailedDigest_.get(i));
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (succeeded_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, succeeded_);
      }
      if (error_ != com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.ErrorCode.UNKNOWN.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, error_);
      }
      if (!getErrorDetailBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, errorDetail_);
      }
      for (int i = 0; i < missingDigest_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, missingDigest_.get(i));
      }
      for (int i = 0; i < parseFailedDigest_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, parseFailedDigest_.get(i));
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus other = (com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus) obj;

      boolean result = true;
      result = result && (getSucceeded()
          == other.getSucceeded());
      result = result && error_ == other.error_;
      result = result && getErrorDetail()
          .equals(other.getErrorDetail());
      result = result && getMissingDigestList()
          .equals(other.getMissingDigestList());
      result = result && getParseFailedDigestList()
          .equals(other.getParseFailedDigestList());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      hash = (37 * hash) + SUCCEEDED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getSucceeded());
      hash = (37 * hash) + ERROR_FIELD_NUMBER;
      hash = (53 * hash) + error_;
      hash = (37 * hash) + ERROR_DETAIL_FIELD_NUMBER;
      hash = (53 * hash) + getErrorDetail().hashCode();
      if (getMissingDigestCount() > 0) {
        hash = (37 * hash) + MISSING_DIGEST_FIELD_NUMBER;
        hash = (53 * hash) + getMissingDigestList().hashCode();
      }
      if (getParseFailedDigestCount() > 0) {
        hash = (37 * hash) + PARSE_FAILED_DIGEST_FIELD_NUMBER;
        hash = (53 * hash) + getParseFailedDigestList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus 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.google.devtools.build.lib.remote.RemoteProtocol.CasStatus parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus 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.google.devtools.build.lib.remote.RemoteProtocol.CasStatus parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Status message shared by all CAS requests.
     * </pre>
     *
     * Protobuf type {@code build.remote.CasStatus}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.CasStatus)
        com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasStatus_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasStatus_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getMissingDigestFieldBuilder();
          getParseFailedDigestFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        succeeded_ = false;

        error_ = 0;

        errorDetail_ = "";

        if (missingDigestBuilder_ == null) {
          missingDigest_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          missingDigestBuilder_.clear();
        }
        if (parseFailedDigestBuilder_ == null) {
          parseFailedDigest_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          parseFailedDigestBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasStatus_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus result = new com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.succeeded_ = succeeded_;
        result.error_ = error_;
        result.errorDetail_ = errorDetail_;
        if (missingDigestBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            missingDigest_ = java.util.Collections.unmodifiableList(missingDigest_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.missingDigest_ = missingDigest_;
        } else {
          result.missingDigest_ = missingDigestBuilder_.build();
        }
        if (parseFailedDigestBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            parseFailedDigest_ = java.util.Collections.unmodifiableList(parseFailedDigest_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.parseFailedDigest_ = parseFailedDigest_;
        } else {
          result.parseFailedDigest_ = parseFailedDigestBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance()) return this;
        if (other.getSucceeded() != false) {
          setSucceeded(other.getSucceeded());
        }
        if (other.error_ != 0) {
          setErrorValue(other.getErrorValue());
        }
        if (!other.getErrorDetail().isEmpty()) {
          errorDetail_ = other.errorDetail_;
          onChanged();
        }
        if (missingDigestBuilder_ == null) {
          if (!other.missingDigest_.isEmpty()) {
            if (missingDigest_.isEmpty()) {
              missingDigest_ = other.missingDigest_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureMissingDigestIsMutable();
              missingDigest_.addAll(other.missingDigest_);
            }
            onChanged();
          }
        } else {
          if (!other.missingDigest_.isEmpty()) {
            if (missingDigestBuilder_.isEmpty()) {
              missingDigestBuilder_.dispose();
              missingDigestBuilder_ = null;
              missingDigest_ = other.missingDigest_;
              bitField0_ = (bitField0_ & ~0x00000008);
              missingDigestBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getMissingDigestFieldBuilder() : null;
            } else {
              missingDigestBuilder_.addAllMessages(other.missingDigest_);
            }
          }
        }
        if (parseFailedDigestBuilder_ == null) {
          if (!other.parseFailedDigest_.isEmpty()) {
            if (parseFailedDigest_.isEmpty()) {
              parseFailedDigest_ = other.parseFailedDigest_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureParseFailedDigestIsMutable();
              parseFailedDigest_.addAll(other.parseFailedDigest_);
            }
            onChanged();
          }
        } else {
          if (!other.parseFailedDigest_.isEmpty()) {
            if (parseFailedDigestBuilder_.isEmpty()) {
              parseFailedDigestBuilder_.dispose();
              parseFailedDigestBuilder_ = null;
              parseFailedDigest_ = other.parseFailedDigest_;
              bitField0_ = (bitField0_ & ~0x00000010);
              parseFailedDigestBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getParseFailedDigestFieldBuilder() : null;
            } else {
              parseFailedDigestBuilder_.addAllMessages(other.parseFailedDigest_);
            }
          }
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private boolean succeeded_ ;
      /**
       * <pre>
       * Whether the requested action had server side errors
       * </pre>
       *
       * <code>optional bool succeeded = 1;</code>
       */
      public boolean getSucceeded() {
        return succeeded_;
      }
      /**
       * <pre>
       * Whether the requested action had server side errors
       * </pre>
       *
       * <code>optional bool succeeded = 1;</code>
       */
      public Builder setSucceeded(boolean value) {
        
        succeeded_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether the requested action had server side errors
       * </pre>
       *
       * <code>optional bool succeeded = 1;</code>
       */
      public Builder clearSucceeded() {
        
        succeeded_ = false;
        onChanged();
        return this;
      }

      private int error_ = 0;
      /**
       * <code>optional .build.remote.CasStatus.ErrorCode error = 2;</code>
       */
      public int getErrorValue() {
        return error_;
      }
      /**
       * <code>optional .build.remote.CasStatus.ErrorCode error = 2;</code>
       */
      public Builder setErrorValue(int value) {
        error_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus.ErrorCode error = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.ErrorCode getError() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.ErrorCode result = com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.ErrorCode.valueOf(error_);
        return result == null ? com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.ErrorCode.UNRECOGNIZED : result;
      }
      /**
       * <code>optional .build.remote.CasStatus.ErrorCode error = 2;</code>
       */
      public Builder setError(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.ErrorCode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        error_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus.ErrorCode error = 2;</code>
       */
      public Builder clearError() {
        
        error_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object errorDetail_ = "";
      /**
       * <pre>
       * Human readable error.
       * </pre>
       *
       * <code>optional string error_detail = 3;</code>
       */
      public java.lang.String getErrorDetail() {
        java.lang.Object ref = errorDetail_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          errorDetail_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Human readable error.
       * </pre>
       *
       * <code>optional string error_detail = 3;</code>
       */
      public com.google.protobuf.ByteString
          getErrorDetailBytes() {
        java.lang.Object ref = errorDetail_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          errorDetail_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Human readable error.
       * </pre>
       *
       * <code>optional string error_detail = 3;</code>
       */
      public Builder setErrorDetail(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        errorDetail_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Human readable error.
       * </pre>
       *
       * <code>optional string error_detail = 3;</code>
       */
      public Builder clearErrorDetail() {
        
        errorDetail_ = getDefaultInstance().getErrorDetail();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Human readable error.
       * </pre>
       *
       * <code>optional string error_detail = 3;</code>
       */
      public Builder setErrorDetailBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        errorDetail_ = value;
        onChanged();
        return this;
      }

      private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> missingDigest_ =
        java.util.Collections.emptyList();
      private void ensureMissingDigestIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          missingDigest_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest>(missingDigest_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> missingDigestBuilder_;

      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> getMissingDigestList() {
        if (missingDigestBuilder_ == null) {
          return java.util.Collections.unmodifiableList(missingDigest_);
        } else {
          return missingDigestBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public int getMissingDigestCount() {
        if (missingDigestBuilder_ == null) {
          return missingDigest_.size();
        } else {
          return missingDigestBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getMissingDigest(int index) {
        if (missingDigestBuilder_ == null) {
          return missingDigest_.get(index);
        } else {
          return missingDigestBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public Builder setMissingDigest(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (missingDigestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMissingDigestIsMutable();
          missingDigest_.set(index, value);
          onChanged();
        } else {
          missingDigestBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public Builder setMissingDigest(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (missingDigestBuilder_ == null) {
          ensureMissingDigestIsMutable();
          missingDigest_.set(index, builderForValue.build());
          onChanged();
        } else {
          missingDigestBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public Builder addMissingDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (missingDigestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMissingDigestIsMutable();
          missingDigest_.add(value);
          onChanged();
        } else {
          missingDigestBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public Builder addMissingDigest(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (missingDigestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMissingDigestIsMutable();
          missingDigest_.add(index, value);
          onChanged();
        } else {
          missingDigestBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public Builder addMissingDigest(
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (missingDigestBuilder_ == null) {
          ensureMissingDigestIsMutable();
          missingDigest_.add(builderForValue.build());
          onChanged();
        } else {
          missingDigestBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public Builder addMissingDigest(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (missingDigestBuilder_ == null) {
          ensureMissingDigestIsMutable();
          missingDigest_.add(index, builderForValue.build());
          onChanged();
        } else {
          missingDigestBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public Builder addAllMissingDigest(
          java.lang.Iterable<? extends com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> values) {
        if (missingDigestBuilder_ == null) {
          ensureMissingDigestIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, missingDigest_);
          onChanged();
        } else {
          missingDigestBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public Builder clearMissingDigest() {
        if (missingDigestBuilder_ == null) {
          missingDigest_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          missingDigestBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public Builder removeMissingDigest(int index) {
        if (missingDigestBuilder_ == null) {
          ensureMissingDigestIsMutable();
          missingDigest_.remove(index);
          onChanged();
        } else {
          missingDigestBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder getMissingDigestBuilder(
          int index) {
        return getMissingDigestFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getMissingDigestOrBuilder(
          int index) {
        if (missingDigestBuilder_ == null) {
          return missingDigest_.get(index);  } else {
          return missingDigestBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
           getMissingDigestOrBuilderList() {
        if (missingDigestBuilder_ != null) {
          return missingDigestBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(missingDigest_);
        }
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder addMissingDigestBuilder() {
        return getMissingDigestFieldBuilder().addBuilder(
            com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance());
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder addMissingDigestBuilder(
          int index) {
        return getMissingDigestFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance());
      }
      /**
       * <pre>
       * These are a common part of the status for many CAS requests:
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest missing_digest = 4;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder> 
           getMissingDigestBuilderList() {
        return getMissingDigestFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
          getMissingDigestFieldBuilder() {
        if (missingDigestBuilder_ == null) {
          missingDigestBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder>(
                  missingDigest_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          missingDigest_ = null;
        }
        return missingDigestBuilder_;
      }

      private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> parseFailedDigest_ =
        java.util.Collections.emptyList();
      private void ensureParseFailedDigestIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          parseFailedDigest_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest>(parseFailedDigest_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> parseFailedDigestBuilder_;

      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> getParseFailedDigestList() {
        if (parseFailedDigestBuilder_ == null) {
          return java.util.Collections.unmodifiableList(parseFailedDigest_);
        } else {
          return parseFailedDigestBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public int getParseFailedDigestCount() {
        if (parseFailedDigestBuilder_ == null) {
          return parseFailedDigest_.size();
        } else {
          return parseFailedDigestBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getParseFailedDigest(int index) {
        if (parseFailedDigestBuilder_ == null) {
          return parseFailedDigest_.get(index);
        } else {
          return parseFailedDigestBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public Builder setParseFailedDigest(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (parseFailedDigestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureParseFailedDigestIsMutable();
          parseFailedDigest_.set(index, value);
          onChanged();
        } else {
          parseFailedDigestBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public Builder setParseFailedDigest(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (parseFailedDigestBuilder_ == null) {
          ensureParseFailedDigestIsMutable();
          parseFailedDigest_.set(index, builderForValue.build());
          onChanged();
        } else {
          parseFailedDigestBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public Builder addParseFailedDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (parseFailedDigestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureParseFailedDigestIsMutable();
          parseFailedDigest_.add(value);
          onChanged();
        } else {
          parseFailedDigestBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public Builder addParseFailedDigest(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (parseFailedDigestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureParseFailedDigestIsMutable();
          parseFailedDigest_.add(index, value);
          onChanged();
        } else {
          parseFailedDigestBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public Builder addParseFailedDigest(
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (parseFailedDigestBuilder_ == null) {
          ensureParseFailedDigestIsMutable();
          parseFailedDigest_.add(builderForValue.build());
          onChanged();
        } else {
          parseFailedDigestBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public Builder addParseFailedDigest(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (parseFailedDigestBuilder_ == null) {
          ensureParseFailedDigestIsMutable();
          parseFailedDigest_.add(index, builderForValue.build());
          onChanged();
        } else {
          parseFailedDigestBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public Builder addAllParseFailedDigest(
          java.lang.Iterable<? extends com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> values) {
        if (parseFailedDigestBuilder_ == null) {
          ensureParseFailedDigestIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, parseFailedDigest_);
          onChanged();
        } else {
          parseFailedDigestBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public Builder clearParseFailedDigest() {
        if (parseFailedDigestBuilder_ == null) {
          parseFailedDigest_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          parseFailedDigestBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public Builder removeParseFailedDigest(int index) {
        if (parseFailedDigestBuilder_ == null) {
          ensureParseFailedDigestIsMutable();
          parseFailedDigest_.remove(index);
          onChanged();
        } else {
          parseFailedDigestBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder getParseFailedDigestBuilder(
          int index) {
        return getParseFailedDigestFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getParseFailedDigestOrBuilder(
          int index) {
        if (parseFailedDigestBuilder_ == null) {
          return parseFailedDigest_.get(index);  } else {
          return parseFailedDigestBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
           getParseFailedDigestOrBuilderList() {
        if (parseFailedDigestBuilder_ != null) {
          return parseFailedDigestBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(parseFailedDigest_);
        }
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder addParseFailedDigestBuilder() {
        return getParseFailedDigestFieldBuilder().addBuilder(
            com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance());
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder addParseFailedDigestBuilder(
          int index) {
        return getParseFailedDigestFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance());
      }
      /**
       * <pre>
       * Only relevant to trees.
       * </pre>
       *
       * <code>repeated .build.remote.ContentDigest parse_failed_digest = 5;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder> 
           getParseFailedDigestBuilderList() {
        return getParseFailedDigestFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
          getParseFailedDigestFieldBuilder() {
        if (parseFailedDigestBuilder_ == null) {
          parseFailedDigestBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder>(
                  parseFailedDigest_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          parseFailedDigest_ = null;
        }
        return parseFailedDigestBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.CasStatus)
    }

    // @@protoc_insertion_point(class_scope:build.remote.CasStatus)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CasStatus>
        PARSER = new com.google.protobuf.AbstractParser<CasStatus>() {
      public CasStatus parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new CasStatus(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface FileNodeOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.FileNode)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .build.remote.FileMetadata file_metadata = 1;</code>
     */
    boolean hasFileMetadata();
    /**
     * <code>optional .build.remote.FileMetadata file_metadata = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata getFileMetadata();
    /**
     * <code>optional .build.remote.FileMetadata file_metadata = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadataOrBuilder getFileMetadataOrBuilder();

    /**
     * <pre>
     * The children should be sorted by path, and not have equal subdirectory
     * prefixes.
     * </pre>
     *
     * <code>repeated .build.remote.FileNode.Child child = 2;</code>
     */
    java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child> 
        getChildList();
    /**
     * <pre>
     * The children should be sorted by path, and not have equal subdirectory
     * prefixes.
     * </pre>
     *
     * <code>repeated .build.remote.FileNode.Child child = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child getChild(int index);
    /**
     * <pre>
     * The children should be sorted by path, and not have equal subdirectory
     * prefixes.
     * </pre>
     *
     * <code>repeated .build.remote.FileNode.Child child = 2;</code>
     */
    int getChildCount();
    /**
     * <pre>
     * The children should be sorted by path, and not have equal subdirectory
     * prefixes.
     * </pre>
     *
     * <code>repeated .build.remote.FileNode.Child child = 2;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.ChildOrBuilder> 
        getChildOrBuilderList();
    /**
     * <pre>
     * The children should be sorted by path, and not have equal subdirectory
     * prefixes.
     * </pre>
     *
     * <code>repeated .build.remote.FileNode.Child child = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.ChildOrBuilder getChildOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code build.remote.FileNode}
   */
  public  static final class FileNode extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.FileNode)
      FileNodeOrBuilder {
    // Use FileNode.newBuilder() to construct.
    private FileNode(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private FileNode() {
      child_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private FileNode(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.Builder subBuilder = null;
              if (fileMetadata_ != null) {
                subBuilder = fileMetadata_.toBuilder();
              }
              fileMetadata_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(fileMetadata_);
                fileMetadata_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                child_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child>();
                mutable_bitField0_ |= 0x00000002;
              }
              child_.add(
                  input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.parser(), extensionRegistry));
              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_ & 0x00000002) == 0x00000002)) {
          child_ = java.util.Collections.unmodifiableList(child_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_FileNode_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_FileNode_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.class, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder.class);
    }

    public interface ChildOrBuilder extends
        // @@protoc_insertion_point(interface_extends:build.remote.FileNode.Child)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>optional string path = 1;</code>
       */
      java.lang.String getPath();
      /**
       * <code>optional string path = 1;</code>
       */
      com.google.protobuf.ByteString
          getPathBytes();

      /**
       * <code>optional .build.remote.ContentDigest digest = 2;</code>
       */
      boolean hasDigest();
      /**
       * <code>optional .build.remote.ContentDigest digest = 2;</code>
       */
      com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest();
      /**
       * <code>optional .build.remote.ContentDigest digest = 2;</code>
       */
      com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder();
    }
    /**
     * Protobuf type {@code build.remote.FileNode.Child}
     */
    public  static final class Child extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:build.remote.FileNode.Child)
        ChildOrBuilder {
      // Use Child.newBuilder() to construct.
      private Child(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private Child() {
        path_ = "";
      }

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

                path_ = s;
                break;
              }
              case 18: {
                com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder subBuilder = null;
                if (digest_ != null) {
                  subBuilder = digest_.toBuilder();
                }
                digest_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(digest_);
                  digest_ = subBuilder.buildPartial();
                }

                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 {
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_FileNode_Child_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_FileNode_Child_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.class, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.Builder.class);
      }

      public static final int PATH_FIELD_NUMBER = 1;
      private volatile java.lang.Object path_;
      /**
       * <code>optional string path = 1;</code>
       */
      public java.lang.String getPath() {
        java.lang.Object ref = path_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          path_ = s;
          return s;
        }
      }
      /**
       * <code>optional string path = 1;</code>
       */
      public com.google.protobuf.ByteString
          getPathBytes() {
        java.lang.Object ref = path_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          path_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int DIGEST_FIELD_NUMBER = 2;
      private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest digest_;
      /**
       * <code>optional .build.remote.ContentDigest digest = 2;</code>
       */
      public boolean hasDigest() {
        return digest_ != null;
      }
      /**
       * <code>optional .build.remote.ContentDigest digest = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest() {
        return digest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : digest_;
      }
      /**
       * <code>optional .build.remote.ContentDigest digest = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder() {
        return getDigest();
      }

      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (!getPathBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, path_);
        }
        if (digest_ != null) {
          output.writeMessage(2, getDigest());
        }
      }

      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (!getPathBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, path_);
        }
        if (digest_ != null) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, getDigest());
        }
        memoizedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child)) {
          return super.equals(obj);
        }
        com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child other = (com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child) obj;

        boolean result = true;
        result = result && getPath()
            .equals(other.getPath());
        result = result && (hasDigest() == other.hasDigest());
        if (hasDigest()) {
          result = result && getDigest()
              .equals(other.getDigest());
        }
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptorForType().hashCode();
        hash = (37 * hash) + PATH_FIELD_NUMBER;
        hash = (53 * hash) + getPath().hashCode();
        if (hasDigest()) {
          hash = (37 * hash) + DIGEST_FIELD_NUMBER;
          hash = (53 * hash) + getDigest().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child 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.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child 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.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      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 build.remote.FileNode.Child}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:build.remote.FileNode.Child)
          com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.ChildOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_FileNode_Child_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_FileNode_Child_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.class, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.Builder.class);
        }

        // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        public Builder clear() {
          super.clear();
          path_ = "";

          if (digestBuilder_ == null) {
            digest_ = null;
          } else {
            digest_ = null;
            digestBuilder_ = null;
          }
          return this;
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_FileNode_Child_descriptor;
        }

        public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child getDefaultInstanceForType() {
          return com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.getDefaultInstance();
        }

        public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child build() {
          com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child buildPartial() {
          com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child result = new com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child(this);
          result.path_ = path_;
          if (digestBuilder_ == null) {
            result.digest_ = digest_;
          } else {
            result.digest_ = digestBuilder_.build();
          }
          onBuilt();
          return result;
        }

        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child) {
            return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child other) {
          if (other == com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.getDefaultInstance()) return this;
          if (!other.getPath().isEmpty()) {
            path_ = other.path_;
            onChanged();
          }
          if (other.hasDigest()) {
            mergeDigest(other.getDigest());
          }
          onChanged();
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private java.lang.Object path_ = "";
        /**
         * <code>optional string path = 1;</code>
         */
        public java.lang.String getPath() {
          java.lang.Object ref = path_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            path_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string path = 1;</code>
         */
        public com.google.protobuf.ByteString
            getPathBytes() {
          java.lang.Object ref = path_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            path_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string path = 1;</code>
         */
        public Builder setPath(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          path_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string path = 1;</code>
         */
        public Builder clearPath() {
          
          path_ = getDefaultInstance().getPath();
          onChanged();
          return this;
        }
        /**
         * <code>optional string path = 1;</code>
         */
        public Builder setPathBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          path_ = value;
          onChanged();
          return this;
        }

        private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest digest_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
            com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> digestBuilder_;
        /**
         * <code>optional .build.remote.ContentDigest digest = 2;</code>
         */
        public boolean hasDigest() {
          return digestBuilder_ != null || digest_ != null;
        }
        /**
         * <code>optional .build.remote.ContentDigest digest = 2;</code>
         */
        public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest() {
          if (digestBuilder_ == null) {
            return digest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : digest_;
          } else {
            return digestBuilder_.getMessage();
          }
        }
        /**
         * <code>optional .build.remote.ContentDigest digest = 2;</code>
         */
        public Builder setDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
          if (digestBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            digest_ = value;
            onChanged();
          } else {
            digestBuilder_.setMessage(value);
          }

          return this;
        }
        /**
         * <code>optional .build.remote.ContentDigest digest = 2;</code>
         */
        public Builder setDigest(
            com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
          if (digestBuilder_ == null) {
            digest_ = builderForValue.build();
            onChanged();
          } else {
            digestBuilder_.setMessage(builderForValue.build());
          }

          return this;
        }
        /**
         * <code>optional .build.remote.ContentDigest digest = 2;</code>
         */
        public Builder mergeDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
          if (digestBuilder_ == null) {
            if (digest_ != null) {
              digest_ =
                com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.newBuilder(digest_).mergeFrom(value).buildPartial();
            } else {
              digest_ = value;
            }
            onChanged();
          } else {
            digestBuilder_.mergeFrom(value);
          }

          return this;
        }
        /**
         * <code>optional .build.remote.ContentDigest digest = 2;</code>
         */
        public Builder clearDigest() {
          if (digestBuilder_ == null) {
            digest_ = null;
            onChanged();
          } else {
            digest_ = null;
            digestBuilder_ = null;
          }

          return this;
        }
        /**
         * <code>optional .build.remote.ContentDigest digest = 2;</code>
         */
        public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder getDigestBuilder() {
          
          onChanged();
          return getDigestFieldBuilder().getBuilder();
        }
        /**
         * <code>optional .build.remote.ContentDigest digest = 2;</code>
         */
        public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder() {
          if (digestBuilder_ != null) {
            return digestBuilder_.getMessageOrBuilder();
          } else {
            return digest_ == null ?
                com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : digest_;
          }
        }
        /**
         * <code>optional .build.remote.ContentDigest digest = 2;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
            getDigestFieldBuilder() {
          if (digestBuilder_ == null) {
            digestBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder>(
                    getDigest(),
                    getParentForChildren(),
                    isClean());
            digest_ = null;
          }
          return digestBuilder_;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return this;
        }

        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return this;
        }


        // @@protoc_insertion_point(builder_scope:build.remote.FileNode.Child)
      }

      // @@protoc_insertion_point(class_scope:build.remote.FileNode.Child)
      private static final com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child();
      }

      public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Child>
          PARSER = new com.google.protobuf.AbstractParser<Child>() {
        public Child parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
            return new Child(input, extensionRegistry);
        }
      };

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

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

      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int FILE_METADATA_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata fileMetadata_;
    /**
     * <code>optional .build.remote.FileMetadata file_metadata = 1;</code>
     */
    public boolean hasFileMetadata() {
      return fileMetadata_ != null;
    }
    /**
     * <code>optional .build.remote.FileMetadata file_metadata = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata getFileMetadata() {
      return fileMetadata_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.getDefaultInstance() : fileMetadata_;
    }
    /**
     * <code>optional .build.remote.FileMetadata file_metadata = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadataOrBuilder getFileMetadataOrBuilder() {
      return getFileMetadata();
    }

    public static final int CHILD_FIELD_NUMBER = 2;
    private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child> child_;
    /**
     * <pre>
     * The children should be sorted by path, and not have equal subdirectory
     * prefixes.
     * </pre>
     *
     * <code>repeated .build.remote.FileNode.Child child = 2;</code>
     */
    public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child> getChildList() {
      return child_;
    }
    /**
     * <pre>
     * The children should be sorted by path, and not have equal subdirectory
     * prefixes.
     * </pre>
     *
     * <code>repeated .build.remote.FileNode.Child child = 2;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.ChildOrBuilder> 
        getChildOrBuilderList() {
      return child_;
    }
    /**
     * <pre>
     * The children should be sorted by path, and not have equal subdirectory
     * prefixes.
     * </pre>
     *
     * <code>repeated .build.remote.FileNode.Child child = 2;</code>
     */
    public int getChildCount() {
      return child_.size();
    }
    /**
     * <pre>
     * The children should be sorted by path, and not have equal subdirectory
     * prefixes.
     * </pre>
     *
     * <code>repeated .build.remote.FileNode.Child child = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child getChild(int index) {
      return child_.get(index);
    }
    /**
     * <pre>
     * The children should be sorted by path, and not have equal subdirectory
     * prefixes.
     * </pre>
     *
     * <code>repeated .build.remote.FileNode.Child child = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.ChildOrBuilder getChildOrBuilder(
        int index) {
      return child_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (fileMetadata_ != null) {
        output.writeMessage(1, getFileMetadata());
      }
      for (int i = 0; i < child_.size(); i++) {
        output.writeMessage(2, child_.get(i));
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (fileMetadata_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getFileMetadata());
      }
      for (int i = 0; i < child_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, child_.get(i));
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.FileNode)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.FileNode other = (com.google.devtools.build.lib.remote.RemoteProtocol.FileNode) obj;

      boolean result = true;
      result = result && (hasFileMetadata() == other.hasFileMetadata());
      if (hasFileMetadata()) {
        result = result && getFileMetadata()
            .equals(other.getFileMetadata());
      }
      result = result && getChildList()
          .equals(other.getChildList());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasFileMetadata()) {
        hash = (37 * hash) + FILE_METADATA_FIELD_NUMBER;
        hash = (53 * hash) + getFileMetadata().hashCode();
      }
      if (getChildCount() > 0) {
        hash = (37 * hash) + CHILD_FIELD_NUMBER;
        hash = (53 * hash) + getChildList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode 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.google.devtools.build.lib.remote.RemoteProtocol.FileNode parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode 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.google.devtools.build.lib.remote.RemoteProtocol.FileNode parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.FileNode prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.FileNode}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.FileNode)
        com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_FileNode_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_FileNode_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.class, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getChildFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (fileMetadataBuilder_ == null) {
          fileMetadata_ = null;
        } else {
          fileMetadata_ = null;
          fileMetadataBuilder_ = null;
        }
        if (childBuilder_ == null) {
          child_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          childBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_FileNode_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.FileNode result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.FileNode result = new com.google.devtools.build.lib.remote.RemoteProtocol.FileNode(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (fileMetadataBuilder_ == null) {
          result.fileMetadata_ = fileMetadata_;
        } else {
          result.fileMetadata_ = fileMetadataBuilder_.build();
        }
        if (childBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            child_ = java.util.Collections.unmodifiableList(child_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.child_ = child_;
        } else {
          result.child_ = childBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.FileNode) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.FileNode)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.FileNode other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.getDefaultInstance()) return this;
        if (other.hasFileMetadata()) {
          mergeFileMetadata(other.getFileMetadata());
        }
        if (childBuilder_ == null) {
          if (!other.child_.isEmpty()) {
            if (child_.isEmpty()) {
              child_ = other.child_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureChildIsMutable();
              child_.addAll(other.child_);
            }
            onChanged();
          }
        } else {
          if (!other.child_.isEmpty()) {
            if (childBuilder_.isEmpty()) {
              childBuilder_.dispose();
              childBuilder_ = null;
              child_ = other.child_;
              bitField0_ = (bitField0_ & ~0x00000002);
              childBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getChildFieldBuilder() : null;
            } else {
              childBuilder_.addAllMessages(other.child_);
            }
          }
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.FileNode parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.FileNode) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata fileMetadata_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata, com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadataOrBuilder> fileMetadataBuilder_;
      /**
       * <code>optional .build.remote.FileMetadata file_metadata = 1;</code>
       */
      public boolean hasFileMetadata() {
        return fileMetadataBuilder_ != null || fileMetadata_ != null;
      }
      /**
       * <code>optional .build.remote.FileMetadata file_metadata = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata getFileMetadata() {
        if (fileMetadataBuilder_ == null) {
          return fileMetadata_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.getDefaultInstance() : fileMetadata_;
        } else {
          return fileMetadataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.FileMetadata file_metadata = 1;</code>
       */
      public Builder setFileMetadata(com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata value) {
        if (fileMetadataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          fileMetadata_ = value;
          onChanged();
        } else {
          fileMetadataBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.FileMetadata file_metadata = 1;</code>
       */
      public Builder setFileMetadata(
          com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.Builder builderForValue) {
        if (fileMetadataBuilder_ == null) {
          fileMetadata_ = builderForValue.build();
          onChanged();
        } else {
          fileMetadataBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.FileMetadata file_metadata = 1;</code>
       */
      public Builder mergeFileMetadata(com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata value) {
        if (fileMetadataBuilder_ == null) {
          if (fileMetadata_ != null) {
            fileMetadata_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.newBuilder(fileMetadata_).mergeFrom(value).buildPartial();
          } else {
            fileMetadata_ = value;
          }
          onChanged();
        } else {
          fileMetadataBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.FileMetadata file_metadata = 1;</code>
       */
      public Builder clearFileMetadata() {
        if (fileMetadataBuilder_ == null) {
          fileMetadata_ = null;
          onChanged();
        } else {
          fileMetadata_ = null;
          fileMetadataBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.FileMetadata file_metadata = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.Builder getFileMetadataBuilder() {
        
        onChanged();
        return getFileMetadataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.FileMetadata file_metadata = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadataOrBuilder getFileMetadataOrBuilder() {
        if (fileMetadataBuilder_ != null) {
          return fileMetadataBuilder_.getMessageOrBuilder();
        } else {
          return fileMetadata_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.getDefaultInstance() : fileMetadata_;
        }
      }
      /**
       * <code>optional .build.remote.FileMetadata file_metadata = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata, com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadataOrBuilder> 
          getFileMetadataFieldBuilder() {
        if (fileMetadataBuilder_ == null) {
          fileMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata, com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadata.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.FileMetadataOrBuilder>(
                  getFileMetadata(),
                  getParentForChildren(),
                  isClean());
          fileMetadata_ = null;
        }
        return fileMetadataBuilder_;
      }

      private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child> child_ =
        java.util.Collections.emptyList();
      private void ensureChildIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          child_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child>(child_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.ChildOrBuilder> childBuilder_;

      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child> getChildList() {
        if (childBuilder_ == null) {
          return java.util.Collections.unmodifiableList(child_);
        } else {
          return childBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public int getChildCount() {
        if (childBuilder_ == null) {
          return child_.size();
        } else {
          return childBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child getChild(int index) {
        if (childBuilder_ == null) {
          return child_.get(index);
        } else {
          return childBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public Builder setChild(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child value) {
        if (childBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureChildIsMutable();
          child_.set(index, value);
          onChanged();
        } else {
          childBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public Builder setChild(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.Builder builderForValue) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          child_.set(index, builderForValue.build());
          onChanged();
        } else {
          childBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public Builder addChild(com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child value) {
        if (childBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureChildIsMutable();
          child_.add(value);
          onChanged();
        } else {
          childBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public Builder addChild(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child value) {
        if (childBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureChildIsMutable();
          child_.add(index, value);
          onChanged();
        } else {
          childBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public Builder addChild(
          com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.Builder builderForValue) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          child_.add(builderForValue.build());
          onChanged();
        } else {
          childBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public Builder addChild(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.Builder builderForValue) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          child_.add(index, builderForValue.build());
          onChanged();
        } else {
          childBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public Builder addAllChild(
          java.lang.Iterable<? extends com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child> values) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, child_);
          onChanged();
        } else {
          childBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public Builder clearChild() {
        if (childBuilder_ == null) {
          child_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          childBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public Builder removeChild(int index) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          child_.remove(index);
          onChanged();
        } else {
          childBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.Builder getChildBuilder(
          int index) {
        return getChildFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.ChildOrBuilder getChildOrBuilder(
          int index) {
        if (childBuilder_ == null) {
          return child_.get(index);  } else {
          return childBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.ChildOrBuilder> 
           getChildOrBuilderList() {
        if (childBuilder_ != null) {
          return childBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(child_);
        }
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.Builder addChildBuilder() {
        return getChildFieldBuilder().addBuilder(
            com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.getDefaultInstance());
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.Builder addChildBuilder(
          int index) {
        return getChildFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.getDefaultInstance());
      }
      /**
       * <pre>
       * The children should be sorted by path, and not have equal subdirectory
       * prefixes.
       * </pre>
       *
       * <code>repeated .build.remote.FileNode.Child child = 2;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.Builder> 
           getChildBuilderList() {
        return getChildFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.ChildOrBuilder> 
          getChildFieldBuilder() {
        if (childBuilder_ == null) {
          childBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Child.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.ChildOrBuilder>(
                  child_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          child_ = null;
        }
        return childBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.FileNode)
    }

    // @@protoc_insertion_point(class_scope:build.remote.FileNode)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.FileNode DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.FileNode();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.FileNode getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<FileNode>
        PARSER = new com.google.protobuf.AbstractParser<FileNode>() {
      public FileNode parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new FileNode(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CasLookupRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.CasLookupRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> 
        getDigestList();
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest(int index);
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    int getDigestCount();
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
        getDigestOrBuilderList();
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code build.remote.CasLookupRequest}
   */
  public  static final class CasLookupRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.CasLookupRequest)
      CasLookupRequestOrBuilder {
    // Use CasLookupRequest.newBuilder() to construct.
    private CasLookupRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CasLookupRequest() {
      digest_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private CasLookupRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                digest_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest>();
                mutable_bitField0_ |= 0x00000001;
              }
              digest_.add(
                  input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.parser(), extensionRegistry));
              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) == 0x00000001)) {
          digest_ = java.util.Collections.unmodifiableList(digest_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasLookupRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasLookupRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest.Builder.class);
    }

    public static final int DIGEST_FIELD_NUMBER = 1;
    private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> digest_;
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> getDigestList() {
      return digest_;
    }
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
        getDigestOrBuilderList() {
      return digest_;
    }
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    public int getDigestCount() {
      return digest_.size();
    }
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest(int index) {
      return digest_.get(index);
    }
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder(
        int index) {
      return digest_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

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

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

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

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest other = (com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest) obj;

      boolean result = true;
      result = result && getDigestList()
          .equals(other.getDigestList());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (getDigestCount() > 0) {
        hash = (37 * hash) + DIGEST_FIELD_NUMBER;
        hash = (53 * hash) + getDigestList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest 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.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest 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.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.CasLookupRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.CasLookupRequest)
        com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasLookupRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasLookupRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getDigestFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (digestBuilder_ == null) {
          digest_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          digestBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasLookupRequest_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest result = new com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest(this);
        int from_bitField0_ = bitField0_;
        if (digestBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            digest_ = java.util.Collections.unmodifiableList(digest_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.digest_ = digest_;
        } else {
          result.digest_ = digestBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest.getDefaultInstance()) return this;
        if (digestBuilder_ == null) {
          if (!other.digest_.isEmpty()) {
            if (digest_.isEmpty()) {
              digest_ = other.digest_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureDigestIsMutable();
              digest_.addAll(other.digest_);
            }
            onChanged();
          }
        } else {
          if (!other.digest_.isEmpty()) {
            if (digestBuilder_.isEmpty()) {
              digestBuilder_.dispose();
              digestBuilder_ = null;
              digest_ = other.digest_;
              bitField0_ = (bitField0_ & ~0x00000001);
              digestBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getDigestFieldBuilder() : null;
            } else {
              digestBuilder_.addAllMessages(other.digest_);
            }
          }
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> digest_ =
        java.util.Collections.emptyList();
      private void ensureDigestIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          digest_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest>(digest_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> digestBuilder_;

      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> getDigestList() {
        if (digestBuilder_ == null) {
          return java.util.Collections.unmodifiableList(digest_);
        } else {
          return digestBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public int getDigestCount() {
        if (digestBuilder_ == null) {
          return digest_.size();
        } else {
          return digestBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest(int index) {
        if (digestBuilder_ == null) {
          return digest_.get(index);
        } else {
          return digestBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder setDigest(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (digestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDigestIsMutable();
          digest_.set(index, value);
          onChanged();
        } else {
          digestBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder setDigest(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (digestBuilder_ == null) {
          ensureDigestIsMutable();
          digest_.set(index, builderForValue.build());
          onChanged();
        } else {
          digestBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder addDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (digestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDigestIsMutable();
          digest_.add(value);
          onChanged();
        } else {
          digestBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder addDigest(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (digestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDigestIsMutable();
          digest_.add(index, value);
          onChanged();
        } else {
          digestBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder addDigest(
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (digestBuilder_ == null) {
          ensureDigestIsMutable();
          digest_.add(builderForValue.build());
          onChanged();
        } else {
          digestBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder addDigest(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (digestBuilder_ == null) {
          ensureDigestIsMutable();
          digest_.add(index, builderForValue.build());
          onChanged();
        } else {
          digestBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder addAllDigest(
          java.lang.Iterable<? extends com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> values) {
        if (digestBuilder_ == null) {
          ensureDigestIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, digest_);
          onChanged();
        } else {
          digestBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder clearDigest() {
        if (digestBuilder_ == null) {
          digest_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          digestBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder removeDigest(int index) {
        if (digestBuilder_ == null) {
          ensureDigestIsMutable();
          digest_.remove(index);
          onChanged();
        } else {
          digestBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder getDigestBuilder(
          int index) {
        return getDigestFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder(
          int index) {
        if (digestBuilder_ == null) {
          return digest_.get(index);  } else {
          return digestBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
           getDigestOrBuilderList() {
        if (digestBuilder_ != null) {
          return digestBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(digest_);
        }
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder addDigestBuilder() {
        return getDigestFieldBuilder().addBuilder(
            com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance());
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder addDigestBuilder(
          int index) {
        return getDigestFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance());
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder> 
           getDigestBuilderList() {
        return getDigestFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
          getDigestFieldBuilder() {
        if (digestBuilder_ == null) {
          digestBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder>(
                  digest_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          digest_ = null;
        }
        return digestBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.CasLookupRequest)
    }

    // @@protoc_insertion_point(class_scope:build.remote.CasLookupRequest)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CasLookupRequest>
        PARSER = new com.google.protobuf.AbstractParser<CasLookupRequest>() {
      public CasLookupRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new CasLookupRequest(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CasLookupReplyOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.CasLookupReply)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    boolean hasStatus();
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getStatus();
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getStatusOrBuilder();
  }
  /**
   * Protobuf type {@code build.remote.CasLookupReply}
   */
  public  static final class CasLookupReply extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.CasLookupReply)
      CasLookupReplyOrBuilder {
    // Use CasLookupReply.newBuilder() to construct.
    private CasLookupReply(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CasLookupReply() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private CasLookupReply(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder subBuilder = null;
              if (status_ != null) {
                subBuilder = status_.toBuilder();
              }
              status_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(status_);
                status_ = subBuilder.buildPartial();
              }

              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasLookupReply_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasLookupReply_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply.Builder.class);
    }

    public static final int STATUS_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus status_;
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    public boolean hasStatus() {
      return status_ != null;
    }
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getStatus() {
      return status_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : status_;
    }
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getStatusOrBuilder() {
      return getStatus();
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (status_ != null) {
        output.writeMessage(1, getStatus());
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (status_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getStatus());
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply other = (com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply) obj;

      boolean result = true;
      result = result && (hasStatus() == other.hasStatus());
      if (hasStatus()) {
        result = result && getStatus()
            .equals(other.getStatus());
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasStatus()) {
        hash = (37 * hash) + STATUS_FIELD_NUMBER;
        hash = (53 * hash) + getStatus().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply 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.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply 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.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.CasLookupReply}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.CasLookupReply)
        com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReplyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasLookupReply_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasLookupReply_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        if (statusBuilder_ == null) {
          status_ = null;
        } else {
          status_ = null;
          statusBuilder_ = null;
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasLookupReply_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply result = new com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply(this);
        if (statusBuilder_ == null) {
          result.status_ = status_;
        } else {
          result.status_ = statusBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply.getDefaultInstance()) return this;
        if (other.hasStatus()) {
          mergeStatus(other.getStatus());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus status_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder> statusBuilder_;
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public boolean hasStatus() {
        return statusBuilder_ != null || status_ != null;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getStatus() {
        if (statusBuilder_ == null) {
          return status_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : status_;
        } else {
          return statusBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder setStatus(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus value) {
        if (statusBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          status_ = value;
          onChanged();
        } else {
          statusBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder setStatus(
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder builderForValue) {
        if (statusBuilder_ == null) {
          status_ = builderForValue.build();
          onChanged();
        } else {
          statusBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder mergeStatus(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus value) {
        if (statusBuilder_ == null) {
          if (status_ != null) {
            status_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.newBuilder(status_).mergeFrom(value).buildPartial();
          } else {
            status_ = value;
          }
          onChanged();
        } else {
          statusBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder clearStatus() {
        if (statusBuilder_ == null) {
          status_ = null;
          onChanged();
        } else {
          status_ = null;
          statusBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder getStatusBuilder() {
        
        onChanged();
        return getStatusFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getStatusOrBuilder() {
        if (statusBuilder_ != null) {
          return statusBuilder_.getMessageOrBuilder();
        } else {
          return status_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : status_;
        }
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder> 
          getStatusFieldBuilder() {
        if (statusBuilder_ == null) {
          statusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder>(
                  getStatus(),
                  getParentForChildren(),
                  isClean());
          status_ = null;
        }
        return statusBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.CasLookupReply)
    }

    // @@protoc_insertion_point(class_scope:build.remote.CasLookupReply)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CasLookupReply>
        PARSER = new com.google.protobuf.AbstractParser<CasLookupReply>() {
      public CasLookupReply parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new CasLookupReply(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CasUploadTreeMetadataRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.CasUploadTreeMetadataRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .build.remote.FileNode tree_node = 1;</code>
     */
    java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode> 
        getTreeNodeList();
    /**
     * <code>repeated .build.remote.FileNode tree_node = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.FileNode getTreeNode(int index);
    /**
     * <code>repeated .build.remote.FileNode tree_node = 1;</code>
     */
    int getTreeNodeCount();
    /**
     * <code>repeated .build.remote.FileNode tree_node = 1;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder> 
        getTreeNodeOrBuilderList();
    /**
     * <code>repeated .build.remote.FileNode tree_node = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder getTreeNodeOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code build.remote.CasUploadTreeMetadataRequest}
   */
  public  static final class CasUploadTreeMetadataRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.CasUploadTreeMetadataRequest)
      CasUploadTreeMetadataRequestOrBuilder {
    // Use CasUploadTreeMetadataRequest.newBuilder() to construct.
    private CasUploadTreeMetadataRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CasUploadTreeMetadataRequest() {
      treeNode_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private CasUploadTreeMetadataRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                treeNode_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode>();
                mutable_bitField0_ |= 0x00000001;
              }
              treeNode_.add(
                  input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.parser(), extensionRegistry));
              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) == 0x00000001)) {
          treeNode_ = java.util.Collections.unmodifiableList(treeNode_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadTreeMetadataRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadTreeMetadataRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest.Builder.class);
    }

    public static final int TREE_NODE_FIELD_NUMBER = 1;
    private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode> treeNode_;
    /**
     * <code>repeated .build.remote.FileNode tree_node = 1;</code>
     */
    public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode> getTreeNodeList() {
      return treeNode_;
    }
    /**
     * <code>repeated .build.remote.FileNode tree_node = 1;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder> 
        getTreeNodeOrBuilderList() {
      return treeNode_;
    }
    /**
     * <code>repeated .build.remote.FileNode tree_node = 1;</code>
     */
    public int getTreeNodeCount() {
      return treeNode_.size();
    }
    /**
     * <code>repeated .build.remote.FileNode tree_node = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode getTreeNode(int index) {
      return treeNode_.get(index);
    }
    /**
     * <code>repeated .build.remote.FileNode tree_node = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder getTreeNodeOrBuilder(
        int index) {
      return treeNode_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

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

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

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

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest other = (com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest) obj;

      boolean result = true;
      result = result && getTreeNodeList()
          .equals(other.getTreeNodeList());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (getTreeNodeCount() > 0) {
        hash = (37 * hash) + TREE_NODE_FIELD_NUMBER;
        hash = (53 * hash) + getTreeNodeList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest 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.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest 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.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.CasUploadTreeMetadataRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.CasUploadTreeMetadataRequest)
        com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadTreeMetadataRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadTreeMetadataRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getTreeNodeFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (treeNodeBuilder_ == null) {
          treeNode_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          treeNodeBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadTreeMetadataRequest_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest result = new com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest(this);
        int from_bitField0_ = bitField0_;
        if (treeNodeBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            treeNode_ = java.util.Collections.unmodifiableList(treeNode_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.treeNode_ = treeNode_;
        } else {
          result.treeNode_ = treeNodeBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest.getDefaultInstance()) return this;
        if (treeNodeBuilder_ == null) {
          if (!other.treeNode_.isEmpty()) {
            if (treeNode_.isEmpty()) {
              treeNode_ = other.treeNode_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureTreeNodeIsMutable();
              treeNode_.addAll(other.treeNode_);
            }
            onChanged();
          }
        } else {
          if (!other.treeNode_.isEmpty()) {
            if (treeNodeBuilder_.isEmpty()) {
              treeNodeBuilder_.dispose();
              treeNodeBuilder_ = null;
              treeNode_ = other.treeNode_;
              bitField0_ = (bitField0_ & ~0x00000001);
              treeNodeBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getTreeNodeFieldBuilder() : null;
            } else {
              treeNodeBuilder_.addAllMessages(other.treeNode_);
            }
          }
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode> treeNode_ =
        java.util.Collections.emptyList();
      private void ensureTreeNodeIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          treeNode_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode>(treeNode_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.FileNode, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder> treeNodeBuilder_;

      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode> getTreeNodeList() {
        if (treeNodeBuilder_ == null) {
          return java.util.Collections.unmodifiableList(treeNode_);
        } else {
          return treeNodeBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public int getTreeNodeCount() {
        if (treeNodeBuilder_ == null) {
          return treeNode_.size();
        } else {
          return treeNodeBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode getTreeNode(int index) {
        if (treeNodeBuilder_ == null) {
          return treeNode_.get(index);
        } else {
          return treeNodeBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public Builder setTreeNode(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode value) {
        if (treeNodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTreeNodeIsMutable();
          treeNode_.set(index, value);
          onChanged();
        } else {
          treeNodeBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public Builder setTreeNode(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder builderForValue) {
        if (treeNodeBuilder_ == null) {
          ensureTreeNodeIsMutable();
          treeNode_.set(index, builderForValue.build());
          onChanged();
        } else {
          treeNodeBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public Builder addTreeNode(com.google.devtools.build.lib.remote.RemoteProtocol.FileNode value) {
        if (treeNodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTreeNodeIsMutable();
          treeNode_.add(value);
          onChanged();
        } else {
          treeNodeBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public Builder addTreeNode(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode value) {
        if (treeNodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTreeNodeIsMutable();
          treeNode_.add(index, value);
          onChanged();
        } else {
          treeNodeBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public Builder addTreeNode(
          com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder builderForValue) {
        if (treeNodeBuilder_ == null) {
          ensureTreeNodeIsMutable();
          treeNode_.add(builderForValue.build());
          onChanged();
        } else {
          treeNodeBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public Builder addTreeNode(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder builderForValue) {
        if (treeNodeBuilder_ == null) {
          ensureTreeNodeIsMutable();
          treeNode_.add(index, builderForValue.build());
          onChanged();
        } else {
          treeNodeBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public Builder addAllTreeNode(
          java.lang.Iterable<? extends com.google.devtools.build.lib.remote.RemoteProtocol.FileNode> values) {
        if (treeNodeBuilder_ == null) {
          ensureTreeNodeIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, treeNode_);
          onChanged();
        } else {
          treeNodeBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public Builder clearTreeNode() {
        if (treeNodeBuilder_ == null) {
          treeNode_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          treeNodeBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public Builder removeTreeNode(int index) {
        if (treeNodeBuilder_ == null) {
          ensureTreeNodeIsMutable();
          treeNode_.remove(index);
          onChanged();
        } else {
          treeNodeBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder getTreeNodeBuilder(
          int index) {
        return getTreeNodeFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder getTreeNodeOrBuilder(
          int index) {
        if (treeNodeBuilder_ == null) {
          return treeNode_.get(index);  } else {
          return treeNodeBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder> 
           getTreeNodeOrBuilderList() {
        if (treeNodeBuilder_ != null) {
          return treeNodeBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(treeNode_);
        }
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder addTreeNodeBuilder() {
        return getTreeNodeFieldBuilder().addBuilder(
            com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.getDefaultInstance());
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder addTreeNodeBuilder(
          int index) {
        return getTreeNodeFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.getDefaultInstance());
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 1;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder> 
           getTreeNodeBuilderList() {
        return getTreeNodeFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.FileNode, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder> 
          getTreeNodeFieldBuilder() {
        if (treeNodeBuilder_ == null) {
          treeNodeBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.FileNode, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder>(
                  treeNode_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          treeNode_ = null;
        }
        return treeNodeBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.CasUploadTreeMetadataRequest)
    }

    // @@protoc_insertion_point(class_scope:build.remote.CasUploadTreeMetadataRequest)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CasUploadTreeMetadataRequest>
        PARSER = new com.google.protobuf.AbstractParser<CasUploadTreeMetadataRequest>() {
      public CasUploadTreeMetadataRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new CasUploadTreeMetadataRequest(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CasUploadTreeMetadataReplyOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.CasUploadTreeMetadataReply)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    boolean hasStatus();
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getStatus();
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getStatusOrBuilder();
  }
  /**
   * Protobuf type {@code build.remote.CasUploadTreeMetadataReply}
   */
  public  static final class CasUploadTreeMetadataReply extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.CasUploadTreeMetadataReply)
      CasUploadTreeMetadataReplyOrBuilder {
    // Use CasUploadTreeMetadataReply.newBuilder() to construct.
    private CasUploadTreeMetadataReply(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CasUploadTreeMetadataReply() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private CasUploadTreeMetadataReply(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder subBuilder = null;
              if (status_ != null) {
                subBuilder = status_.toBuilder();
              }
              status_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(status_);
                status_ = subBuilder.buildPartial();
              }

              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadTreeMetadataReply_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadTreeMetadataReply_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply.Builder.class);
    }

    public static final int STATUS_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus status_;
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    public boolean hasStatus() {
      return status_ != null;
    }
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getStatus() {
      return status_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : status_;
    }
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getStatusOrBuilder() {
      return getStatus();
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (status_ != null) {
        output.writeMessage(1, getStatus());
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (status_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getStatus());
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply other = (com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply) obj;

      boolean result = true;
      result = result && (hasStatus() == other.hasStatus());
      if (hasStatus()) {
        result = result && getStatus()
            .equals(other.getStatus());
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasStatus()) {
        hash = (37 * hash) + STATUS_FIELD_NUMBER;
        hash = (53 * hash) + getStatus().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply 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.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply 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.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.CasUploadTreeMetadataReply}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.CasUploadTreeMetadataReply)
        com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReplyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadTreeMetadataReply_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadTreeMetadataReply_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        if (statusBuilder_ == null) {
          status_ = null;
        } else {
          status_ = null;
          statusBuilder_ = null;
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadTreeMetadataReply_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply result = new com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply(this);
        if (statusBuilder_ == null) {
          result.status_ = status_;
        } else {
          result.status_ = statusBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply.getDefaultInstance()) return this;
        if (other.hasStatus()) {
          mergeStatus(other.getStatus());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus status_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder> statusBuilder_;
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public boolean hasStatus() {
        return statusBuilder_ != null || status_ != null;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getStatus() {
        if (statusBuilder_ == null) {
          return status_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : status_;
        } else {
          return statusBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder setStatus(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus value) {
        if (statusBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          status_ = value;
          onChanged();
        } else {
          statusBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder setStatus(
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder builderForValue) {
        if (statusBuilder_ == null) {
          status_ = builderForValue.build();
          onChanged();
        } else {
          statusBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder mergeStatus(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus value) {
        if (statusBuilder_ == null) {
          if (status_ != null) {
            status_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.newBuilder(status_).mergeFrom(value).buildPartial();
          } else {
            status_ = value;
          }
          onChanged();
        } else {
          statusBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder clearStatus() {
        if (statusBuilder_ == null) {
          status_ = null;
          onChanged();
        } else {
          status_ = null;
          statusBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder getStatusBuilder() {
        
        onChanged();
        return getStatusFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getStatusOrBuilder() {
        if (statusBuilder_ != null) {
          return statusBuilder_.getMessageOrBuilder();
        } else {
          return status_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : status_;
        }
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder> 
          getStatusFieldBuilder() {
        if (statusBuilder_ == null) {
          statusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder>(
                  getStatus(),
                  getParentForChildren(),
                  isClean());
          status_ = null;
        }
        return statusBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.CasUploadTreeMetadataReply)
    }

    // @@protoc_insertion_point(class_scope:build.remote.CasUploadTreeMetadataReply)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CasUploadTreeMetadataReply>
        PARSER = new com.google.protobuf.AbstractParser<CasUploadTreeMetadataReply>() {
      public CasUploadTreeMetadataReply parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new CasUploadTreeMetadataReply(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CasDownloadTreeMetadataRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.CasDownloadTreeMetadataRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .build.remote.ContentDigest root = 1;</code>
     */
    boolean hasRoot();
    /**
     * <code>optional .build.remote.ContentDigest root = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getRoot();
    /**
     * <code>optional .build.remote.ContentDigest root = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getRootOrBuilder();
  }
  /**
   * Protobuf type {@code build.remote.CasDownloadTreeMetadataRequest}
   */
  public  static final class CasDownloadTreeMetadataRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.CasDownloadTreeMetadataRequest)
      CasDownloadTreeMetadataRequestOrBuilder {
    // Use CasDownloadTreeMetadataRequest.newBuilder() to construct.
    private CasDownloadTreeMetadataRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CasDownloadTreeMetadataRequest() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private CasDownloadTreeMetadataRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder subBuilder = null;
              if (root_ != null) {
                subBuilder = root_.toBuilder();
              }
              root_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(root_);
                root_ = subBuilder.buildPartial();
              }

              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadTreeMetadataRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadTreeMetadataRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest.Builder.class);
    }

    public static final int ROOT_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest root_;
    /**
     * <code>optional .build.remote.ContentDigest root = 1;</code>
     */
    public boolean hasRoot() {
      return root_ != null;
    }
    /**
     * <code>optional .build.remote.ContentDigest root = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getRoot() {
      return root_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : root_;
    }
    /**
     * <code>optional .build.remote.ContentDigest root = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getRootOrBuilder() {
      return getRoot();
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (root_ != null) {
        output.writeMessage(1, getRoot());
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (root_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getRoot());
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest other = (com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest) obj;

      boolean result = true;
      result = result && (hasRoot() == other.hasRoot());
      if (hasRoot()) {
        result = result && getRoot()
            .equals(other.getRoot());
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasRoot()) {
        hash = (37 * hash) + ROOT_FIELD_NUMBER;
        hash = (53 * hash) + getRoot().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest 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.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest 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.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.CasDownloadTreeMetadataRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.CasDownloadTreeMetadataRequest)
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadTreeMetadataRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadTreeMetadataRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        if (rootBuilder_ == null) {
          root_ = null;
        } else {
          root_ = null;
          rootBuilder_ = null;
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadTreeMetadataRequest_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest result = new com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest(this);
        if (rootBuilder_ == null) {
          result.root_ = root_;
        } else {
          result.root_ = rootBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest.getDefaultInstance()) return this;
        if (other.hasRoot()) {
          mergeRoot(other.getRoot());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest root_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> rootBuilder_;
      /**
       * <code>optional .build.remote.ContentDigest root = 1;</code>
       */
      public boolean hasRoot() {
        return rootBuilder_ != null || root_ != null;
      }
      /**
       * <code>optional .build.remote.ContentDigest root = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getRoot() {
        if (rootBuilder_ == null) {
          return root_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : root_;
        } else {
          return rootBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.ContentDigest root = 1;</code>
       */
      public Builder setRoot(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (rootBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          root_ = value;
          onChanged();
        } else {
          rootBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest root = 1;</code>
       */
      public Builder setRoot(
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (rootBuilder_ == null) {
          root_ = builderForValue.build();
          onChanged();
        } else {
          rootBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest root = 1;</code>
       */
      public Builder mergeRoot(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (rootBuilder_ == null) {
          if (root_ != null) {
            root_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.newBuilder(root_).mergeFrom(value).buildPartial();
          } else {
            root_ = value;
          }
          onChanged();
        } else {
          rootBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest root = 1;</code>
       */
      public Builder clearRoot() {
        if (rootBuilder_ == null) {
          root_ = null;
          onChanged();
        } else {
          root_ = null;
          rootBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest root = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder getRootBuilder() {
        
        onChanged();
        return getRootFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.ContentDigest root = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getRootOrBuilder() {
        if (rootBuilder_ != null) {
          return rootBuilder_.getMessageOrBuilder();
        } else {
          return root_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : root_;
        }
      }
      /**
       * <code>optional .build.remote.ContentDigest root = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
          getRootFieldBuilder() {
        if (rootBuilder_ == null) {
          rootBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder>(
                  getRoot(),
                  getParentForChildren(),
                  isClean());
          root_ = null;
        }
        return rootBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.CasDownloadTreeMetadataRequest)
    }

    // @@protoc_insertion_point(class_scope:build.remote.CasDownloadTreeMetadataRequest)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CasDownloadTreeMetadataRequest>
        PARSER = new com.google.protobuf.AbstractParser<CasDownloadTreeMetadataRequest>() {
      public CasDownloadTreeMetadataRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new CasDownloadTreeMetadataRequest(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CasDownloadTreeMetadataReplyOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.CasDownloadTreeMetadataReply)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    boolean hasStatus();
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getStatus();
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getStatusOrBuilder();

    /**
     * <code>repeated .build.remote.FileNode tree_node = 2;</code>
     */
    java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode> 
        getTreeNodeList();
    /**
     * <code>repeated .build.remote.FileNode tree_node = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.FileNode getTreeNode(int index);
    /**
     * <code>repeated .build.remote.FileNode tree_node = 2;</code>
     */
    int getTreeNodeCount();
    /**
     * <code>repeated .build.remote.FileNode tree_node = 2;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder> 
        getTreeNodeOrBuilderList();
    /**
     * <code>repeated .build.remote.FileNode tree_node = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder getTreeNodeOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code build.remote.CasDownloadTreeMetadataReply}
   */
  public  static final class CasDownloadTreeMetadataReply extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.CasDownloadTreeMetadataReply)
      CasDownloadTreeMetadataReplyOrBuilder {
    // Use CasDownloadTreeMetadataReply.newBuilder() to construct.
    private CasDownloadTreeMetadataReply(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CasDownloadTreeMetadataReply() {
      treeNode_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private CasDownloadTreeMetadataReply(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder subBuilder = null;
              if (status_ != null) {
                subBuilder = status_.toBuilder();
              }
              status_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(status_);
                status_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                treeNode_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode>();
                mutable_bitField0_ |= 0x00000002;
              }
              treeNode_.add(
                  input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.parser(), extensionRegistry));
              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_ & 0x00000002) == 0x00000002)) {
          treeNode_ = java.util.Collections.unmodifiableList(treeNode_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadTreeMetadataReply_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadTreeMetadataReply_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply.Builder.class);
    }

    private int bitField0_;
    public static final int STATUS_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus status_;
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    public boolean hasStatus() {
      return status_ != null;
    }
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getStatus() {
      return status_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : status_;
    }
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getStatusOrBuilder() {
      return getStatus();
    }

    public static final int TREE_NODE_FIELD_NUMBER = 2;
    private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode> treeNode_;
    /**
     * <code>repeated .build.remote.FileNode tree_node = 2;</code>
     */
    public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode> getTreeNodeList() {
      return treeNode_;
    }
    /**
     * <code>repeated .build.remote.FileNode tree_node = 2;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder> 
        getTreeNodeOrBuilderList() {
      return treeNode_;
    }
    /**
     * <code>repeated .build.remote.FileNode tree_node = 2;</code>
     */
    public int getTreeNodeCount() {
      return treeNode_.size();
    }
    /**
     * <code>repeated .build.remote.FileNode tree_node = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode getTreeNode(int index) {
      return treeNode_.get(index);
    }
    /**
     * <code>repeated .build.remote.FileNode tree_node = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder getTreeNodeOrBuilder(
        int index) {
      return treeNode_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (status_ != null) {
        output.writeMessage(1, getStatus());
      }
      for (int i = 0; i < treeNode_.size(); i++) {
        output.writeMessage(2, treeNode_.get(i));
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (status_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getStatus());
      }
      for (int i = 0; i < treeNode_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, treeNode_.get(i));
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply other = (com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply) obj;

      boolean result = true;
      result = result && (hasStatus() == other.hasStatus());
      if (hasStatus()) {
        result = result && getStatus()
            .equals(other.getStatus());
      }
      result = result && getTreeNodeList()
          .equals(other.getTreeNodeList());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasStatus()) {
        hash = (37 * hash) + STATUS_FIELD_NUMBER;
        hash = (53 * hash) + getStatus().hashCode();
      }
      if (getTreeNodeCount() > 0) {
        hash = (37 * hash) + TREE_NODE_FIELD_NUMBER;
        hash = (53 * hash) + getTreeNodeList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply 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.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply 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.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.CasDownloadTreeMetadataReply}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.CasDownloadTreeMetadataReply)
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReplyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadTreeMetadataReply_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadTreeMetadataReply_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getTreeNodeFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (statusBuilder_ == null) {
          status_ = null;
        } else {
          status_ = null;
          statusBuilder_ = null;
        }
        if (treeNodeBuilder_ == null) {
          treeNode_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          treeNodeBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadTreeMetadataReply_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply result = new com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (statusBuilder_ == null) {
          result.status_ = status_;
        } else {
          result.status_ = statusBuilder_.build();
        }
        if (treeNodeBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            treeNode_ = java.util.Collections.unmodifiableList(treeNode_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.treeNode_ = treeNode_;
        } else {
          result.treeNode_ = treeNodeBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply.getDefaultInstance()) return this;
        if (other.hasStatus()) {
          mergeStatus(other.getStatus());
        }
        if (treeNodeBuilder_ == null) {
          if (!other.treeNode_.isEmpty()) {
            if (treeNode_.isEmpty()) {
              treeNode_ = other.treeNode_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureTreeNodeIsMutable();
              treeNode_.addAll(other.treeNode_);
            }
            onChanged();
          }
        } else {
          if (!other.treeNode_.isEmpty()) {
            if (treeNodeBuilder_.isEmpty()) {
              treeNodeBuilder_.dispose();
              treeNodeBuilder_ = null;
              treeNode_ = other.treeNode_;
              bitField0_ = (bitField0_ & ~0x00000002);
              treeNodeBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getTreeNodeFieldBuilder() : null;
            } else {
              treeNodeBuilder_.addAllMessages(other.treeNode_);
            }
          }
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus status_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder> statusBuilder_;
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public boolean hasStatus() {
        return statusBuilder_ != null || status_ != null;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getStatus() {
        if (statusBuilder_ == null) {
          return status_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : status_;
        } else {
          return statusBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder setStatus(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus value) {
        if (statusBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          status_ = value;
          onChanged();
        } else {
          statusBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder setStatus(
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder builderForValue) {
        if (statusBuilder_ == null) {
          status_ = builderForValue.build();
          onChanged();
        } else {
          statusBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder mergeStatus(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus value) {
        if (statusBuilder_ == null) {
          if (status_ != null) {
            status_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.newBuilder(status_).mergeFrom(value).buildPartial();
          } else {
            status_ = value;
          }
          onChanged();
        } else {
          statusBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder clearStatus() {
        if (statusBuilder_ == null) {
          status_ = null;
          onChanged();
        } else {
          status_ = null;
          statusBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder getStatusBuilder() {
        
        onChanged();
        return getStatusFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getStatusOrBuilder() {
        if (statusBuilder_ != null) {
          return statusBuilder_.getMessageOrBuilder();
        } else {
          return status_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : status_;
        }
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder> 
          getStatusFieldBuilder() {
        if (statusBuilder_ == null) {
          statusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder>(
                  getStatus(),
                  getParentForChildren(),
                  isClean());
          status_ = null;
        }
        return statusBuilder_;
      }

      private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode> treeNode_ =
        java.util.Collections.emptyList();
      private void ensureTreeNodeIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          treeNode_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode>(treeNode_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.FileNode, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder> treeNodeBuilder_;

      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode> getTreeNodeList() {
        if (treeNodeBuilder_ == null) {
          return java.util.Collections.unmodifiableList(treeNode_);
        } else {
          return treeNodeBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public int getTreeNodeCount() {
        if (treeNodeBuilder_ == null) {
          return treeNode_.size();
        } else {
          return treeNodeBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode getTreeNode(int index) {
        if (treeNodeBuilder_ == null) {
          return treeNode_.get(index);
        } else {
          return treeNodeBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public Builder setTreeNode(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode value) {
        if (treeNodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTreeNodeIsMutable();
          treeNode_.set(index, value);
          onChanged();
        } else {
          treeNodeBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public Builder setTreeNode(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder builderForValue) {
        if (treeNodeBuilder_ == null) {
          ensureTreeNodeIsMutable();
          treeNode_.set(index, builderForValue.build());
          onChanged();
        } else {
          treeNodeBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public Builder addTreeNode(com.google.devtools.build.lib.remote.RemoteProtocol.FileNode value) {
        if (treeNodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTreeNodeIsMutable();
          treeNode_.add(value);
          onChanged();
        } else {
          treeNodeBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public Builder addTreeNode(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode value) {
        if (treeNodeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTreeNodeIsMutable();
          treeNode_.add(index, value);
          onChanged();
        } else {
          treeNodeBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public Builder addTreeNode(
          com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder builderForValue) {
        if (treeNodeBuilder_ == null) {
          ensureTreeNodeIsMutable();
          treeNode_.add(builderForValue.build());
          onChanged();
        } else {
          treeNodeBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public Builder addTreeNode(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder builderForValue) {
        if (treeNodeBuilder_ == null) {
          ensureTreeNodeIsMutable();
          treeNode_.add(index, builderForValue.build());
          onChanged();
        } else {
          treeNodeBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public Builder addAllTreeNode(
          java.lang.Iterable<? extends com.google.devtools.build.lib.remote.RemoteProtocol.FileNode> values) {
        if (treeNodeBuilder_ == null) {
          ensureTreeNodeIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, treeNode_);
          onChanged();
        } else {
          treeNodeBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public Builder clearTreeNode() {
        if (treeNodeBuilder_ == null) {
          treeNode_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          treeNodeBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public Builder removeTreeNode(int index) {
        if (treeNodeBuilder_ == null) {
          ensureTreeNodeIsMutable();
          treeNode_.remove(index);
          onChanged();
        } else {
          treeNodeBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder getTreeNodeBuilder(
          int index) {
        return getTreeNodeFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder getTreeNodeOrBuilder(
          int index) {
        if (treeNodeBuilder_ == null) {
          return treeNode_.get(index);  } else {
          return treeNodeBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder> 
           getTreeNodeOrBuilderList() {
        if (treeNodeBuilder_ != null) {
          return treeNodeBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(treeNode_);
        }
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder addTreeNodeBuilder() {
        return getTreeNodeFieldBuilder().addBuilder(
            com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.getDefaultInstance());
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder addTreeNodeBuilder(
          int index) {
        return getTreeNodeFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.getDefaultInstance());
      }
      /**
       * <code>repeated .build.remote.FileNode tree_node = 2;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder> 
           getTreeNodeBuilderList() {
        return getTreeNodeFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.FileNode, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder> 
          getTreeNodeFieldBuilder() {
        if (treeNodeBuilder_ == null) {
          treeNodeBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.FileNode, com.google.devtools.build.lib.remote.RemoteProtocol.FileNode.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.FileNodeOrBuilder>(
                  treeNode_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          treeNode_ = null;
        }
        return treeNodeBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.CasDownloadTreeMetadataReply)
    }

    // @@protoc_insertion_point(class_scope:build.remote.CasDownloadTreeMetadataReply)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CasDownloadTreeMetadataReply>
        PARSER = new com.google.protobuf.AbstractParser<CasDownloadTreeMetadataReply>() {
      public CasDownloadTreeMetadataReply parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new CasDownloadTreeMetadataReply(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface BlobChunkOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.BlobChunk)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Present only in first chunk.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest digest = 1;</code>
     */
    boolean hasDigest();
    /**
     * <pre>
     * Present only in first chunk.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest digest = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest();
    /**
     * <pre>
     * Present only in first chunk.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest digest = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder();

    /**
     * <code>optional int64 offset = 2;</code>
     */
    long getOffset();

    /**
     * <code>optional bytes data = 3;</code>
     */
    com.google.protobuf.ByteString getData();
  }
  /**
   * Protobuf type {@code build.remote.BlobChunk}
   */
  public  static final class BlobChunk extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.BlobChunk)
      BlobChunkOrBuilder {
    // Use BlobChunk.newBuilder() to construct.
    private BlobChunk(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private BlobChunk() {
      offset_ = 0L;
      data_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private BlobChunk(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder subBuilder = null;
              if (digest_ != null) {
                subBuilder = digest_.toBuilder();
              }
              digest_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(digest_);
                digest_ = subBuilder.buildPartial();
              }

              break;
            }
            case 16: {

              offset_ = input.readInt64();
              break;
            }
            case 26: {

              data_ = input.readBytes();
              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_BlobChunk_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_BlobChunk_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.class, com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.Builder.class);
    }

    public static final int DIGEST_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest digest_;
    /**
     * <pre>
     * Present only in first chunk.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest digest = 1;</code>
     */
    public boolean hasDigest() {
      return digest_ != null;
    }
    /**
     * <pre>
     * Present only in first chunk.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest digest = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest() {
      return digest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : digest_;
    }
    /**
     * <pre>
     * Present only in first chunk.
     * </pre>
     *
     * <code>optional .build.remote.ContentDigest digest = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder() {
      return getDigest();
    }

    public static final int OFFSET_FIELD_NUMBER = 2;
    private long offset_;
    /**
     * <code>optional int64 offset = 2;</code>
     */
    public long getOffset() {
      return offset_;
    }

    public static final int DATA_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString data_;
    /**
     * <code>optional bytes data = 3;</code>
     */
    public com.google.protobuf.ByteString getData() {
      return data_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (digest_ != null) {
        output.writeMessage(1, getDigest());
      }
      if (offset_ != 0L) {
        output.writeInt64(2, offset_);
      }
      if (!data_.isEmpty()) {
        output.writeBytes(3, data_);
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (digest_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getDigest());
      }
      if (offset_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, offset_);
      }
      if (!data_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, data_);
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk other = (com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk) obj;

      boolean result = true;
      result = result && (hasDigest() == other.hasDigest());
      if (hasDigest()) {
        result = result && getDigest()
            .equals(other.getDigest());
      }
      result = result && (getOffset()
          == other.getOffset());
      result = result && getData()
          .equals(other.getData());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasDigest()) {
        hash = (37 * hash) + DIGEST_FIELD_NUMBER;
        hash = (53 * hash) + getDigest().hashCode();
      }
      hash = (37 * hash) + OFFSET_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getOffset());
      hash = (37 * hash) + DATA_FIELD_NUMBER;
      hash = (53 * hash) + getData().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk 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.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk 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.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.BlobChunk}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.BlobChunk)
        com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunkOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_BlobChunk_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_BlobChunk_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.class, com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        if (digestBuilder_ == null) {
          digest_ = null;
        } else {
          digest_ = null;
          digestBuilder_ = null;
        }
        offset_ = 0L;

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

        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_BlobChunk_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk result = new com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk(this);
        if (digestBuilder_ == null) {
          result.digest_ = digest_;
        } else {
          result.digest_ = digestBuilder_.build();
        }
        result.offset_ = offset_;
        result.data_ = data_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.getDefaultInstance()) return this;
        if (other.hasDigest()) {
          mergeDigest(other.getDigest());
        }
        if (other.getOffset() != 0L) {
          setOffset(other.getOffset());
        }
        if (other.getData() != com.google.protobuf.ByteString.EMPTY) {
          setData(other.getData());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest digest_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> digestBuilder_;
      /**
       * <pre>
       * Present only in first chunk.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      public boolean hasDigest() {
        return digestBuilder_ != null || digest_ != null;
      }
      /**
       * <pre>
       * Present only in first chunk.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest() {
        if (digestBuilder_ == null) {
          return digest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : digest_;
        } else {
          return digestBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Present only in first chunk.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder setDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (digestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          digest_ = value;
          onChanged();
        } else {
          digestBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * Present only in first chunk.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder setDigest(
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (digestBuilder_ == null) {
          digest_ = builderForValue.build();
          onChanged();
        } else {
          digestBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * Present only in first chunk.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder mergeDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (digestBuilder_ == null) {
          if (digest_ != null) {
            digest_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.newBuilder(digest_).mergeFrom(value).buildPartial();
          } else {
            digest_ = value;
          }
          onChanged();
        } else {
          digestBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * Present only in first chunk.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder clearDigest() {
        if (digestBuilder_ == null) {
          digest_ = null;
          onChanged();
        } else {
          digest_ = null;
          digestBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * Present only in first chunk.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder getDigestBuilder() {
        
        onChanged();
        return getDigestFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Present only in first chunk.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder() {
        if (digestBuilder_ != null) {
          return digestBuilder_.getMessageOrBuilder();
        } else {
          return digest_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : digest_;
        }
      }
      /**
       * <pre>
       * Present only in first chunk.
       * </pre>
       *
       * <code>optional .build.remote.ContentDigest digest = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
          getDigestFieldBuilder() {
        if (digestBuilder_ == null) {
          digestBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder>(
                  getDigest(),
                  getParentForChildren(),
                  isClean());
          digest_ = null;
        }
        return digestBuilder_;
      }

      private long offset_ ;
      /**
       * <code>optional int64 offset = 2;</code>
       */
      public long getOffset() {
        return offset_;
      }
      /**
       * <code>optional int64 offset = 2;</code>
       */
      public Builder setOffset(long value) {
        
        offset_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 offset = 2;</code>
       */
      public Builder clearOffset() {
        
        offset_ = 0L;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes data = 3;</code>
       */
      public com.google.protobuf.ByteString getData() {
        return data_;
      }
      /**
       * <code>optional bytes data = 3;</code>
       */
      public Builder setData(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        data_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes data = 3;</code>
       */
      public Builder clearData() {
        
        data_ = getDefaultInstance().getData();
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.BlobChunk)
    }

    // @@protoc_insertion_point(class_scope:build.remote.BlobChunk)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<BlobChunk>
        PARSER = new com.google.protobuf.AbstractParser<BlobChunk>() {
      public BlobChunk parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new BlobChunk(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CasUploadBlobRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.CasUploadBlobRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .build.remote.BlobChunk data = 1;</code>
     */
    boolean hasData();
    /**
     * <code>optional .build.remote.BlobChunk data = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk getData();
    /**
     * <code>optional .build.remote.BlobChunk data = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunkOrBuilder getDataOrBuilder();
  }
  /**
   * <pre>
   * This will be used for batching files/blobs.
   * </pre>
   *
   * Protobuf type {@code build.remote.CasUploadBlobRequest}
   */
  public  static final class CasUploadBlobRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.CasUploadBlobRequest)
      CasUploadBlobRequestOrBuilder {
    // Use CasUploadBlobRequest.newBuilder() to construct.
    private CasUploadBlobRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CasUploadBlobRequest() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private CasUploadBlobRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.Builder subBuilder = null;
              if (data_ != null) {
                subBuilder = data_.toBuilder();
              }
              data_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(data_);
                data_ = subBuilder.buildPartial();
              }

              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadBlobRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadBlobRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest.Builder.class);
    }

    public static final int DATA_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk data_;
    /**
     * <code>optional .build.remote.BlobChunk data = 1;</code>
     */
    public boolean hasData() {
      return data_ != null;
    }
    /**
     * <code>optional .build.remote.BlobChunk data = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk getData() {
      return data_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.getDefaultInstance() : data_;
    }
    /**
     * <code>optional .build.remote.BlobChunk data = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunkOrBuilder getDataOrBuilder() {
      return getData();
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

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

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

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

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest other = (com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest) obj;

      boolean result = true;
      result = result && (hasData() == other.hasData());
      if (hasData()) {
        result = result && getData()
            .equals(other.getData());
      }
      return result;
    }

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

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest 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.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest 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.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * This will be used for batching files/blobs.
     * </pre>
     *
     * Protobuf type {@code build.remote.CasUploadBlobRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.CasUploadBlobRequest)
        com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadBlobRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadBlobRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        if (dataBuilder_ == null) {
          data_ = null;
        } else {
          data_ = null;
          dataBuilder_ = null;
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadBlobRequest_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest result = new com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest(this);
        if (dataBuilder_ == null) {
          result.data_ = data_;
        } else {
          result.data_ = dataBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest.getDefaultInstance()) return this;
        if (other.hasData()) {
          mergeData(other.getData());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk data_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk, com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunkOrBuilder> dataBuilder_;
      /**
       * <code>optional .build.remote.BlobChunk data = 1;</code>
       */
      public boolean hasData() {
        return dataBuilder_ != null || data_ != null;
      }
      /**
       * <code>optional .build.remote.BlobChunk data = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk getData() {
        if (dataBuilder_ == null) {
          return data_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.getDefaultInstance() : data_;
        } else {
          return dataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.BlobChunk data = 1;</code>
       */
      public Builder setData(com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk value) {
        if (dataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          data_ = value;
          onChanged();
        } else {
          dataBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.BlobChunk data = 1;</code>
       */
      public Builder setData(
          com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.Builder builderForValue) {
        if (dataBuilder_ == null) {
          data_ = builderForValue.build();
          onChanged();
        } else {
          dataBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.BlobChunk data = 1;</code>
       */
      public Builder mergeData(com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk value) {
        if (dataBuilder_ == null) {
          if (data_ != null) {
            data_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.newBuilder(data_).mergeFrom(value).buildPartial();
          } else {
            data_ = value;
          }
          onChanged();
        } else {
          dataBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.BlobChunk data = 1;</code>
       */
      public Builder clearData() {
        if (dataBuilder_ == null) {
          data_ = null;
          onChanged();
        } else {
          data_ = null;
          dataBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.BlobChunk data = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.Builder getDataBuilder() {
        
        onChanged();
        return getDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.BlobChunk data = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunkOrBuilder getDataOrBuilder() {
        if (dataBuilder_ != null) {
          return dataBuilder_.getMessageOrBuilder();
        } else {
          return data_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.getDefaultInstance() : data_;
        }
      }
      /**
       * <code>optional .build.remote.BlobChunk data = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk, com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunkOrBuilder> 
          getDataFieldBuilder() {
        if (dataBuilder_ == null) {
          dataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk, com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunkOrBuilder>(
                  getData(),
                  getParentForChildren(),
                  isClean());
          data_ = null;
        }
        return dataBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.CasUploadBlobRequest)
    }

    // @@protoc_insertion_point(class_scope:build.remote.CasUploadBlobRequest)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CasUploadBlobRequest>
        PARSER = new com.google.protobuf.AbstractParser<CasUploadBlobRequest>() {
      public CasUploadBlobRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new CasUploadBlobRequest(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CasUploadBlobReplyOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.CasUploadBlobReply)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    boolean hasStatus();
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getStatus();
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getStatusOrBuilder();
  }
  /**
   * Protobuf type {@code build.remote.CasUploadBlobReply}
   */
  public  static final class CasUploadBlobReply extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.CasUploadBlobReply)
      CasUploadBlobReplyOrBuilder {
    // Use CasUploadBlobReply.newBuilder() to construct.
    private CasUploadBlobReply(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CasUploadBlobReply() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private CasUploadBlobReply(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder subBuilder = null;
              if (status_ != null) {
                subBuilder = status_.toBuilder();
              }
              status_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(status_);
                status_ = subBuilder.buildPartial();
              }

              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadBlobReply_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadBlobReply_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply.Builder.class);
    }

    public static final int STATUS_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus status_;
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    public boolean hasStatus() {
      return status_ != null;
    }
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getStatus() {
      return status_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : status_;
    }
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getStatusOrBuilder() {
      return getStatus();
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (status_ != null) {
        output.writeMessage(1, getStatus());
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (status_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getStatus());
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply other = (com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply) obj;

      boolean result = true;
      result = result && (hasStatus() == other.hasStatus());
      if (hasStatus()) {
        result = result && getStatus()
            .equals(other.getStatus());
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasStatus()) {
        hash = (37 * hash) + STATUS_FIELD_NUMBER;
        hash = (53 * hash) + getStatus().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply 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.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply 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.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.CasUploadBlobReply}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.CasUploadBlobReply)
        com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReplyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadBlobReply_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadBlobReply_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        if (statusBuilder_ == null) {
          status_ = null;
        } else {
          status_ = null;
          statusBuilder_ = null;
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasUploadBlobReply_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply result = new com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply(this);
        if (statusBuilder_ == null) {
          result.status_ = status_;
        } else {
          result.status_ = statusBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply.getDefaultInstance()) return this;
        if (other.hasStatus()) {
          mergeStatus(other.getStatus());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus status_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder> statusBuilder_;
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public boolean hasStatus() {
        return statusBuilder_ != null || status_ != null;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getStatus() {
        if (statusBuilder_ == null) {
          return status_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : status_;
        } else {
          return statusBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder setStatus(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus value) {
        if (statusBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          status_ = value;
          onChanged();
        } else {
          statusBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder setStatus(
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder builderForValue) {
        if (statusBuilder_ == null) {
          status_ = builderForValue.build();
          onChanged();
        } else {
          statusBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder mergeStatus(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus value) {
        if (statusBuilder_ == null) {
          if (status_ != null) {
            status_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.newBuilder(status_).mergeFrom(value).buildPartial();
          } else {
            status_ = value;
          }
          onChanged();
        } else {
          statusBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder clearStatus() {
        if (statusBuilder_ == null) {
          status_ = null;
          onChanged();
        } else {
          status_ = null;
          statusBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder getStatusBuilder() {
        
        onChanged();
        return getStatusFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getStatusOrBuilder() {
        if (statusBuilder_ != null) {
          return statusBuilder_.getMessageOrBuilder();
        } else {
          return status_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : status_;
        }
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder> 
          getStatusFieldBuilder() {
        if (statusBuilder_ == null) {
          statusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder>(
                  getStatus(),
                  getParentForChildren(),
                  isClean());
          status_ = null;
        }
        return statusBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.CasUploadBlobReply)
    }

    // @@protoc_insertion_point(class_scope:build.remote.CasUploadBlobReply)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CasUploadBlobReply>
        PARSER = new com.google.protobuf.AbstractParser<CasUploadBlobReply>() {
      public CasUploadBlobReply parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new CasUploadBlobReply(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CasDownloadTreeRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.CasDownloadTreeRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .build.remote.ContentDigest root_digest = 1;</code>
     */
    boolean hasRootDigest();
    /**
     * <code>optional .build.remote.ContentDigest root_digest = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getRootDigest();
    /**
     * <code>optional .build.remote.ContentDigest root_digest = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getRootDigestOrBuilder();
  }
  /**
   * Protobuf type {@code build.remote.CasDownloadTreeRequest}
   */
  public  static final class CasDownloadTreeRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.CasDownloadTreeRequest)
      CasDownloadTreeRequestOrBuilder {
    // Use CasDownloadTreeRequest.newBuilder() to construct.
    private CasDownloadTreeRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CasDownloadTreeRequest() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private CasDownloadTreeRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder subBuilder = null;
              if (rootDigest_ != null) {
                subBuilder = rootDigest_.toBuilder();
              }
              rootDigest_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(rootDigest_);
                rootDigest_ = subBuilder.buildPartial();
              }

              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadTreeRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadTreeRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest.Builder.class);
    }

    public static final int ROOT_DIGEST_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest rootDigest_;
    /**
     * <code>optional .build.remote.ContentDigest root_digest = 1;</code>
     */
    public boolean hasRootDigest() {
      return rootDigest_ != null;
    }
    /**
     * <code>optional .build.remote.ContentDigest root_digest = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getRootDigest() {
      return rootDigest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : rootDigest_;
    }
    /**
     * <code>optional .build.remote.ContentDigest root_digest = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getRootDigestOrBuilder() {
      return getRootDigest();
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (rootDigest_ != null) {
        output.writeMessage(1, getRootDigest());
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (rootDigest_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getRootDigest());
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest other = (com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest) obj;

      boolean result = true;
      result = result && (hasRootDigest() == other.hasRootDigest());
      if (hasRootDigest()) {
        result = result && getRootDigest()
            .equals(other.getRootDigest());
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasRootDigest()) {
        hash = (37 * hash) + ROOT_DIGEST_FIELD_NUMBER;
        hash = (53 * hash) + getRootDigest().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest 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.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest 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.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.CasDownloadTreeRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.CasDownloadTreeRequest)
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadTreeRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadTreeRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        if (rootDigestBuilder_ == null) {
          rootDigest_ = null;
        } else {
          rootDigest_ = null;
          rootDigestBuilder_ = null;
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadTreeRequest_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest result = new com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest(this);
        if (rootDigestBuilder_ == null) {
          result.rootDigest_ = rootDigest_;
        } else {
          result.rootDigest_ = rootDigestBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest.getDefaultInstance()) return this;
        if (other.hasRootDigest()) {
          mergeRootDigest(other.getRootDigest());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest rootDigest_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> rootDigestBuilder_;
      /**
       * <code>optional .build.remote.ContentDigest root_digest = 1;</code>
       */
      public boolean hasRootDigest() {
        return rootDigestBuilder_ != null || rootDigest_ != null;
      }
      /**
       * <code>optional .build.remote.ContentDigest root_digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getRootDigest() {
        if (rootDigestBuilder_ == null) {
          return rootDigest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : rootDigest_;
        } else {
          return rootDigestBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.ContentDigest root_digest = 1;</code>
       */
      public Builder setRootDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (rootDigestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          rootDigest_ = value;
          onChanged();
        } else {
          rootDigestBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest root_digest = 1;</code>
       */
      public Builder setRootDigest(
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (rootDigestBuilder_ == null) {
          rootDigest_ = builderForValue.build();
          onChanged();
        } else {
          rootDigestBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest root_digest = 1;</code>
       */
      public Builder mergeRootDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (rootDigestBuilder_ == null) {
          if (rootDigest_ != null) {
            rootDigest_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.newBuilder(rootDigest_).mergeFrom(value).buildPartial();
          } else {
            rootDigest_ = value;
          }
          onChanged();
        } else {
          rootDigestBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest root_digest = 1;</code>
       */
      public Builder clearRootDigest() {
        if (rootDigestBuilder_ == null) {
          rootDigest_ = null;
          onChanged();
        } else {
          rootDigest_ = null;
          rootDigestBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest root_digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder getRootDigestBuilder() {
        
        onChanged();
        return getRootDigestFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.ContentDigest root_digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getRootDigestOrBuilder() {
        if (rootDigestBuilder_ != null) {
          return rootDigestBuilder_.getMessageOrBuilder();
        } else {
          return rootDigest_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : rootDigest_;
        }
      }
      /**
       * <code>optional .build.remote.ContentDigest root_digest = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
          getRootDigestFieldBuilder() {
        if (rootDigestBuilder_ == null) {
          rootDigestBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder>(
                  getRootDigest(),
                  getParentForChildren(),
                  isClean());
          rootDigest_ = null;
        }
        return rootDigestBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.CasDownloadTreeRequest)
    }

    // @@protoc_insertion_point(class_scope:build.remote.CasDownloadTreeRequest)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CasDownloadTreeRequest>
        PARSER = new com.google.protobuf.AbstractParser<CasDownloadTreeRequest>() {
      public CasDownloadTreeRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new CasDownloadTreeRequest(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CasDownloadReplyOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.CasDownloadReply)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    boolean hasStatus();
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getStatus();
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getStatusOrBuilder();

    /**
     * <pre>
     * For trees, data is the entire root directory, zipped (for a single root).
     * For blobs, sequential chunks of multiple blobs.
     * </pre>
     *
     * <code>optional .build.remote.BlobChunk data = 2;</code>
     */
    boolean hasData();
    /**
     * <pre>
     * For trees, data is the entire root directory, zipped (for a single root).
     * For blobs, sequential chunks of multiple blobs.
     * </pre>
     *
     * <code>optional .build.remote.BlobChunk data = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk getData();
    /**
     * <pre>
     * For trees, data is the entire root directory, zipped (for a single root).
     * For blobs, sequential chunks of multiple blobs.
     * </pre>
     *
     * <code>optional .build.remote.BlobChunk data = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunkOrBuilder getDataOrBuilder();
  }
  /**
   * <pre>
   * This message is streamed.
   * </pre>
   *
   * Protobuf type {@code build.remote.CasDownloadReply}
   */
  public  static final class CasDownloadReply extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.CasDownloadReply)
      CasDownloadReplyOrBuilder {
    // Use CasDownloadReply.newBuilder() to construct.
    private CasDownloadReply(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CasDownloadReply() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private CasDownloadReply(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder subBuilder = null;
              if (status_ != null) {
                subBuilder = status_.toBuilder();
              }
              status_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(status_);
                status_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.Builder subBuilder = null;
              if (data_ != null) {
                subBuilder = data_.toBuilder();
              }
              data_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(data_);
                data_ = subBuilder.buildPartial();
              }

              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadReply_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadReply_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply.Builder.class);
    }

    public static final int STATUS_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus status_;
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    public boolean hasStatus() {
      return status_ != null;
    }
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getStatus() {
      return status_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : status_;
    }
    /**
     * <code>optional .build.remote.CasStatus status = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getStatusOrBuilder() {
      return getStatus();
    }

    public static final int DATA_FIELD_NUMBER = 2;
    private com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk data_;
    /**
     * <pre>
     * For trees, data is the entire root directory, zipped (for a single root).
     * For blobs, sequential chunks of multiple blobs.
     * </pre>
     *
     * <code>optional .build.remote.BlobChunk data = 2;</code>
     */
    public boolean hasData() {
      return data_ != null;
    }
    /**
     * <pre>
     * For trees, data is the entire root directory, zipped (for a single root).
     * For blobs, sequential chunks of multiple blobs.
     * </pre>
     *
     * <code>optional .build.remote.BlobChunk data = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk getData() {
      return data_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.getDefaultInstance() : data_;
    }
    /**
     * <pre>
     * For trees, data is the entire root directory, zipped (for a single root).
     * For blobs, sequential chunks of multiple blobs.
     * </pre>
     *
     * <code>optional .build.remote.BlobChunk data = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunkOrBuilder getDataOrBuilder() {
      return getData();
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (status_ != null) {
        output.writeMessage(1, getStatus());
      }
      if (data_ != null) {
        output.writeMessage(2, getData());
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

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

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply other = (com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply) obj;

      boolean result = true;
      result = result && (hasStatus() == other.hasStatus());
      if (hasStatus()) {
        result = result && getStatus()
            .equals(other.getStatus());
      }
      result = result && (hasData() == other.hasData());
      if (hasData()) {
        result = result && getData()
            .equals(other.getData());
      }
      return result;
    }

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

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply 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.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply 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.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * This message is streamed.
     * </pre>
     *
     * Protobuf type {@code build.remote.CasDownloadReply}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.CasDownloadReply)
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReplyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadReply_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadReply_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        if (statusBuilder_ == null) {
          status_ = null;
        } else {
          status_ = null;
          statusBuilder_ = null;
        }
        if (dataBuilder_ == null) {
          data_ = null;
        } else {
          data_ = null;
          dataBuilder_ = null;
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadReply_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply result = new com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply(this);
        if (statusBuilder_ == null) {
          result.status_ = status_;
        } else {
          result.status_ = statusBuilder_.build();
        }
        if (dataBuilder_ == null) {
          result.data_ = data_;
        } else {
          result.data_ = dataBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply.getDefaultInstance()) return this;
        if (other.hasStatus()) {
          mergeStatus(other.getStatus());
        }
        if (other.hasData()) {
          mergeData(other.getData());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus status_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder> statusBuilder_;
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public boolean hasStatus() {
        return statusBuilder_ != null || status_ != null;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getStatus() {
        if (statusBuilder_ == null) {
          return status_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : status_;
        } else {
          return statusBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder setStatus(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus value) {
        if (statusBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          status_ = value;
          onChanged();
        } else {
          statusBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder setStatus(
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder builderForValue) {
        if (statusBuilder_ == null) {
          status_ = builderForValue.build();
          onChanged();
        } else {
          statusBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder mergeStatus(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus value) {
        if (statusBuilder_ == null) {
          if (status_ != null) {
            status_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.newBuilder(status_).mergeFrom(value).buildPartial();
          } else {
            status_ = value;
          }
          onChanged();
        } else {
          statusBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public Builder clearStatus() {
        if (statusBuilder_ == null) {
          status_ = null;
          onChanged();
        } else {
          status_ = null;
          statusBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder getStatusBuilder() {
        
        onChanged();
        return getStatusFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getStatusOrBuilder() {
        if (statusBuilder_ != null) {
          return statusBuilder_.getMessageOrBuilder();
        } else {
          return status_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : status_;
        }
      }
      /**
       * <code>optional .build.remote.CasStatus status = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder> 
          getStatusFieldBuilder() {
        if (statusBuilder_ == null) {
          statusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder>(
                  getStatus(),
                  getParentForChildren(),
                  isClean());
          status_ = null;
        }
        return statusBuilder_;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk data_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk, com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunkOrBuilder> dataBuilder_;
      /**
       * <pre>
       * For trees, data is the entire root directory, zipped (for a single root).
       * For blobs, sequential chunks of multiple blobs.
       * </pre>
       *
       * <code>optional .build.remote.BlobChunk data = 2;</code>
       */
      public boolean hasData() {
        return dataBuilder_ != null || data_ != null;
      }
      /**
       * <pre>
       * For trees, data is the entire root directory, zipped (for a single root).
       * For blobs, sequential chunks of multiple blobs.
       * </pre>
       *
       * <code>optional .build.remote.BlobChunk data = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk getData() {
        if (dataBuilder_ == null) {
          return data_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.getDefaultInstance() : data_;
        } else {
          return dataBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * For trees, data is the entire root directory, zipped (for a single root).
       * For blobs, sequential chunks of multiple blobs.
       * </pre>
       *
       * <code>optional .build.remote.BlobChunk data = 2;</code>
       */
      public Builder setData(com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk value) {
        if (dataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          data_ = value;
          onChanged();
        } else {
          dataBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * For trees, data is the entire root directory, zipped (for a single root).
       * For blobs, sequential chunks of multiple blobs.
       * </pre>
       *
       * <code>optional .build.remote.BlobChunk data = 2;</code>
       */
      public Builder setData(
          com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.Builder builderForValue) {
        if (dataBuilder_ == null) {
          data_ = builderForValue.build();
          onChanged();
        } else {
          dataBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * For trees, data is the entire root directory, zipped (for a single root).
       * For blobs, sequential chunks of multiple blobs.
       * </pre>
       *
       * <code>optional .build.remote.BlobChunk data = 2;</code>
       */
      public Builder mergeData(com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk value) {
        if (dataBuilder_ == null) {
          if (data_ != null) {
            data_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.newBuilder(data_).mergeFrom(value).buildPartial();
          } else {
            data_ = value;
          }
          onChanged();
        } else {
          dataBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * For trees, data is the entire root directory, zipped (for a single root).
       * For blobs, sequential chunks of multiple blobs.
       * </pre>
       *
       * <code>optional .build.remote.BlobChunk data = 2;</code>
       */
      public Builder clearData() {
        if (dataBuilder_ == null) {
          data_ = null;
          onChanged();
        } else {
          data_ = null;
          dataBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * For trees, data is the entire root directory, zipped (for a single root).
       * For blobs, sequential chunks of multiple blobs.
       * </pre>
       *
       * <code>optional .build.remote.BlobChunk data = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.Builder getDataBuilder() {
        
        onChanged();
        return getDataFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * For trees, data is the entire root directory, zipped (for a single root).
       * For blobs, sequential chunks of multiple blobs.
       * </pre>
       *
       * <code>optional .build.remote.BlobChunk data = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunkOrBuilder getDataOrBuilder() {
        if (dataBuilder_ != null) {
          return dataBuilder_.getMessageOrBuilder();
        } else {
          return data_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.getDefaultInstance() : data_;
        }
      }
      /**
       * <pre>
       * For trees, data is the entire root directory, zipped (for a single root).
       * For blobs, sequential chunks of multiple blobs.
       * </pre>
       *
       * <code>optional .build.remote.BlobChunk data = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk, com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunkOrBuilder> 
          getDataFieldBuilder() {
        if (dataBuilder_ == null) {
          dataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk, com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunk.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.BlobChunkOrBuilder>(
                  getData(),
                  getParentForChildren(),
                  isClean());
          data_ = null;
        }
        return dataBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.CasDownloadReply)
    }

    // @@protoc_insertion_point(class_scope:build.remote.CasDownloadReply)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CasDownloadReply>
        PARSER = new com.google.protobuf.AbstractParser<CasDownloadReply>() {
      public CasDownloadReply parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new CasDownloadReply(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CasDownloadBlobRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.CasDownloadBlobRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> 
        getDigestList();
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest(int index);
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    int getDigestCount();
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
        getDigestOrBuilderList();
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code build.remote.CasDownloadBlobRequest}
   */
  public  static final class CasDownloadBlobRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.CasDownloadBlobRequest)
      CasDownloadBlobRequestOrBuilder {
    // Use CasDownloadBlobRequest.newBuilder() to construct.
    private CasDownloadBlobRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CasDownloadBlobRequest() {
      digest_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private CasDownloadBlobRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                digest_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest>();
                mutable_bitField0_ |= 0x00000001;
              }
              digest_.add(
                  input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.parser(), extensionRegistry));
              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) == 0x00000001)) {
          digest_ = java.util.Collections.unmodifiableList(digest_);
        }
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadBlobRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadBlobRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest.Builder.class);
    }

    public static final int DIGEST_FIELD_NUMBER = 1;
    private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> digest_;
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> getDigestList() {
      return digest_;
    }
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
        getDigestOrBuilderList() {
      return digest_;
    }
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    public int getDigestCount() {
      return digest_.size();
    }
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest(int index) {
      return digest_.get(index);
    }
    /**
     * <code>repeated .build.remote.ContentDigest digest = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder(
        int index) {
      return digest_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

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

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

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

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest other = (com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest) obj;

      boolean result = true;
      result = result && getDigestList()
          .equals(other.getDigestList());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (getDigestCount() > 0) {
        hash = (37 * hash) + DIGEST_FIELD_NUMBER;
        hash = (53 * hash) + getDigestList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest 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.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest 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.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.CasDownloadBlobRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.CasDownloadBlobRequest)
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadBlobRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadBlobRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getDigestFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (digestBuilder_ == null) {
          digest_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          digestBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_CasDownloadBlobRequest_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest result = new com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest(this);
        int from_bitField0_ = bitField0_;
        if (digestBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            digest_ = java.util.Collections.unmodifiableList(digest_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.digest_ = digest_;
        } else {
          result.digest_ = digestBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest.getDefaultInstance()) return this;
        if (digestBuilder_ == null) {
          if (!other.digest_.isEmpty()) {
            if (digest_.isEmpty()) {
              digest_ = other.digest_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureDigestIsMutable();
              digest_.addAll(other.digest_);
            }
            onChanged();
          }
        } else {
          if (!other.digest_.isEmpty()) {
            if (digestBuilder_.isEmpty()) {
              digestBuilder_.dispose();
              digestBuilder_ = null;
              digest_ = other.digest_;
              bitField0_ = (bitField0_ & ~0x00000001);
              digestBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getDigestFieldBuilder() : null;
            } else {
              digestBuilder_.addAllMessages(other.digest_);
            }
          }
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> digest_ =
        java.util.Collections.emptyList();
      private void ensureDigestIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          digest_ = new java.util.ArrayList<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest>(digest_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> digestBuilder_;

      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> getDigestList() {
        if (digestBuilder_ == null) {
          return java.util.Collections.unmodifiableList(digest_);
        } else {
          return digestBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public int getDigestCount() {
        if (digestBuilder_ == null) {
          return digest_.size();
        } else {
          return digestBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getDigest(int index) {
        if (digestBuilder_ == null) {
          return digest_.get(index);
        } else {
          return digestBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder setDigest(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (digestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDigestIsMutable();
          digest_.set(index, value);
          onChanged();
        } else {
          digestBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder setDigest(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (digestBuilder_ == null) {
          ensureDigestIsMutable();
          digest_.set(index, builderForValue.build());
          onChanged();
        } else {
          digestBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder addDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (digestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDigestIsMutable();
          digest_.add(value);
          onChanged();
        } else {
          digestBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder addDigest(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (digestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDigestIsMutable();
          digest_.add(index, value);
          onChanged();
        } else {
          digestBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder addDigest(
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (digestBuilder_ == null) {
          ensureDigestIsMutable();
          digest_.add(builderForValue.build());
          onChanged();
        } else {
          digestBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder addDigest(
          int index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (digestBuilder_ == null) {
          ensureDigestIsMutable();
          digest_.add(index, builderForValue.build());
          onChanged();
        } else {
          digestBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder addAllDigest(
          java.lang.Iterable<? extends com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest> values) {
        if (digestBuilder_ == null) {
          ensureDigestIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, digest_);
          onChanged();
        } else {
          digestBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder clearDigest() {
        if (digestBuilder_ == null) {
          digest_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          digestBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public Builder removeDigest(int index) {
        if (digestBuilder_ == null) {
          ensureDigestIsMutable();
          digest_.remove(index);
          onChanged();
        } else {
          digestBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder getDigestBuilder(
          int index) {
        return getDigestFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getDigestOrBuilder(
          int index) {
        if (digestBuilder_ == null) {
          return digest_.get(index);  } else {
          return digestBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
           getDigestOrBuilderList() {
        if (digestBuilder_ != null) {
          return digestBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(digest_);
        }
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder addDigestBuilder() {
        return getDigestFieldBuilder().addBuilder(
            com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance());
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder addDigestBuilder(
          int index) {
        return getDigestFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance());
      }
      /**
       * <code>repeated .build.remote.ContentDigest digest = 1;</code>
       */
      public java.util.List<com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder> 
           getDigestBuilderList() {
        return getDigestFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
          getDigestFieldBuilder() {
        if (digestBuilder_ == null) {
          digestBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder>(
                  digest_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          digest_ = null;
        }
        return digestBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.CasDownloadBlobRequest)
    }

    // @@protoc_insertion_point(class_scope:build.remote.CasDownloadBlobRequest)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CasDownloadBlobRequest>
        PARSER = new com.google.protobuf.AbstractParser<CasDownloadBlobRequest>() {
      public CasDownloadBlobRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new CasDownloadBlobRequest(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ExecutionCacheRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.ExecutionCacheRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
     */
    boolean hasActionDigest();
    /**
     * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getActionDigest();
    /**
     * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getActionDigestOrBuilder();
  }
  /**
   * Protobuf type {@code build.remote.ExecutionCacheRequest}
   */
  public  static final class ExecutionCacheRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.ExecutionCacheRequest)
      ExecutionCacheRequestOrBuilder {
    // Use ExecutionCacheRequest.newBuilder() to construct.
    private ExecutionCacheRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ExecutionCacheRequest() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private ExecutionCacheRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder subBuilder = null;
              if (actionDigest_ != null) {
                subBuilder = actionDigest_.toBuilder();
              }
              actionDigest_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(actionDigest_);
                actionDigest_ = subBuilder.buildPartial();
              }

              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest.Builder.class);
    }

    public static final int ACTION_DIGEST_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest actionDigest_;
    /**
     * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
     */
    public boolean hasActionDigest() {
      return actionDigest_ != null;
    }
    /**
     * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getActionDigest() {
      return actionDigest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : actionDigest_;
    }
    /**
     * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getActionDigestOrBuilder() {
      return getActionDigest();
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (actionDigest_ != null) {
        output.writeMessage(1, getActionDigest());
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (actionDigest_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getActionDigest());
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest other = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest) obj;

      boolean result = true;
      result = result && (hasActionDigest() == other.hasActionDigest());
      if (hasActionDigest()) {
        result = result && getActionDigest()
            .equals(other.getActionDigest());
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasActionDigest()) {
        hash = (37 * hash) + ACTION_DIGEST_FIELD_NUMBER;
        hash = (53 * hash) + getActionDigest().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest 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.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest 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.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.ExecutionCacheRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.ExecutionCacheRequest)
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        if (actionDigestBuilder_ == null) {
          actionDigest_ = null;
        } else {
          actionDigest_ = null;
          actionDigestBuilder_ = null;
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheRequest_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest result = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest(this);
        if (actionDigestBuilder_ == null) {
          result.actionDigest_ = actionDigest_;
        } else {
          result.actionDigest_ = actionDigestBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest.getDefaultInstance()) return this;
        if (other.hasActionDigest()) {
          mergeActionDigest(other.getActionDigest());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest actionDigest_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> actionDigestBuilder_;
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      public boolean hasActionDigest() {
        return actionDigestBuilder_ != null || actionDigest_ != null;
      }
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getActionDigest() {
        if (actionDigestBuilder_ == null) {
          return actionDigest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : actionDigest_;
        } else {
          return actionDigestBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      public Builder setActionDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (actionDigestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          actionDigest_ = value;
          onChanged();
        } else {
          actionDigestBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      public Builder setActionDigest(
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (actionDigestBuilder_ == null) {
          actionDigest_ = builderForValue.build();
          onChanged();
        } else {
          actionDigestBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      public Builder mergeActionDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (actionDigestBuilder_ == null) {
          if (actionDigest_ != null) {
            actionDigest_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.newBuilder(actionDigest_).mergeFrom(value).buildPartial();
          } else {
            actionDigest_ = value;
          }
          onChanged();
        } else {
          actionDigestBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      public Builder clearActionDigest() {
        if (actionDigestBuilder_ == null) {
          actionDigest_ = null;
          onChanged();
        } else {
          actionDigest_ = null;
          actionDigestBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder getActionDigestBuilder() {
        
        onChanged();
        return getActionDigestFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getActionDigestOrBuilder() {
        if (actionDigestBuilder_ != null) {
          return actionDigestBuilder_.getMessageOrBuilder();
        } else {
          return actionDigest_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : actionDigest_;
        }
      }
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
          getActionDigestFieldBuilder() {
        if (actionDigestBuilder_ == null) {
          actionDigestBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder>(
                  getActionDigest(),
                  getParentForChildren(),
                  isClean());
          actionDigest_ = null;
        }
        return actionDigestBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.ExecutionCacheRequest)
    }

    // @@protoc_insertion_point(class_scope:build.remote.ExecutionCacheRequest)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ExecutionCacheRequest>
        PARSER = new com.google.protobuf.AbstractParser<ExecutionCacheRequest>() {
      public ExecutionCacheRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new ExecutionCacheRequest(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ExecutionCacheStatusOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.ExecutionCacheStatus)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Whether the request had any server side errors. For a lookup (get result)
     * request, a true value means the result was found in the cache.
     * </pre>
     *
     * <code>optional bool succeeded = 1;</code>
     */
    boolean getSucceeded();

    /**
     * <code>optional .build.remote.ExecutionCacheStatus.ErrorCode error = 2;</code>
     */
    int getErrorValue();
    /**
     * <code>optional .build.remote.ExecutionCacheStatus.ErrorCode error = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.ErrorCode getError();

    /**
     * <pre>
     * Human readable error.
     * </pre>
     *
     * <code>optional string error_detail = 3;</code>
     */
    java.lang.String getErrorDetail();
    /**
     * <pre>
     * Human readable error.
     * </pre>
     *
     * <code>optional string error_detail = 3;</code>
     */
    com.google.protobuf.ByteString
        getErrorDetailBytes();
  }
  /**
   * Protobuf type {@code build.remote.ExecutionCacheStatus}
   */
  public  static final class ExecutionCacheStatus extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.ExecutionCacheStatus)
      ExecutionCacheStatusOrBuilder {
    // Use ExecutionCacheStatus.newBuilder() to construct.
    private ExecutionCacheStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ExecutionCacheStatus() {
      succeeded_ = false;
      error_ = 0;
      errorDetail_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private ExecutionCacheStatus(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 8: {

              succeeded_ = input.readBool();
              break;
            }
            case 16: {
              int rawValue = input.readEnum();

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

              errorDetail_ = s;
              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheStatus_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheStatus_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.Builder.class);
    }

    /**
     * Protobuf enum {@code build.remote.ExecutionCacheStatus.ErrorCode}
     */
    public enum ErrorCode
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN = 0;</code>
       */
      UNKNOWN(0),
      /**
       * <pre>
       * The result was not found in the execution cache.
       * </pre>
       *
       * <code>MISSING_RESULT = 1;</code>
       */
      MISSING_RESULT(1),
      /**
       * <pre>
       * The request is not supported by the server.
       * </pre>
       *
       * <code>UNSUPPORTED = 2;</code>
       */
      UNSUPPORTED(2),
      UNRECOGNIZED(-1),
      ;

      /**
       * <code>UNKNOWN = 0;</code>
       */
      public static final int UNKNOWN_VALUE = 0;
      /**
       * <pre>
       * The result was not found in the execution cache.
       * </pre>
       *
       * <code>MISSING_RESULT = 1;</code>
       */
      public static final int MISSING_RESULT_VALUE = 1;
      /**
       * <pre>
       * The request is not supported by the server.
       * </pre>
       *
       * <code>UNSUPPORTED = 2;</code>
       */
      public static final int UNSUPPORTED_VALUE = 2;


      public final int getNumber() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalArgumentException(
              "Can't get the number of an unknown enum value.");
        }
        return value;
      }

      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ErrorCode valueOf(int value) {
        return forNumber(value);
      }

      public static ErrorCode forNumber(int value) {
        switch (value) {
          case 0: return UNKNOWN;
          case 1: return MISSING_RESULT;
          case 2: return UNSUPPORTED;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.getDescriptor().getEnumTypes().get(0);
      }

      private static final ErrorCode[] VALUES = values();

      public static ErrorCode valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        if (desc.getIndex() == -1) {
          return UNRECOGNIZED;
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

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

      // @@protoc_insertion_point(enum_scope:build.remote.ExecutionCacheStatus.ErrorCode)
    }

    public static final int SUCCEEDED_FIELD_NUMBER = 1;
    private boolean succeeded_;
    /**
     * <pre>
     * Whether the request had any server side errors. For a lookup (get result)
     * request, a true value means the result was found in the cache.
     * </pre>
     *
     * <code>optional bool succeeded = 1;</code>
     */
    public boolean getSucceeded() {
      return succeeded_;
    }

    public static final int ERROR_FIELD_NUMBER = 2;
    private int error_;
    /**
     * <code>optional .build.remote.ExecutionCacheStatus.ErrorCode error = 2;</code>
     */
    public int getErrorValue() {
      return error_;
    }
    /**
     * <code>optional .build.remote.ExecutionCacheStatus.ErrorCode error = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.ErrorCode getError() {
      com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.ErrorCode result = com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.ErrorCode.valueOf(error_);
      return result == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.ErrorCode.UNRECOGNIZED : result;
    }

    public static final int ERROR_DETAIL_FIELD_NUMBER = 3;
    private volatile java.lang.Object errorDetail_;
    /**
     * <pre>
     * Human readable error.
     * </pre>
     *
     * <code>optional string error_detail = 3;</code>
     */
    public java.lang.String getErrorDetail() {
      java.lang.Object ref = errorDetail_;
      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();
        errorDetail_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Human readable error.
     * </pre>
     *
     * <code>optional string error_detail = 3;</code>
     */
    public com.google.protobuf.ByteString
        getErrorDetailBytes() {
      java.lang.Object ref = errorDetail_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        errorDetail_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (succeeded_ != false) {
        output.writeBool(1, succeeded_);
      }
      if (error_ != com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.ErrorCode.UNKNOWN.getNumber()) {
        output.writeEnum(2, error_);
      }
      if (!getErrorDetailBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, errorDetail_);
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (succeeded_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, succeeded_);
      }
      if (error_ != com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.ErrorCode.UNKNOWN.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, error_);
      }
      if (!getErrorDetailBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, errorDetail_);
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus other = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus) obj;

      boolean result = true;
      result = result && (getSucceeded()
          == other.getSucceeded());
      result = result && error_ == other.error_;
      result = result && getErrorDetail()
          .equals(other.getErrorDetail());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      hash = (37 * hash) + SUCCEEDED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getSucceeded());
      hash = (37 * hash) + ERROR_FIELD_NUMBER;
      hash = (53 * hash) + error_;
      hash = (37 * hash) + ERROR_DETAIL_FIELD_NUMBER;
      hash = (53 * hash) + getErrorDetail().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus 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.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus 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.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.ExecutionCacheStatus}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.ExecutionCacheStatus)
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatusOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheStatus_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheStatus_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        succeeded_ = false;

        error_ = 0;

        errorDetail_ = "";

        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheStatus_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus result = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus(this);
        result.succeeded_ = succeeded_;
        result.error_ = error_;
        result.errorDetail_ = errorDetail_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.getDefaultInstance()) return this;
        if (other.getSucceeded() != false) {
          setSucceeded(other.getSucceeded());
        }
        if (other.error_ != 0) {
          setErrorValue(other.getErrorValue());
        }
        if (!other.getErrorDetail().isEmpty()) {
          errorDetail_ = other.errorDetail_;
          onChanged();
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private boolean succeeded_ ;
      /**
       * <pre>
       * Whether the request had any server side errors. For a lookup (get result)
       * request, a true value means the result was found in the cache.
       * </pre>
       *
       * <code>optional bool succeeded = 1;</code>
       */
      public boolean getSucceeded() {
        return succeeded_;
      }
      /**
       * <pre>
       * Whether the request had any server side errors. For a lookup (get result)
       * request, a true value means the result was found in the cache.
       * </pre>
       *
       * <code>optional bool succeeded = 1;</code>
       */
      public Builder setSucceeded(boolean value) {
        
        succeeded_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether the request had any server side errors. For a lookup (get result)
       * request, a true value means the result was found in the cache.
       * </pre>
       *
       * <code>optional bool succeeded = 1;</code>
       */
      public Builder clearSucceeded() {
        
        succeeded_ = false;
        onChanged();
        return this;
      }

      private int error_ = 0;
      /**
       * <code>optional .build.remote.ExecutionCacheStatus.ErrorCode error = 2;</code>
       */
      public int getErrorValue() {
        return error_;
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus.ErrorCode error = 2;</code>
       */
      public Builder setErrorValue(int value) {
        error_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus.ErrorCode error = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.ErrorCode getError() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.ErrorCode result = com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.ErrorCode.valueOf(error_);
        return result == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.ErrorCode.UNRECOGNIZED : result;
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus.ErrorCode error = 2;</code>
       */
      public Builder setError(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.ErrorCode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        error_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus.ErrorCode error = 2;</code>
       */
      public Builder clearError() {
        
        error_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object errorDetail_ = "";
      /**
       * <pre>
       * Human readable error.
       * </pre>
       *
       * <code>optional string error_detail = 3;</code>
       */
      public java.lang.String getErrorDetail() {
        java.lang.Object ref = errorDetail_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          errorDetail_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Human readable error.
       * </pre>
       *
       * <code>optional string error_detail = 3;</code>
       */
      public com.google.protobuf.ByteString
          getErrorDetailBytes() {
        java.lang.Object ref = errorDetail_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          errorDetail_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Human readable error.
       * </pre>
       *
       * <code>optional string error_detail = 3;</code>
       */
      public Builder setErrorDetail(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        errorDetail_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Human readable error.
       * </pre>
       *
       * <code>optional string error_detail = 3;</code>
       */
      public Builder clearErrorDetail() {
        
        errorDetail_ = getDefaultInstance().getErrorDetail();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Human readable error.
       * </pre>
       *
       * <code>optional string error_detail = 3;</code>
       */
      public Builder setErrorDetailBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        errorDetail_ = value;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.ExecutionCacheStatus)
    }

    // @@protoc_insertion_point(class_scope:build.remote.ExecutionCacheStatus)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ExecutionCacheStatus>
        PARSER = new com.google.protobuf.AbstractParser<ExecutionCacheStatus>() {
      public ExecutionCacheStatus parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new ExecutionCacheStatus(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ExecutionCacheReplyOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.ExecutionCacheReply)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
     */
    boolean hasStatus();
    /**
     * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus getStatus();
    /**
     * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatusOrBuilder getStatusOrBuilder();

    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    boolean hasResult();
    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult getResult();
    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder getResultOrBuilder();
  }
  /**
   * Protobuf type {@code build.remote.ExecutionCacheReply}
   */
  public  static final class ExecutionCacheReply extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.ExecutionCacheReply)
      ExecutionCacheReplyOrBuilder {
    // Use ExecutionCacheReply.newBuilder() to construct.
    private ExecutionCacheReply(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ExecutionCacheReply() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private ExecutionCacheReply(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.Builder subBuilder = null;
              if (status_ != null) {
                subBuilder = status_.toBuilder();
              }
              status_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(status_);
                status_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder subBuilder = null;
              if (result_ != null) {
                subBuilder = result_.toBuilder();
              }
              result_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(result_);
                result_ = subBuilder.buildPartial();
              }

              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheReply_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheReply_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply.Builder.class);
    }

    public static final int STATUS_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus status_;
    /**
     * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
     */
    public boolean hasStatus() {
      return status_ != null;
    }
    /**
     * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus getStatus() {
      return status_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.getDefaultInstance() : status_;
    }
    /**
     * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatusOrBuilder getStatusOrBuilder() {
      return getStatus();
    }

    public static final int RESULT_FIELD_NUMBER = 2;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult result_;
    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    public boolean hasResult() {
      return result_ != null;
    }
    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult getResult() {
      return result_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.getDefaultInstance() : result_;
    }
    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder getResultOrBuilder() {
      return getResult();
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (status_ != null) {
        output.writeMessage(1, getStatus());
      }
      if (result_ != null) {
        output.writeMessage(2, getResult());
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (status_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getStatus());
      }
      if (result_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getResult());
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply other = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply) obj;

      boolean result = true;
      result = result && (hasStatus() == other.hasStatus());
      if (hasStatus()) {
        result = result && getStatus()
            .equals(other.getStatus());
      }
      result = result && (hasResult() == other.hasResult());
      if (hasResult()) {
        result = result && getResult()
            .equals(other.getResult());
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasStatus()) {
        hash = (37 * hash) + STATUS_FIELD_NUMBER;
        hash = (53 * hash) + getStatus().hashCode();
      }
      if (hasResult()) {
        hash = (37 * hash) + RESULT_FIELD_NUMBER;
        hash = (53 * hash) + getResult().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply 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.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply 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.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.ExecutionCacheReply}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.ExecutionCacheReply)
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReplyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheReply_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheReply_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        if (statusBuilder_ == null) {
          status_ = null;
        } else {
          status_ = null;
          statusBuilder_ = null;
        }
        if (resultBuilder_ == null) {
          result_ = null;
        } else {
          result_ = null;
          resultBuilder_ = null;
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheReply_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply result = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply(this);
        if (statusBuilder_ == null) {
          result.status_ = status_;
        } else {
          result.status_ = statusBuilder_.build();
        }
        if (resultBuilder_ == null) {
          result.result_ = result_;
        } else {
          result.result_ = resultBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply.getDefaultInstance()) return this;
        if (other.hasStatus()) {
          mergeStatus(other.getStatus());
        }
        if (other.hasResult()) {
          mergeResult(other.getResult());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus status_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatusOrBuilder> statusBuilder_;
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      public boolean hasStatus() {
        return statusBuilder_ != null || status_ != null;
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus getStatus() {
        if (statusBuilder_ == null) {
          return status_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.getDefaultInstance() : status_;
        } else {
          return statusBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      public Builder setStatus(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus value) {
        if (statusBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          status_ = value;
          onChanged();
        } else {
          statusBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      public Builder setStatus(
          com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.Builder builderForValue) {
        if (statusBuilder_ == null) {
          status_ = builderForValue.build();
          onChanged();
        } else {
          statusBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      public Builder mergeStatus(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus value) {
        if (statusBuilder_ == null) {
          if (status_ != null) {
            status_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.newBuilder(status_).mergeFrom(value).buildPartial();
          } else {
            status_ = value;
          }
          onChanged();
        } else {
          statusBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      public Builder clearStatus() {
        if (statusBuilder_ == null) {
          status_ = null;
          onChanged();
        } else {
          status_ = null;
          statusBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.Builder getStatusBuilder() {
        
        onChanged();
        return getStatusFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatusOrBuilder getStatusOrBuilder() {
        if (statusBuilder_ != null) {
          return statusBuilder_.getMessageOrBuilder();
        } else {
          return status_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.getDefaultInstance() : status_;
        }
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatusOrBuilder> 
          getStatusFieldBuilder() {
        if (statusBuilder_ == null) {
          statusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatusOrBuilder>(
                  getStatus(),
                  getParentForChildren(),
                  isClean());
          status_ = null;
        }
        return statusBuilder_;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult result_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder> resultBuilder_;
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public boolean hasResult() {
        return resultBuilder_ != null || result_ != null;
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult getResult() {
        if (resultBuilder_ == null) {
          return result_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.getDefaultInstance() : result_;
        } else {
          return resultBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public Builder setResult(com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult value) {
        if (resultBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          result_ = value;
          onChanged();
        } else {
          resultBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public Builder setResult(
          com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder builderForValue) {
        if (resultBuilder_ == null) {
          result_ = builderForValue.build();
          onChanged();
        } else {
          resultBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public Builder mergeResult(com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult value) {
        if (resultBuilder_ == null) {
          if (result_ != null) {
            result_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.newBuilder(result_).mergeFrom(value).buildPartial();
          } else {
            result_ = value;
          }
          onChanged();
        } else {
          resultBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public Builder clearResult() {
        if (resultBuilder_ == null) {
          result_ = null;
          onChanged();
        } else {
          result_ = null;
          resultBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder getResultBuilder() {
        
        onChanged();
        return getResultFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder getResultOrBuilder() {
        if (resultBuilder_ != null) {
          return resultBuilder_.getMessageOrBuilder();
        } else {
          return result_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.getDefaultInstance() : result_;
        }
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder> 
          getResultFieldBuilder() {
        if (resultBuilder_ == null) {
          resultBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder>(
                  getResult(),
                  getParentForChildren(),
                  isClean());
          result_ = null;
        }
        return resultBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.ExecutionCacheReply)
    }

    // @@protoc_insertion_point(class_scope:build.remote.ExecutionCacheReply)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ExecutionCacheReply>
        PARSER = new com.google.protobuf.AbstractParser<ExecutionCacheReply>() {
      public ExecutionCacheReply parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new ExecutionCacheReply(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ExecutionCacheSetRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.ExecutionCacheSetRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
     */
    boolean hasActionDigest();
    /**
     * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getActionDigest();
    /**
     * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getActionDigestOrBuilder();

    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    boolean hasResult();
    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult getResult();
    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder getResultOrBuilder();
  }
  /**
   * Protobuf type {@code build.remote.ExecutionCacheSetRequest}
   */
  public  static final class ExecutionCacheSetRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.ExecutionCacheSetRequest)
      ExecutionCacheSetRequestOrBuilder {
    // Use ExecutionCacheSetRequest.newBuilder() to construct.
    private ExecutionCacheSetRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ExecutionCacheSetRequest() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private ExecutionCacheSetRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder subBuilder = null;
              if (actionDigest_ != null) {
                subBuilder = actionDigest_.toBuilder();
              }
              actionDigest_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(actionDigest_);
                actionDigest_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder subBuilder = null;
              if (result_ != null) {
                subBuilder = result_.toBuilder();
              }
              result_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(result_);
                result_ = subBuilder.buildPartial();
              }

              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheSetRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheSetRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest.Builder.class);
    }

    public static final int ACTION_DIGEST_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest actionDigest_;
    /**
     * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
     */
    public boolean hasActionDigest() {
      return actionDigest_ != null;
    }
    /**
     * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getActionDigest() {
      return actionDigest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : actionDigest_;
    }
    /**
     * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getActionDigestOrBuilder() {
      return getActionDigest();
    }

    public static final int RESULT_FIELD_NUMBER = 2;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult result_;
    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    public boolean hasResult() {
      return result_ != null;
    }
    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult getResult() {
      return result_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.getDefaultInstance() : result_;
    }
    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder getResultOrBuilder() {
      return getResult();
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (actionDigest_ != null) {
        output.writeMessage(1, getActionDigest());
      }
      if (result_ != null) {
        output.writeMessage(2, getResult());
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (actionDigest_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getActionDigest());
      }
      if (result_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getResult());
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest other = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest) obj;

      boolean result = true;
      result = result && (hasActionDigest() == other.hasActionDigest());
      if (hasActionDigest()) {
        result = result && getActionDigest()
            .equals(other.getActionDigest());
      }
      result = result && (hasResult() == other.hasResult());
      if (hasResult()) {
        result = result && getResult()
            .equals(other.getResult());
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasActionDigest()) {
        hash = (37 * hash) + ACTION_DIGEST_FIELD_NUMBER;
        hash = (53 * hash) + getActionDigest().hashCode();
      }
      if (hasResult()) {
        hash = (37 * hash) + RESULT_FIELD_NUMBER;
        hash = (53 * hash) + getResult().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest 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.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest 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.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.ExecutionCacheSetRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.ExecutionCacheSetRequest)
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheSetRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheSetRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        if (actionDigestBuilder_ == null) {
          actionDigest_ = null;
        } else {
          actionDigest_ = null;
          actionDigestBuilder_ = null;
        }
        if (resultBuilder_ == null) {
          result_ = null;
        } else {
          result_ = null;
          resultBuilder_ = null;
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheSetRequest_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest result = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest(this);
        if (actionDigestBuilder_ == null) {
          result.actionDigest_ = actionDigest_;
        } else {
          result.actionDigest_ = actionDigestBuilder_.build();
        }
        if (resultBuilder_ == null) {
          result.result_ = result_;
        } else {
          result.result_ = resultBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest.getDefaultInstance()) return this;
        if (other.hasActionDigest()) {
          mergeActionDigest(other.getActionDigest());
        }
        if (other.hasResult()) {
          mergeResult(other.getResult());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest actionDigest_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> actionDigestBuilder_;
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      public boolean hasActionDigest() {
        return actionDigestBuilder_ != null || actionDigest_ != null;
      }
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest getActionDigest() {
        if (actionDigestBuilder_ == null) {
          return actionDigest_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : actionDigest_;
        } else {
          return actionDigestBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      public Builder setActionDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (actionDigestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          actionDigest_ = value;
          onChanged();
        } else {
          actionDigestBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      public Builder setActionDigest(
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder builderForValue) {
        if (actionDigestBuilder_ == null) {
          actionDigest_ = builderForValue.build();
          onChanged();
        } else {
          actionDigestBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      public Builder mergeActionDigest(com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest value) {
        if (actionDigestBuilder_ == null) {
          if (actionDigest_ != null) {
            actionDigest_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.newBuilder(actionDigest_).mergeFrom(value).buildPartial();
          } else {
            actionDigest_ = value;
          }
          onChanged();
        } else {
          actionDigestBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      public Builder clearActionDigest() {
        if (actionDigestBuilder_ == null) {
          actionDigest_ = null;
          onChanged();
        } else {
          actionDigest_ = null;
          actionDigestBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder getActionDigestBuilder() {
        
        onChanged();
        return getActionDigestFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder getActionDigestOrBuilder() {
        if (actionDigestBuilder_ != null) {
          return actionDigestBuilder_.getMessageOrBuilder();
        } else {
          return actionDigest_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.getDefaultInstance() : actionDigest_;
        }
      }
      /**
       * <code>optional .build.remote.ContentDigest action_digest = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder> 
          getActionDigestFieldBuilder() {
        if (actionDigestBuilder_ == null) {
          actionDigestBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigest.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ContentDigestOrBuilder>(
                  getActionDigest(),
                  getParentForChildren(),
                  isClean());
          actionDigest_ = null;
        }
        return actionDigestBuilder_;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult result_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder> resultBuilder_;
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public boolean hasResult() {
        return resultBuilder_ != null || result_ != null;
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult getResult() {
        if (resultBuilder_ == null) {
          return result_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.getDefaultInstance() : result_;
        } else {
          return resultBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public Builder setResult(com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult value) {
        if (resultBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          result_ = value;
          onChanged();
        } else {
          resultBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public Builder setResult(
          com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder builderForValue) {
        if (resultBuilder_ == null) {
          result_ = builderForValue.build();
          onChanged();
        } else {
          resultBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public Builder mergeResult(com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult value) {
        if (resultBuilder_ == null) {
          if (result_ != null) {
            result_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.newBuilder(result_).mergeFrom(value).buildPartial();
          } else {
            result_ = value;
          }
          onChanged();
        } else {
          resultBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public Builder clearResult() {
        if (resultBuilder_ == null) {
          result_ = null;
          onChanged();
        } else {
          result_ = null;
          resultBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder getResultBuilder() {
        
        onChanged();
        return getResultFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder getResultOrBuilder() {
        if (resultBuilder_ != null) {
          return resultBuilder_.getMessageOrBuilder();
        } else {
          return result_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.getDefaultInstance() : result_;
        }
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder> 
          getResultFieldBuilder() {
        if (resultBuilder_ == null) {
          resultBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder>(
                  getResult(),
                  getParentForChildren(),
                  isClean());
          result_ = null;
        }
        return resultBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.ExecutionCacheSetRequest)
    }

    // @@protoc_insertion_point(class_scope:build.remote.ExecutionCacheSetRequest)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ExecutionCacheSetRequest>
        PARSER = new com.google.protobuf.AbstractParser<ExecutionCacheSetRequest>() {
      public ExecutionCacheSetRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new ExecutionCacheSetRequest(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ExecutionCacheSetReplyOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.ExecutionCacheSetReply)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
     */
    boolean hasStatus();
    /**
     * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus getStatus();
    /**
     * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatusOrBuilder getStatusOrBuilder();
  }
  /**
   * Protobuf type {@code build.remote.ExecutionCacheSetReply}
   */
  public  static final class ExecutionCacheSetReply extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.ExecutionCacheSetReply)
      ExecutionCacheSetReplyOrBuilder {
    // Use ExecutionCacheSetReply.newBuilder() to construct.
    private ExecutionCacheSetReply(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ExecutionCacheSetReply() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private ExecutionCacheSetReply(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.Builder subBuilder = null;
              if (status_ != null) {
                subBuilder = status_.toBuilder();
              }
              status_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(status_);
                status_ = subBuilder.buildPartial();
              }

              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheSetReply_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheSetReply_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply.Builder.class);
    }

    public static final int STATUS_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus status_;
    /**
     * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
     */
    public boolean hasStatus() {
      return status_ != null;
    }
    /**
     * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus getStatus() {
      return status_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.getDefaultInstance() : status_;
    }
    /**
     * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatusOrBuilder getStatusOrBuilder() {
      return getStatus();
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (status_ != null) {
        output.writeMessage(1, getStatus());
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (status_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getStatus());
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply other = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply) obj;

      boolean result = true;
      result = result && (hasStatus() == other.hasStatus());
      if (hasStatus()) {
        result = result && getStatus()
            .equals(other.getStatus());
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasStatus()) {
        hash = (37 * hash) + STATUS_FIELD_NUMBER;
        hash = (53 * hash) + getStatus().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply 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.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply 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.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.ExecutionCacheSetReply}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.ExecutionCacheSetReply)
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReplyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheSetReply_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheSetReply_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        if (statusBuilder_ == null) {
          status_ = null;
        } else {
          status_ = null;
          statusBuilder_ = null;
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionCacheSetReply_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply result = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply(this);
        if (statusBuilder_ == null) {
          result.status_ = status_;
        } else {
          result.status_ = statusBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply.getDefaultInstance()) return this;
        if (other.hasStatus()) {
          mergeStatus(other.getStatus());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus status_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatusOrBuilder> statusBuilder_;
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      public boolean hasStatus() {
        return statusBuilder_ != null || status_ != null;
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus getStatus() {
        if (statusBuilder_ == null) {
          return status_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.getDefaultInstance() : status_;
        } else {
          return statusBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      public Builder setStatus(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus value) {
        if (statusBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          status_ = value;
          onChanged();
        } else {
          statusBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      public Builder setStatus(
          com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.Builder builderForValue) {
        if (statusBuilder_ == null) {
          status_ = builderForValue.build();
          onChanged();
        } else {
          statusBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      public Builder mergeStatus(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus value) {
        if (statusBuilder_ == null) {
          if (status_ != null) {
            status_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.newBuilder(status_).mergeFrom(value).buildPartial();
          } else {
            status_ = value;
          }
          onChanged();
        } else {
          statusBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      public Builder clearStatus() {
        if (statusBuilder_ == null) {
          status_ = null;
          onChanged();
        } else {
          status_ = null;
          statusBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.Builder getStatusBuilder() {
        
        onChanged();
        return getStatusFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatusOrBuilder getStatusOrBuilder() {
        if (statusBuilder_ != null) {
          return statusBuilder_.getMessageOrBuilder();
        } else {
          return status_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.getDefaultInstance() : status_;
        }
      }
      /**
       * <code>optional .build.remote.ExecutionCacheStatus status = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatusOrBuilder> 
          getStatusFieldBuilder() {
        if (statusBuilder_ == null) {
          statusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheStatusOrBuilder>(
                  getStatus(),
                  getParentForChildren(),
                  isClean());
          status_ = null;
        }
        return statusBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.ExecutionCacheSetReply)
    }

    // @@protoc_insertion_point(class_scope:build.remote.ExecutionCacheSetReply)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ExecutionCacheSetReply>
        PARSER = new com.google.protobuf.AbstractParser<ExecutionCacheSetReply>() {
      public ExecutionCacheSetReply parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new ExecutionCacheSetReply(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ExecuteRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.ExecuteRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .build.remote.Action action = 1;</code>
     */
    boolean hasAction();
    /**
     * <code>optional .build.remote.Action action = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.Action getAction();
    /**
     * <code>optional .build.remote.Action action = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ActionOrBuilder getActionOrBuilder();

    /**
     * <code>optional bool accept_cached = 2;</code>
     */
    boolean getAcceptCached();

    /**
     * <pre>
     * Later will probably add previous attempt history, as it will be
     * useful for monitoring and probably scheduling as well.
     * These fields will be useful for scheduling, error reporting (e.g. disk
     * exceeded) and for log analysis.
     * </pre>
     *
     * <code>optional int32 total_input_file_count = 3;</code>
     */
    int getTotalInputFileCount();

    /**
     * <code>optional int64 total_input_file_bytes = 4;</code>
     */
    long getTotalInputFileBytes();

    /**
     * <pre>
     * Used for monitoring and scheduling.
     * </pre>
     *
     * <code>optional .build.remote.BuildInfo build_info = 5;</code>
     */
    boolean hasBuildInfo();
    /**
     * <pre>
     * Used for monitoring and scheduling.
     * </pre>
     *
     * <code>optional .build.remote.BuildInfo build_info = 5;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo getBuildInfo();
    /**
     * <pre>
     * Used for monitoring and scheduling.
     * </pre>
     *
     * <code>optional .build.remote.BuildInfo build_info = 5;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfoOrBuilder getBuildInfoOrBuilder();

    /**
     * <pre>
     * Timeout milliseconds for running this action.
     * </pre>
     *
     * <code>optional int64 timeout_millis = 6;</code>
     */
    long getTimeoutMillis();
  }
  /**
   * Protobuf type {@code build.remote.ExecuteRequest}
   */
  public  static final class ExecuteRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.ExecuteRequest)
      ExecuteRequestOrBuilder {
    // Use ExecuteRequest.newBuilder() to construct.
    private ExecuteRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ExecuteRequest() {
      acceptCached_ = false;
      totalInputFileCount_ = 0;
      totalInputFileBytes_ = 0L;
      timeoutMillis_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private ExecuteRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.Action.Builder subBuilder = null;
              if (action_ != null) {
                subBuilder = action_.toBuilder();
              }
              action_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.Action.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(action_);
                action_ = subBuilder.buildPartial();
              }

              break;
            }
            case 16: {

              acceptCached_ = input.readBool();
              break;
            }
            case 24: {

              totalInputFileCount_ = input.readInt32();
              break;
            }
            case 32: {

              totalInputFileBytes_ = input.readInt64();
              break;
            }
            case 42: {
              com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.Builder subBuilder = null;
              if (buildInfo_ != null) {
                subBuilder = buildInfo_.toBuilder();
              }
              buildInfo_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(buildInfo_);
                buildInfo_ = subBuilder.buildPartial();
              }

              break;
            }
            case 48: {

              timeoutMillis_ = input.readInt64();
              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecuteRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecuteRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest.Builder.class);
    }

    public static final int ACTION_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.Action action_;
    /**
     * <code>optional .build.remote.Action action = 1;</code>
     */
    public boolean hasAction() {
      return action_ != null;
    }
    /**
     * <code>optional .build.remote.Action action = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.Action getAction() {
      return action_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.Action.getDefaultInstance() : action_;
    }
    /**
     * <code>optional .build.remote.Action action = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ActionOrBuilder getActionOrBuilder() {
      return getAction();
    }

    public static final int ACCEPT_CACHED_FIELD_NUMBER = 2;
    private boolean acceptCached_;
    /**
     * <code>optional bool accept_cached = 2;</code>
     */
    public boolean getAcceptCached() {
      return acceptCached_;
    }

    public static final int TOTAL_INPUT_FILE_COUNT_FIELD_NUMBER = 3;
    private int totalInputFileCount_;
    /**
     * <pre>
     * Later will probably add previous attempt history, as it will be
     * useful for monitoring and probably scheduling as well.
     * These fields will be useful for scheduling, error reporting (e.g. disk
     * exceeded) and for log analysis.
     * </pre>
     *
     * <code>optional int32 total_input_file_count = 3;</code>
     */
    public int getTotalInputFileCount() {
      return totalInputFileCount_;
    }

    public static final int TOTAL_INPUT_FILE_BYTES_FIELD_NUMBER = 4;
    private long totalInputFileBytes_;
    /**
     * <code>optional int64 total_input_file_bytes = 4;</code>
     */
    public long getTotalInputFileBytes() {
      return totalInputFileBytes_;
    }

    public static final int BUILD_INFO_FIELD_NUMBER = 5;
    private com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo buildInfo_;
    /**
     * <pre>
     * Used for monitoring and scheduling.
     * </pre>
     *
     * <code>optional .build.remote.BuildInfo build_info = 5;</code>
     */
    public boolean hasBuildInfo() {
      return buildInfo_ != null;
    }
    /**
     * <pre>
     * Used for monitoring and scheduling.
     * </pre>
     *
     * <code>optional .build.remote.BuildInfo build_info = 5;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo getBuildInfo() {
      return buildInfo_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.getDefaultInstance() : buildInfo_;
    }
    /**
     * <pre>
     * Used for monitoring and scheduling.
     * </pre>
     *
     * <code>optional .build.remote.BuildInfo build_info = 5;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfoOrBuilder getBuildInfoOrBuilder() {
      return getBuildInfo();
    }

    public static final int TIMEOUT_MILLIS_FIELD_NUMBER = 6;
    private long timeoutMillis_;
    /**
     * <pre>
     * Timeout milliseconds for running this action.
     * </pre>
     *
     * <code>optional int64 timeout_millis = 6;</code>
     */
    public long getTimeoutMillis() {
      return timeoutMillis_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (action_ != null) {
        output.writeMessage(1, getAction());
      }
      if (acceptCached_ != false) {
        output.writeBool(2, acceptCached_);
      }
      if (totalInputFileCount_ != 0) {
        output.writeInt32(3, totalInputFileCount_);
      }
      if (totalInputFileBytes_ != 0L) {
        output.writeInt64(4, totalInputFileBytes_);
      }
      if (buildInfo_ != null) {
        output.writeMessage(5, getBuildInfo());
      }
      if (timeoutMillis_ != 0L) {
        output.writeInt64(6, timeoutMillis_);
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (action_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getAction());
      }
      if (acceptCached_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, acceptCached_);
      }
      if (totalInputFileCount_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, totalInputFileCount_);
      }
      if (totalInputFileBytes_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, totalInputFileBytes_);
      }
      if (buildInfo_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getBuildInfo());
      }
      if (timeoutMillis_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(6, timeoutMillis_);
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest other = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest) obj;

      boolean result = true;
      result = result && (hasAction() == other.hasAction());
      if (hasAction()) {
        result = result && getAction()
            .equals(other.getAction());
      }
      result = result && (getAcceptCached()
          == other.getAcceptCached());
      result = result && (getTotalInputFileCount()
          == other.getTotalInputFileCount());
      result = result && (getTotalInputFileBytes()
          == other.getTotalInputFileBytes());
      result = result && (hasBuildInfo() == other.hasBuildInfo());
      if (hasBuildInfo()) {
        result = result && getBuildInfo()
            .equals(other.getBuildInfo());
      }
      result = result && (getTimeoutMillis()
          == other.getTimeoutMillis());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasAction()) {
        hash = (37 * hash) + ACTION_FIELD_NUMBER;
        hash = (53 * hash) + getAction().hashCode();
      }
      hash = (37 * hash) + ACCEPT_CACHED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getAcceptCached());
      hash = (37 * hash) + TOTAL_INPUT_FILE_COUNT_FIELD_NUMBER;
      hash = (53 * hash) + getTotalInputFileCount();
      hash = (37 * hash) + TOTAL_INPUT_FILE_BYTES_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getTotalInputFileBytes());
      if (hasBuildInfo()) {
        hash = (37 * hash) + BUILD_INFO_FIELD_NUMBER;
        hash = (53 * hash) + getBuildInfo().hashCode();
      }
      hash = (37 * hash) + TIMEOUT_MILLIS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getTimeoutMillis());
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest 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.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest 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.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.ExecuteRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.ExecuteRequest)
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecuteRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecuteRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        if (actionBuilder_ == null) {
          action_ = null;
        } else {
          action_ = null;
          actionBuilder_ = null;
        }
        acceptCached_ = false;

        totalInputFileCount_ = 0;

        totalInputFileBytes_ = 0L;

        if (buildInfoBuilder_ == null) {
          buildInfo_ = null;
        } else {
          buildInfo_ = null;
          buildInfoBuilder_ = null;
        }
        timeoutMillis_ = 0L;

        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecuteRequest_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest result = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest(this);
        if (actionBuilder_ == null) {
          result.action_ = action_;
        } else {
          result.action_ = actionBuilder_.build();
        }
        result.acceptCached_ = acceptCached_;
        result.totalInputFileCount_ = totalInputFileCount_;
        result.totalInputFileBytes_ = totalInputFileBytes_;
        if (buildInfoBuilder_ == null) {
          result.buildInfo_ = buildInfo_;
        } else {
          result.buildInfo_ = buildInfoBuilder_.build();
        }
        result.timeoutMillis_ = timeoutMillis_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest.getDefaultInstance()) return this;
        if (other.hasAction()) {
          mergeAction(other.getAction());
        }
        if (other.getAcceptCached() != false) {
          setAcceptCached(other.getAcceptCached());
        }
        if (other.getTotalInputFileCount() != 0) {
          setTotalInputFileCount(other.getTotalInputFileCount());
        }
        if (other.getTotalInputFileBytes() != 0L) {
          setTotalInputFileBytes(other.getTotalInputFileBytes());
        }
        if (other.hasBuildInfo()) {
          mergeBuildInfo(other.getBuildInfo());
        }
        if (other.getTimeoutMillis() != 0L) {
          setTimeoutMillis(other.getTimeoutMillis());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.Action action_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.Action, com.google.devtools.build.lib.remote.RemoteProtocol.Action.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ActionOrBuilder> actionBuilder_;
      /**
       * <code>optional .build.remote.Action action = 1;</code>
       */
      public boolean hasAction() {
        return actionBuilder_ != null || action_ != null;
      }
      /**
       * <code>optional .build.remote.Action action = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.Action getAction() {
        if (actionBuilder_ == null) {
          return action_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.Action.getDefaultInstance() : action_;
        } else {
          return actionBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.Action action = 1;</code>
       */
      public Builder setAction(com.google.devtools.build.lib.remote.RemoteProtocol.Action value) {
        if (actionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          action_ = value;
          onChanged();
        } else {
          actionBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.Action action = 1;</code>
       */
      public Builder setAction(
          com.google.devtools.build.lib.remote.RemoteProtocol.Action.Builder builderForValue) {
        if (actionBuilder_ == null) {
          action_ = builderForValue.build();
          onChanged();
        } else {
          actionBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.Action action = 1;</code>
       */
      public Builder mergeAction(com.google.devtools.build.lib.remote.RemoteProtocol.Action value) {
        if (actionBuilder_ == null) {
          if (action_ != null) {
            action_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.Action.newBuilder(action_).mergeFrom(value).buildPartial();
          } else {
            action_ = value;
          }
          onChanged();
        } else {
          actionBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.Action action = 1;</code>
       */
      public Builder clearAction() {
        if (actionBuilder_ == null) {
          action_ = null;
          onChanged();
        } else {
          action_ = null;
          actionBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.Action action = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.Action.Builder getActionBuilder() {
        
        onChanged();
        return getActionFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.Action action = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ActionOrBuilder getActionOrBuilder() {
        if (actionBuilder_ != null) {
          return actionBuilder_.getMessageOrBuilder();
        } else {
          return action_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.Action.getDefaultInstance() : action_;
        }
      }
      /**
       * <code>optional .build.remote.Action action = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.Action, com.google.devtools.build.lib.remote.RemoteProtocol.Action.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ActionOrBuilder> 
          getActionFieldBuilder() {
        if (actionBuilder_ == null) {
          actionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.Action, com.google.devtools.build.lib.remote.RemoteProtocol.Action.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ActionOrBuilder>(
                  getAction(),
                  getParentForChildren(),
                  isClean());
          action_ = null;
        }
        return actionBuilder_;
      }

      private boolean acceptCached_ ;
      /**
       * <code>optional bool accept_cached = 2;</code>
       */
      public boolean getAcceptCached() {
        return acceptCached_;
      }
      /**
       * <code>optional bool accept_cached = 2;</code>
       */
      public Builder setAcceptCached(boolean value) {
        
        acceptCached_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool accept_cached = 2;</code>
       */
      public Builder clearAcceptCached() {
        
        acceptCached_ = false;
        onChanged();
        return this;
      }

      private int totalInputFileCount_ ;
      /**
       * <pre>
       * Later will probably add previous attempt history, as it will be
       * useful for monitoring and probably scheduling as well.
       * These fields will be useful for scheduling, error reporting (e.g. disk
       * exceeded) and for log analysis.
       * </pre>
       *
       * <code>optional int32 total_input_file_count = 3;</code>
       */
      public int getTotalInputFileCount() {
        return totalInputFileCount_;
      }
      /**
       * <pre>
       * Later will probably add previous attempt history, as it will be
       * useful for monitoring and probably scheduling as well.
       * These fields will be useful for scheduling, error reporting (e.g. disk
       * exceeded) and for log analysis.
       * </pre>
       *
       * <code>optional int32 total_input_file_count = 3;</code>
       */
      public Builder setTotalInputFileCount(int value) {
        
        totalInputFileCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Later will probably add previous attempt history, as it will be
       * useful for monitoring and probably scheduling as well.
       * These fields will be useful for scheduling, error reporting (e.g. disk
       * exceeded) and for log analysis.
       * </pre>
       *
       * <code>optional int32 total_input_file_count = 3;</code>
       */
      public Builder clearTotalInputFileCount() {
        
        totalInputFileCount_ = 0;
        onChanged();
        return this;
      }

      private long totalInputFileBytes_ ;
      /**
       * <code>optional int64 total_input_file_bytes = 4;</code>
       */
      public long getTotalInputFileBytes() {
        return totalInputFileBytes_;
      }
      /**
       * <code>optional int64 total_input_file_bytes = 4;</code>
       */
      public Builder setTotalInputFileBytes(long value) {
        
        totalInputFileBytes_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 total_input_file_bytes = 4;</code>
       */
      public Builder clearTotalInputFileBytes() {
        
        totalInputFileBytes_ = 0L;
        onChanged();
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo buildInfo_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo, com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfoOrBuilder> buildInfoBuilder_;
      /**
       * <pre>
       * Used for monitoring and scheduling.
       * </pre>
       *
       * <code>optional .build.remote.BuildInfo build_info = 5;</code>
       */
      public boolean hasBuildInfo() {
        return buildInfoBuilder_ != null || buildInfo_ != null;
      }
      /**
       * <pre>
       * Used for monitoring and scheduling.
       * </pre>
       *
       * <code>optional .build.remote.BuildInfo build_info = 5;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo getBuildInfo() {
        if (buildInfoBuilder_ == null) {
          return buildInfo_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.getDefaultInstance() : buildInfo_;
        } else {
          return buildInfoBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Used for monitoring and scheduling.
       * </pre>
       *
       * <code>optional .build.remote.BuildInfo build_info = 5;</code>
       */
      public Builder setBuildInfo(com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo value) {
        if (buildInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          buildInfo_ = value;
          onChanged();
        } else {
          buildInfoBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * Used for monitoring and scheduling.
       * </pre>
       *
       * <code>optional .build.remote.BuildInfo build_info = 5;</code>
       */
      public Builder setBuildInfo(
          com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.Builder builderForValue) {
        if (buildInfoBuilder_ == null) {
          buildInfo_ = builderForValue.build();
          onChanged();
        } else {
          buildInfoBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * Used for monitoring and scheduling.
       * </pre>
       *
       * <code>optional .build.remote.BuildInfo build_info = 5;</code>
       */
      public Builder mergeBuildInfo(com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo value) {
        if (buildInfoBuilder_ == null) {
          if (buildInfo_ != null) {
            buildInfo_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.newBuilder(buildInfo_).mergeFrom(value).buildPartial();
          } else {
            buildInfo_ = value;
          }
          onChanged();
        } else {
          buildInfoBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * Used for monitoring and scheduling.
       * </pre>
       *
       * <code>optional .build.remote.BuildInfo build_info = 5;</code>
       */
      public Builder clearBuildInfo() {
        if (buildInfoBuilder_ == null) {
          buildInfo_ = null;
          onChanged();
        } else {
          buildInfo_ = null;
          buildInfoBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * Used for monitoring and scheduling.
       * </pre>
       *
       * <code>optional .build.remote.BuildInfo build_info = 5;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.Builder getBuildInfoBuilder() {
        
        onChanged();
        return getBuildInfoFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Used for monitoring and scheduling.
       * </pre>
       *
       * <code>optional .build.remote.BuildInfo build_info = 5;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfoOrBuilder getBuildInfoOrBuilder() {
        if (buildInfoBuilder_ != null) {
          return buildInfoBuilder_.getMessageOrBuilder();
        } else {
          return buildInfo_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.getDefaultInstance() : buildInfo_;
        }
      }
      /**
       * <pre>
       * Used for monitoring and scheduling.
       * </pre>
       *
       * <code>optional .build.remote.BuildInfo build_info = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo, com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfoOrBuilder> 
          getBuildInfoFieldBuilder() {
        if (buildInfoBuilder_ == null) {
          buildInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo, com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfoOrBuilder>(
                  getBuildInfo(),
                  getParentForChildren(),
                  isClean());
          buildInfo_ = null;
        }
        return buildInfoBuilder_;
      }

      private long timeoutMillis_ ;
      /**
       * <pre>
       * Timeout milliseconds for running this action.
       * </pre>
       *
       * <code>optional int64 timeout_millis = 6;</code>
       */
      public long getTimeoutMillis() {
        return timeoutMillis_;
      }
      /**
       * <pre>
       * Timeout milliseconds for running this action.
       * </pre>
       *
       * <code>optional int64 timeout_millis = 6;</code>
       */
      public Builder setTimeoutMillis(long value) {
        
        timeoutMillis_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Timeout milliseconds for running this action.
       * </pre>
       *
       * <code>optional int64 timeout_millis = 6;</code>
       */
      public Builder clearTimeoutMillis() {
        
        timeoutMillis_ = 0L;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.ExecuteRequest)
    }

    // @@protoc_insertion_point(class_scope:build.remote.ExecuteRequest)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ExecuteRequest>
        PARSER = new com.google.protobuf.AbstractParser<ExecuteRequest>() {
      public ExecuteRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new ExecuteRequest(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface BuildInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.BuildInfo)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * TBD, Fields used to identify a build action.
     * This will be useful for analysis purposes.
     * Note: we don't want to put any Bazel-specific fields in this.
     * </pre>
     *
     * <code>optional string build_id = 1;</code>
     */
    java.lang.String getBuildId();
    /**
     * <pre>
     * TBD, Fields used to identify a build action.
     * This will be useful for analysis purposes.
     * Note: we don't want to put any Bazel-specific fields in this.
     * </pre>
     *
     * <code>optional string build_id = 1;</code>
     */
    com.google.protobuf.ByteString
        getBuildIdBytes();
  }
  /**
   * Protobuf type {@code build.remote.BuildInfo}
   */
  public  static final class BuildInfo extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.BuildInfo)
      BuildInfoOrBuilder {
    // Use BuildInfo.newBuilder() to construct.
    private BuildInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private BuildInfo() {
      buildId_ = "";
    }

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

              buildId_ = s;
              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_BuildInfo_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_BuildInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.class, com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.Builder.class);
    }

    public static final int BUILD_ID_FIELD_NUMBER = 1;
    private volatile java.lang.Object buildId_;
    /**
     * <pre>
     * TBD, Fields used to identify a build action.
     * This will be useful for analysis purposes.
     * Note: we don't want to put any Bazel-specific fields in this.
     * </pre>
     *
     * <code>optional string build_id = 1;</code>
     */
    public java.lang.String getBuildId() {
      java.lang.Object ref = buildId_;
      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();
        buildId_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * TBD, Fields used to identify a build action.
     * This will be useful for analysis purposes.
     * Note: we don't want to put any Bazel-specific fields in this.
     * </pre>
     *
     * <code>optional string build_id = 1;</code>
     */
    public com.google.protobuf.ByteString
        getBuildIdBytes() {
      java.lang.Object ref = buildId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        buildId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!getBuildIdBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, buildId_);
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getBuildIdBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, buildId_);
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo other = (com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo) obj;

      boolean result = true;
      result = result && getBuildId()
          .equals(other.getBuildId());
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      hash = (37 * hash) + BUILD_ID_FIELD_NUMBER;
      hash = (53 * hash) + getBuildId().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo 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.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo 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.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.BuildInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.BuildInfo)
        com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_BuildInfo_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_BuildInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.class, com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        buildId_ = "";

        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_BuildInfo_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo result = new com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo(this);
        result.buildId_ = buildId_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo.getDefaultInstance()) return this;
        if (!other.getBuildId().isEmpty()) {
          buildId_ = other.buildId_;
          onChanged();
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object buildId_ = "";
      /**
       * <pre>
       * TBD, Fields used to identify a build action.
       * This will be useful for analysis purposes.
       * Note: we don't want to put any Bazel-specific fields in this.
       * </pre>
       *
       * <code>optional string build_id = 1;</code>
       */
      public java.lang.String getBuildId() {
        java.lang.Object ref = buildId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          buildId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * TBD, Fields used to identify a build action.
       * This will be useful for analysis purposes.
       * Note: we don't want to put any Bazel-specific fields in this.
       * </pre>
       *
       * <code>optional string build_id = 1;</code>
       */
      public com.google.protobuf.ByteString
          getBuildIdBytes() {
        java.lang.Object ref = buildId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          buildId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * TBD, Fields used to identify a build action.
       * This will be useful for analysis purposes.
       * Note: we don't want to put any Bazel-specific fields in this.
       * </pre>
       *
       * <code>optional string build_id = 1;</code>
       */
      public Builder setBuildId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        buildId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * TBD, Fields used to identify a build action.
       * This will be useful for analysis purposes.
       * Note: we don't want to put any Bazel-specific fields in this.
       * </pre>
       *
       * <code>optional string build_id = 1;</code>
       */
      public Builder clearBuildId() {
        
        buildId_ = getDefaultInstance().getBuildId();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * TBD, Fields used to identify a build action.
       * This will be useful for analysis purposes.
       * Note: we don't want to put any Bazel-specific fields in this.
       * </pre>
       *
       * <code>optional string build_id = 1;</code>
       */
      public Builder setBuildIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        buildId_ = value;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.BuildInfo)
    }

    // @@protoc_insertion_point(class_scope:build.remote.BuildInfo)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<BuildInfo>
        PARSER = new com.google.protobuf.AbstractParser<BuildInfo>() {
      public BuildInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new BuildInfo(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.BuildInfo getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ExecutionStatsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.ExecutionStats)
      com.google.protobuf.MessageOrBuilder {
  }
  /**
   * <pre>
   *  TBD, will contain all the stats related to the execution:
   * time it took, resources, etc. Maybe will break into sub-messages
   * for various execution phases.
   * </pre>
   *
   * Protobuf type {@code build.remote.ExecutionStats}
   */
  public  static final class ExecutionStats extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.ExecutionStats)
      ExecutionStatsOrBuilder {
    // Use ExecutionStats.newBuilder() to construct.
    private ExecutionStats(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ExecutionStats() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private ExecutionStats(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionStats_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionStats_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.Builder.class);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats other = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats) obj;

      boolean result = true;
      return result;
    }

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

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats 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.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats 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.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     *  TBD, will contain all the stats related to the execution:
     * time it took, resources, etc. Maybe will break into sub-messages
     * for various execution phases.
     * </pre>
     *
     * Protobuf type {@code build.remote.ExecutionStats}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.ExecutionStats)
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionStats_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionStats_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionStats_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats result = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats(this);
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.getDefaultInstance()) return this;
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.ExecutionStats)
    }

    // @@protoc_insertion_point(class_scope:build.remote.ExecutionStats)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ExecutionStats>
        PARSER = new com.google.protobuf.AbstractParser<ExecutionStats>() {
      public ExecutionStats parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new ExecutionStats(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ExecuteReplyOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.ExecuteReply)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .build.remote.ExecutionStatus status = 1;</code>
     */
    boolean hasStatus();
    /**
     * <code>optional .build.remote.ExecutionStatus status = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus getStatus();
    /**
     * <code>optional .build.remote.ExecutionStatus status = 1;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatusOrBuilder getStatusOrBuilder();

    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    boolean hasResult();
    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult getResult();
    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder getResultOrBuilder();

    /**
     * <pre>
     * Filled by the server on Execution Cache hit.
     * </pre>
     *
     * <code>optional bool cached_result = 3;</code>
     */
    boolean getCachedResult();

    /**
     * <code>optional .build.remote.ExecutionStats execution_stats = 4;</code>
     */
    boolean hasExecutionStats();
    /**
     * <code>optional .build.remote.ExecutionStats execution_stats = 4;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats getExecutionStats();
    /**
     * <code>optional .build.remote.ExecutionStats execution_stats = 4;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatsOrBuilder getExecutionStatsOrBuilder();

    /**
     * <pre>
     * A possible server-side CAS error, e.g. missing
     * </pre>
     *
     * <code>optional .build.remote.CasStatus cas_error = 5;</code>
     */
    boolean hasCasError();
    /**
     * <pre>
     * A possible server-side CAS error, e.g. missing
     * </pre>
     *
     * <code>optional .build.remote.CasStatus cas_error = 5;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getCasError();
    /**
     * <pre>
     * A possible server-side CAS error, e.g. missing
     * </pre>
     *
     * <code>optional .build.remote.CasStatus cas_error = 5;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getCasErrorOrBuilder();
  }
  /**
   * Protobuf type {@code build.remote.ExecuteReply}
   */
  public  static final class ExecuteReply extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.ExecuteReply)
      ExecuteReplyOrBuilder {
    // Use ExecuteReply.newBuilder() to construct.
    private ExecuteReply(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ExecuteReply() {
      cachedResult_ = false;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private ExecuteReply(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.Builder subBuilder = null;
              if (status_ != null) {
                subBuilder = status_.toBuilder();
              }
              status_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(status_);
                status_ = subBuilder.buildPartial();
              }

              break;
            }
            case 18: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder subBuilder = null;
              if (result_ != null) {
                subBuilder = result_.toBuilder();
              }
              result_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(result_);
                result_ = subBuilder.buildPartial();
              }

              break;
            }
            case 24: {

              cachedResult_ = input.readBool();
              break;
            }
            case 34: {
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.Builder subBuilder = null;
              if (executionStats_ != null) {
                subBuilder = executionStats_.toBuilder();
              }
              executionStats_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(executionStats_);
                executionStats_ = subBuilder.buildPartial();
              }

              break;
            }
            case 42: {
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder subBuilder = null;
              if (casError_ != null) {
                subBuilder = casError_.toBuilder();
              }
              casError_ = input.readMessage(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(casError_);
                casError_ = subBuilder.buildPartial();
              }

              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecuteReply_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecuteReply_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply.Builder.class);
    }

    public static final int STATUS_FIELD_NUMBER = 1;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus status_;
    /**
     * <code>optional .build.remote.ExecutionStatus status = 1;</code>
     */
    public boolean hasStatus() {
      return status_ != null;
    }
    /**
     * <code>optional .build.remote.ExecutionStatus status = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus getStatus() {
      return status_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.getDefaultInstance() : status_;
    }
    /**
     * <code>optional .build.remote.ExecutionStatus status = 1;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatusOrBuilder getStatusOrBuilder() {
      return getStatus();
    }

    public static final int RESULT_FIELD_NUMBER = 2;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult result_;
    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    public boolean hasResult() {
      return result_ != null;
    }
    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult getResult() {
      return result_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.getDefaultInstance() : result_;
    }
    /**
     * <code>optional .build.remote.ActionResult result = 2;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder getResultOrBuilder() {
      return getResult();
    }

    public static final int CACHED_RESULT_FIELD_NUMBER = 3;
    private boolean cachedResult_;
    /**
     * <pre>
     * Filled by the server on Execution Cache hit.
     * </pre>
     *
     * <code>optional bool cached_result = 3;</code>
     */
    public boolean getCachedResult() {
      return cachedResult_;
    }

    public static final int EXECUTION_STATS_FIELD_NUMBER = 4;
    private com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats executionStats_;
    /**
     * <code>optional .build.remote.ExecutionStats execution_stats = 4;</code>
     */
    public boolean hasExecutionStats() {
      return executionStats_ != null;
    }
    /**
     * <code>optional .build.remote.ExecutionStats execution_stats = 4;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats getExecutionStats() {
      return executionStats_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.getDefaultInstance() : executionStats_;
    }
    /**
     * <code>optional .build.remote.ExecutionStats execution_stats = 4;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatsOrBuilder getExecutionStatsOrBuilder() {
      return getExecutionStats();
    }

    public static final int CAS_ERROR_FIELD_NUMBER = 5;
    private com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus casError_;
    /**
     * <pre>
     * A possible server-side CAS error, e.g. missing
     * </pre>
     *
     * <code>optional .build.remote.CasStatus cas_error = 5;</code>
     */
    public boolean hasCasError() {
      return casError_ != null;
    }
    /**
     * <pre>
     * A possible server-side CAS error, e.g. missing
     * </pre>
     *
     * <code>optional .build.remote.CasStatus cas_error = 5;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getCasError() {
      return casError_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : casError_;
    }
    /**
     * <pre>
     * A possible server-side CAS error, e.g. missing
     * </pre>
     *
     * <code>optional .build.remote.CasStatus cas_error = 5;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getCasErrorOrBuilder() {
      return getCasError();
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (status_ != null) {
        output.writeMessage(1, getStatus());
      }
      if (result_ != null) {
        output.writeMessage(2, getResult());
      }
      if (cachedResult_ != false) {
        output.writeBool(3, cachedResult_);
      }
      if (executionStats_ != null) {
        output.writeMessage(4, getExecutionStats());
      }
      if (casError_ != null) {
        output.writeMessage(5, getCasError());
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (status_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getStatus());
      }
      if (result_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getResult());
      }
      if (cachedResult_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, cachedResult_);
      }
      if (executionStats_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getExecutionStats());
      }
      if (casError_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getCasError());
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply other = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply) obj;

      boolean result = true;
      result = result && (hasStatus() == other.hasStatus());
      if (hasStatus()) {
        result = result && getStatus()
            .equals(other.getStatus());
      }
      result = result && (hasResult() == other.hasResult());
      if (hasResult()) {
        result = result && getResult()
            .equals(other.getResult());
      }
      result = result && (getCachedResult()
          == other.getCachedResult());
      result = result && (hasExecutionStats() == other.hasExecutionStats());
      if (hasExecutionStats()) {
        result = result && getExecutionStats()
            .equals(other.getExecutionStats());
      }
      result = result && (hasCasError() == other.hasCasError());
      if (hasCasError()) {
        result = result && getCasError()
            .equals(other.getCasError());
      }
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      if (hasStatus()) {
        hash = (37 * hash) + STATUS_FIELD_NUMBER;
        hash = (53 * hash) + getStatus().hashCode();
      }
      if (hasResult()) {
        hash = (37 * hash) + RESULT_FIELD_NUMBER;
        hash = (53 * hash) + getResult().hashCode();
      }
      hash = (37 * hash) + CACHED_RESULT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getCachedResult());
      if (hasExecutionStats()) {
        hash = (37 * hash) + EXECUTION_STATS_FIELD_NUMBER;
        hash = (53 * hash) + getExecutionStats().hashCode();
      }
      if (hasCasError()) {
        hash = (37 * hash) + CAS_ERROR_FIELD_NUMBER;
        hash = (53 * hash) + getCasError().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply 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.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply 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.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.ExecuteReply}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.ExecuteReply)
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReplyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecuteReply_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecuteReply_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        if (statusBuilder_ == null) {
          status_ = null;
        } else {
          status_ = null;
          statusBuilder_ = null;
        }
        if (resultBuilder_ == null) {
          result_ = null;
        } else {
          result_ = null;
          resultBuilder_ = null;
        }
        cachedResult_ = false;

        if (executionStatsBuilder_ == null) {
          executionStats_ = null;
        } else {
          executionStats_ = null;
          executionStatsBuilder_ = null;
        }
        if (casErrorBuilder_ == null) {
          casError_ = null;
        } else {
          casError_ = null;
          casErrorBuilder_ = null;
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecuteReply_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply result = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply(this);
        if (statusBuilder_ == null) {
          result.status_ = status_;
        } else {
          result.status_ = statusBuilder_.build();
        }
        if (resultBuilder_ == null) {
          result.result_ = result_;
        } else {
          result.result_ = resultBuilder_.build();
        }
        result.cachedResult_ = cachedResult_;
        if (executionStatsBuilder_ == null) {
          result.executionStats_ = executionStats_;
        } else {
          result.executionStats_ = executionStatsBuilder_.build();
        }
        if (casErrorBuilder_ == null) {
          result.casError_ = casError_;
        } else {
          result.casError_ = casErrorBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply.getDefaultInstance()) return this;
        if (other.hasStatus()) {
          mergeStatus(other.getStatus());
        }
        if (other.hasResult()) {
          mergeResult(other.getResult());
        }
        if (other.getCachedResult() != false) {
          setCachedResult(other.getCachedResult());
        }
        if (other.hasExecutionStats()) {
          mergeExecutionStats(other.getExecutionStats());
        }
        if (other.hasCasError()) {
          mergeCasError(other.getCasError());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus status_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatusOrBuilder> statusBuilder_;
      /**
       * <code>optional .build.remote.ExecutionStatus status = 1;</code>
       */
      public boolean hasStatus() {
        return statusBuilder_ != null || status_ != null;
      }
      /**
       * <code>optional .build.remote.ExecutionStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus getStatus() {
        if (statusBuilder_ == null) {
          return status_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.getDefaultInstance() : status_;
        } else {
          return statusBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.ExecutionStatus status = 1;</code>
       */
      public Builder setStatus(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus value) {
        if (statusBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          status_ = value;
          onChanged();
        } else {
          statusBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionStatus status = 1;</code>
       */
      public Builder setStatus(
          com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.Builder builderForValue) {
        if (statusBuilder_ == null) {
          status_ = builderForValue.build();
          onChanged();
        } else {
          statusBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionStatus status = 1;</code>
       */
      public Builder mergeStatus(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus value) {
        if (statusBuilder_ == null) {
          if (status_ != null) {
            status_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.newBuilder(status_).mergeFrom(value).buildPartial();
          } else {
            status_ = value;
          }
          onChanged();
        } else {
          statusBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionStatus status = 1;</code>
       */
      public Builder clearStatus() {
        if (statusBuilder_ == null) {
          status_ = null;
          onChanged();
        } else {
          status_ = null;
          statusBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.Builder getStatusBuilder() {
        
        onChanged();
        return getStatusFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.ExecutionStatus status = 1;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatusOrBuilder getStatusOrBuilder() {
        if (statusBuilder_ != null) {
          return statusBuilder_.getMessageOrBuilder();
        } else {
          return status_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.getDefaultInstance() : status_;
        }
      }
      /**
       * <code>optional .build.remote.ExecutionStatus status = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatusOrBuilder> 
          getStatusFieldBuilder() {
        if (statusBuilder_ == null) {
          statusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatusOrBuilder>(
                  getStatus(),
                  getParentForChildren(),
                  isClean());
          status_ = null;
        }
        return statusBuilder_;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult result_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder> resultBuilder_;
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public boolean hasResult() {
        return resultBuilder_ != null || result_ != null;
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult getResult() {
        if (resultBuilder_ == null) {
          return result_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.getDefaultInstance() : result_;
        } else {
          return resultBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public Builder setResult(com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult value) {
        if (resultBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          result_ = value;
          onChanged();
        } else {
          resultBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public Builder setResult(
          com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder builderForValue) {
        if (resultBuilder_ == null) {
          result_ = builderForValue.build();
          onChanged();
        } else {
          resultBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public Builder mergeResult(com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult value) {
        if (resultBuilder_ == null) {
          if (result_ != null) {
            result_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.newBuilder(result_).mergeFrom(value).buildPartial();
          } else {
            result_ = value;
          }
          onChanged();
        } else {
          resultBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public Builder clearResult() {
        if (resultBuilder_ == null) {
          result_ = null;
          onChanged();
        } else {
          result_ = null;
          resultBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder getResultBuilder() {
        
        onChanged();
        return getResultFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder getResultOrBuilder() {
        if (resultBuilder_ != null) {
          return resultBuilder_.getMessageOrBuilder();
        } else {
          return result_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.getDefaultInstance() : result_;
        }
      }
      /**
       * <code>optional .build.remote.ActionResult result = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder> 
          getResultFieldBuilder() {
        if (resultBuilder_ == null) {
          resultBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResult.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ActionResultOrBuilder>(
                  getResult(),
                  getParentForChildren(),
                  isClean());
          result_ = null;
        }
        return resultBuilder_;
      }

      private boolean cachedResult_ ;
      /**
       * <pre>
       * Filled by the server on Execution Cache hit.
       * </pre>
       *
       * <code>optional bool cached_result = 3;</code>
       */
      public boolean getCachedResult() {
        return cachedResult_;
      }
      /**
       * <pre>
       * Filled by the server on Execution Cache hit.
       * </pre>
       *
       * <code>optional bool cached_result = 3;</code>
       */
      public Builder setCachedResult(boolean value) {
        
        cachedResult_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Filled by the server on Execution Cache hit.
       * </pre>
       *
       * <code>optional bool cached_result = 3;</code>
       */
      public Builder clearCachedResult() {
        
        cachedResult_ = false;
        onChanged();
        return this;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats executionStats_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatsOrBuilder> executionStatsBuilder_;
      /**
       * <code>optional .build.remote.ExecutionStats execution_stats = 4;</code>
       */
      public boolean hasExecutionStats() {
        return executionStatsBuilder_ != null || executionStats_ != null;
      }
      /**
       * <code>optional .build.remote.ExecutionStats execution_stats = 4;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats getExecutionStats() {
        if (executionStatsBuilder_ == null) {
          return executionStats_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.getDefaultInstance() : executionStats_;
        } else {
          return executionStatsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .build.remote.ExecutionStats execution_stats = 4;</code>
       */
      public Builder setExecutionStats(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats value) {
        if (executionStatsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          executionStats_ = value;
          onChanged();
        } else {
          executionStatsBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionStats execution_stats = 4;</code>
       */
      public Builder setExecutionStats(
          com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.Builder builderForValue) {
        if (executionStatsBuilder_ == null) {
          executionStats_ = builderForValue.build();
          onChanged();
        } else {
          executionStatsBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionStats execution_stats = 4;</code>
       */
      public Builder mergeExecutionStats(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats value) {
        if (executionStatsBuilder_ == null) {
          if (executionStats_ != null) {
            executionStats_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.newBuilder(executionStats_).mergeFrom(value).buildPartial();
          } else {
            executionStats_ = value;
          }
          onChanged();
        } else {
          executionStatsBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionStats execution_stats = 4;</code>
       */
      public Builder clearExecutionStats() {
        if (executionStatsBuilder_ == null) {
          executionStats_ = null;
          onChanged();
        } else {
          executionStats_ = null;
          executionStatsBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionStats execution_stats = 4;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.Builder getExecutionStatsBuilder() {
        
        onChanged();
        return getExecutionStatsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .build.remote.ExecutionStats execution_stats = 4;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatsOrBuilder getExecutionStatsOrBuilder() {
        if (executionStatsBuilder_ != null) {
          return executionStatsBuilder_.getMessageOrBuilder();
        } else {
          return executionStats_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.getDefaultInstance() : executionStats_;
        }
      }
      /**
       * <code>optional .build.remote.ExecutionStats execution_stats = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatsOrBuilder> 
          getExecutionStatsFieldBuilder() {
        if (executionStatsBuilder_ == null) {
          executionStatsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStats.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatsOrBuilder>(
                  getExecutionStats(),
                  getParentForChildren(),
                  isClean());
          executionStats_ = null;
        }
        return executionStatsBuilder_;
      }

      private com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus casError_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder> casErrorBuilder_;
      /**
       * <pre>
       * A possible server-side CAS error, e.g. missing
       * </pre>
       *
       * <code>optional .build.remote.CasStatus cas_error = 5;</code>
       */
      public boolean hasCasError() {
        return casErrorBuilder_ != null || casError_ != null;
      }
      /**
       * <pre>
       * A possible server-side CAS error, e.g. missing
       * </pre>
       *
       * <code>optional .build.remote.CasStatus cas_error = 5;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus getCasError() {
        if (casErrorBuilder_ == null) {
          return casError_ == null ? com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : casError_;
        } else {
          return casErrorBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * A possible server-side CAS error, e.g. missing
       * </pre>
       *
       * <code>optional .build.remote.CasStatus cas_error = 5;</code>
       */
      public Builder setCasError(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus value) {
        if (casErrorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          casError_ = value;
          onChanged();
        } else {
          casErrorBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       * A possible server-side CAS error, e.g. missing
       * </pre>
       *
       * <code>optional .build.remote.CasStatus cas_error = 5;</code>
       */
      public Builder setCasError(
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder builderForValue) {
        if (casErrorBuilder_ == null) {
          casError_ = builderForValue.build();
          onChanged();
        } else {
          casErrorBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       * A possible server-side CAS error, e.g. missing
       * </pre>
       *
       * <code>optional .build.remote.CasStatus cas_error = 5;</code>
       */
      public Builder mergeCasError(com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus value) {
        if (casErrorBuilder_ == null) {
          if (casError_ != null) {
            casError_ =
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.newBuilder(casError_).mergeFrom(value).buildPartial();
          } else {
            casError_ = value;
          }
          onChanged();
        } else {
          casErrorBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       * A possible server-side CAS error, e.g. missing
       * </pre>
       *
       * <code>optional .build.remote.CasStatus cas_error = 5;</code>
       */
      public Builder clearCasError() {
        if (casErrorBuilder_ == null) {
          casError_ = null;
          onChanged();
        } else {
          casError_ = null;
          casErrorBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       * A possible server-side CAS error, e.g. missing
       * </pre>
       *
       * <code>optional .build.remote.CasStatus cas_error = 5;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder getCasErrorBuilder() {
        
        onChanged();
        return getCasErrorFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * A possible server-side CAS error, e.g. missing
       * </pre>
       *
       * <code>optional .build.remote.CasStatus cas_error = 5;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder getCasErrorOrBuilder() {
        if (casErrorBuilder_ != null) {
          return casErrorBuilder_.getMessageOrBuilder();
        } else {
          return casError_ == null ?
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.getDefaultInstance() : casError_;
        }
      }
      /**
       * <pre>
       * A possible server-side CAS error, e.g. missing
       * </pre>
       *
       * <code>optional .build.remote.CasStatus cas_error = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder> 
          getCasErrorFieldBuilder() {
        if (casErrorBuilder_ == null) {
          casErrorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatus.Builder, com.google.devtools.build.lib.remote.RemoteProtocol.CasStatusOrBuilder>(
                  getCasError(),
                  getParentForChildren(),
                  isClean());
          casError_ = null;
        }
        return casErrorBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.ExecuteReply)
    }

    // @@protoc_insertion_point(class_scope:build.remote.ExecuteReply)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ExecuteReply>
        PARSER = new com.google.protobuf.AbstractParser<ExecuteReply>() {
      public ExecuteReply parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new ExecuteReply(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ExecutionStatusOrBuilder extends
      // @@protoc_insertion_point(interface_extends:build.remote.ExecutionStatus)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Whether the action was executed.
     * </pre>
     *
     * <code>optional bool executed = 1;</code>
     */
    boolean getExecuted();

    /**
     * <pre>
     * Whether the action succeeded.
     * </pre>
     *
     * <code>optional bool succeeded = 2;</code>
     */
    boolean getSucceeded();

    /**
     * <code>optional .build.remote.ExecutionStatus.ErrorCode error = 3;</code>
     */
    int getErrorValue();
    /**
     * <code>optional .build.remote.ExecutionStatus.ErrorCode error = 3;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ErrorCode getError();

    /**
     * <code>optional string error_detail = 4;</code>
     */
    java.lang.String getErrorDetail();
    /**
     * <code>optional string error_detail = 4;</code>
     */
    com.google.protobuf.ByteString
        getErrorDetailBytes();

    /**
     * <pre>
     * Optionally will add more details pertaining to current stage, for example
     * time executing, or position in queue, etc.
     * </pre>
     *
     * <code>optional .build.remote.ExecutionStatus.ActionStage stage = 5;</code>
     */
    int getStageValue();
    /**
     * <pre>
     * Optionally will add more details pertaining to current stage, for example
     * time executing, or position in queue, etc.
     * </pre>
     *
     * <code>optional .build.remote.ExecutionStatus.ActionStage stage = 5;</code>
     */
    com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ActionStage getStage();
  }
  /**
   * Protobuf type {@code build.remote.ExecutionStatus}
   */
  public  static final class ExecutionStatus extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:build.remote.ExecutionStatus)
      ExecutionStatusOrBuilder {
    // Use ExecutionStatus.newBuilder() to construct.
    private ExecutionStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ExecutionStatus() {
      executed_ = false;
      succeeded_ = false;
      error_ = 0;
      errorDetail_ = "";
      stage_ = 0;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return com.google.protobuf.UnknownFieldSet.getDefaultInstance();
    }
    private ExecutionStatus(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!input.skipField(tag)) {
                done = true;
              }
              break;
            }
            case 8: {

              executed_ = input.readBool();
              break;
            }
            case 16: {

              succeeded_ = input.readBool();
              break;
            }
            case 24: {
              int rawValue = input.readEnum();

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

              errorDetail_ = s;
              break;
            }
            case 40: {
              int rawValue = input.readEnum();

              stage_ = rawValue;
              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 {
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionStatus_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionStatus_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.Builder.class);
    }

    /**
     * Protobuf enum {@code build.remote.ExecutionStatus.ErrorCode}
     */
    public enum ErrorCode
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_ERROR = 0;</code>
       */
      UNKNOWN_ERROR(0),
      /**
       * <pre>
       * Missing command digest in CAS.
       * </pre>
       *
       * <code>MISSING_COMMAND = 1;</code>
       */
      MISSING_COMMAND(1),
      /**
       * <pre>
       * Missing one of the inputs in CAS.
       * </pre>
       *
       * <code>MISSING_INPUT = 2;</code>
       */
      MISSING_INPUT(2),
      /**
       * <code>DEADLINE_EXCEEDED = 3;</code>
       */
      DEADLINE_EXCEEDED(3),
      /**
       * <pre>
       * Action returned non-zero.
       * </pre>
       *
       * <code>EXEC_FAILED = 4;</code>
       */
      EXEC_FAILED(4),
      UNRECOGNIZED(-1),
      ;

      /**
       * <code>UNKNOWN_ERROR = 0;</code>
       */
      public static final int UNKNOWN_ERROR_VALUE = 0;
      /**
       * <pre>
       * Missing command digest in CAS.
       * </pre>
       *
       * <code>MISSING_COMMAND = 1;</code>
       */
      public static final int MISSING_COMMAND_VALUE = 1;
      /**
       * <pre>
       * Missing one of the inputs in CAS.
       * </pre>
       *
       * <code>MISSING_INPUT = 2;</code>
       */
      public static final int MISSING_INPUT_VALUE = 2;
      /**
       * <code>DEADLINE_EXCEEDED = 3;</code>
       */
      public static final int DEADLINE_EXCEEDED_VALUE = 3;
      /**
       * <pre>
       * Action returned non-zero.
       * </pre>
       *
       * <code>EXEC_FAILED = 4;</code>
       */
      public static final int EXEC_FAILED_VALUE = 4;


      public final int getNumber() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalArgumentException(
              "Can't get the number of an unknown enum value.");
        }
        return value;
      }

      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ErrorCode valueOf(int value) {
        return forNumber(value);
      }

      public static ErrorCode forNumber(int value) {
        switch (value) {
          case 0: return UNKNOWN_ERROR;
          case 1: return MISSING_COMMAND;
          case 2: return MISSING_INPUT;
          case 3: return DEADLINE_EXCEEDED;
          case 4: return EXEC_FAILED;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.getDescriptor().getEnumTypes().get(0);
      }

      private static final ErrorCode[] VALUES = values();

      public static ErrorCode valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        if (desc.getIndex() == -1) {
          return UNRECOGNIZED;
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

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

      // @@protoc_insertion_point(enum_scope:build.remote.ExecutionStatus.ErrorCode)
    }

    /**
     * <pre>
     * These fields allow returning streaming statuses for the action progress.
     * </pre>
     *
     * Protobuf enum {@code build.remote.ExecutionStatus.ActionStage}
     */
    public enum ActionStage
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>UNKNOWN_STAGE = 0;</code>
       */
      UNKNOWN_STAGE(0),
      /**
       * <code>QUEUED = 1;</code>
       */
      QUEUED(1),
      /**
       * <code>EXECUTING = 2;</code>
       */
      EXECUTING(2),
      /**
       * <code>FINISHED = 3;</code>
       */
      FINISHED(3),
      UNRECOGNIZED(-1),
      ;

      /**
       * <code>UNKNOWN_STAGE = 0;</code>
       */
      public static final int UNKNOWN_STAGE_VALUE = 0;
      /**
       * <code>QUEUED = 1;</code>
       */
      public static final int QUEUED_VALUE = 1;
      /**
       * <code>EXECUTING = 2;</code>
       */
      public static final int EXECUTING_VALUE = 2;
      /**
       * <code>FINISHED = 3;</code>
       */
      public static final int FINISHED_VALUE = 3;


      public final int getNumber() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalArgumentException(
              "Can't get the number of an unknown enum value.");
        }
        return value;
      }

      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ActionStage valueOf(int value) {
        return forNumber(value);
      }

      public static ActionStage forNumber(int value) {
        switch (value) {
          case 0: return UNKNOWN_STAGE;
          case 1: return QUEUED;
          case 2: return EXECUTING;
          case 3: return FINISHED;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.getDescriptor().getEnumTypes().get(1);
      }

      private static final ActionStage[] VALUES = values();

      public static ActionStage valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        if (desc.getIndex() == -1) {
          return UNRECOGNIZED;
        }
        return VALUES[desc.getIndex()];
      }

      private final int value;

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

      // @@protoc_insertion_point(enum_scope:build.remote.ExecutionStatus.ActionStage)
    }

    public static final int EXECUTED_FIELD_NUMBER = 1;
    private boolean executed_;
    /**
     * <pre>
     * Whether the action was executed.
     * </pre>
     *
     * <code>optional bool executed = 1;</code>
     */
    public boolean getExecuted() {
      return executed_;
    }

    public static final int SUCCEEDED_FIELD_NUMBER = 2;
    private boolean succeeded_;
    /**
     * <pre>
     * Whether the action succeeded.
     * </pre>
     *
     * <code>optional bool succeeded = 2;</code>
     */
    public boolean getSucceeded() {
      return succeeded_;
    }

    public static final int ERROR_FIELD_NUMBER = 3;
    private int error_;
    /**
     * <code>optional .build.remote.ExecutionStatus.ErrorCode error = 3;</code>
     */
    public int getErrorValue() {
      return error_;
    }
    /**
     * <code>optional .build.remote.ExecutionStatus.ErrorCode error = 3;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ErrorCode getError() {
      com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ErrorCode result = com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ErrorCode.valueOf(error_);
      return result == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ErrorCode.UNRECOGNIZED : result;
    }

    public static final int ERROR_DETAIL_FIELD_NUMBER = 4;
    private volatile java.lang.Object errorDetail_;
    /**
     * <code>optional string error_detail = 4;</code>
     */
    public java.lang.String getErrorDetail() {
      java.lang.Object ref = errorDetail_;
      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();
        errorDetail_ = s;
        return s;
      }
    }
    /**
     * <code>optional string error_detail = 4;</code>
     */
    public com.google.protobuf.ByteString
        getErrorDetailBytes() {
      java.lang.Object ref = errorDetail_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        errorDetail_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int STAGE_FIELD_NUMBER = 5;
    private int stage_;
    /**
     * <pre>
     * Optionally will add more details pertaining to current stage, for example
     * time executing, or position in queue, etc.
     * </pre>
     *
     * <code>optional .build.remote.ExecutionStatus.ActionStage stage = 5;</code>
     */
    public int getStageValue() {
      return stage_;
    }
    /**
     * <pre>
     * Optionally will add more details pertaining to current stage, for example
     * time executing, or position in queue, etc.
     * </pre>
     *
     * <code>optional .build.remote.ExecutionStatus.ActionStage stage = 5;</code>
     */
    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ActionStage getStage() {
      com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ActionStage result = com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ActionStage.valueOf(stage_);
      return result == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ActionStage.UNRECOGNIZED : result;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (executed_ != false) {
        output.writeBool(1, executed_);
      }
      if (succeeded_ != false) {
        output.writeBool(2, succeeded_);
      }
      if (error_ != com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ErrorCode.UNKNOWN_ERROR.getNumber()) {
        output.writeEnum(3, error_);
      }
      if (!getErrorDetailBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, errorDetail_);
      }
      if (stage_ != com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ActionStage.UNKNOWN_STAGE.getNumber()) {
        output.writeEnum(5, stage_);
      }
    }

    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (executed_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, executed_);
      }
      if (succeeded_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, succeeded_);
      }
      if (error_ != com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ErrorCode.UNKNOWN_ERROR.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, error_);
      }
      if (!getErrorDetailBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, errorDetail_);
      }
      if (stage_ != com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ActionStage.UNKNOWN_STAGE.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(5, stage_);
      }
      memoizedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus other = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus) obj;

      boolean result = true;
      result = result && (getExecuted()
          == other.getExecuted());
      result = result && (getSucceeded()
          == other.getSucceeded());
      result = result && error_ == other.error_;
      result = result && getErrorDetail()
          .equals(other.getErrorDetail());
      result = result && stage_ == other.stage_;
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptorForType().hashCode();
      hash = (37 * hash) + EXECUTED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getExecuted());
      hash = (37 * hash) + SUCCEEDED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getSucceeded());
      hash = (37 * hash) + ERROR_FIELD_NUMBER;
      hash = (53 * hash) + error_;
      hash = (37 * hash) + ERROR_DETAIL_FIELD_NUMBER;
      hash = (53 * hash) + getErrorDetail().hashCode();
      hash = (37 * hash) + STAGE_FIELD_NUMBER;
      hash = (53 * hash) + stage_;
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus 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.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus 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.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 build.remote.ExecutionStatus}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:build.remote.ExecutionStatus)
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatusOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionStatus_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionStatus_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.class, com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        executed_ = false;

        succeeded_ = false;

        error_ = 0;

        errorDetail_ = "";

        stage_ = 0;

        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.internal_static_build_remote_ExecutionStatus_descriptor;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus getDefaultInstanceForType() {
        return com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.getDefaultInstance();
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus build() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus buildPartial() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus result = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus(this);
        result.executed_ = executed_;
        result.succeeded_ = succeeded_;
        result.error_ = error_;
        result.errorDetail_ = errorDetail_;
        result.stage_ = stage_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus) {
          return mergeFrom((com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus other) {
        if (other == com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.getDefaultInstance()) return this;
        if (other.getExecuted() != false) {
          setExecuted(other.getExecuted());
        }
        if (other.getSucceeded() != false) {
          setSucceeded(other.getSucceeded());
        }
        if (other.error_ != 0) {
          setErrorValue(other.getErrorValue());
        }
        if (!other.getErrorDetail().isEmpty()) {
          errorDetail_ = other.errorDetail_;
          onChanged();
        }
        if (other.stage_ != 0) {
          setStageValue(other.getStageValue());
        }
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private boolean executed_ ;
      /**
       * <pre>
       * Whether the action was executed.
       * </pre>
       *
       * <code>optional bool executed = 1;</code>
       */
      public boolean getExecuted() {
        return executed_;
      }
      /**
       * <pre>
       * Whether the action was executed.
       * </pre>
       *
       * <code>optional bool executed = 1;</code>
       */
      public Builder setExecuted(boolean value) {
        
        executed_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether the action was executed.
       * </pre>
       *
       * <code>optional bool executed = 1;</code>
       */
      public Builder clearExecuted() {
        
        executed_ = false;
        onChanged();
        return this;
      }

      private boolean succeeded_ ;
      /**
       * <pre>
       * Whether the action succeeded.
       * </pre>
       *
       * <code>optional bool succeeded = 2;</code>
       */
      public boolean getSucceeded() {
        return succeeded_;
      }
      /**
       * <pre>
       * Whether the action succeeded.
       * </pre>
       *
       * <code>optional bool succeeded = 2;</code>
       */
      public Builder setSucceeded(boolean value) {
        
        succeeded_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether the action succeeded.
       * </pre>
       *
       * <code>optional bool succeeded = 2;</code>
       */
      public Builder clearSucceeded() {
        
        succeeded_ = false;
        onChanged();
        return this;
      }

      private int error_ = 0;
      /**
       * <code>optional .build.remote.ExecutionStatus.ErrorCode error = 3;</code>
       */
      public int getErrorValue() {
        return error_;
      }
      /**
       * <code>optional .build.remote.ExecutionStatus.ErrorCode error = 3;</code>
       */
      public Builder setErrorValue(int value) {
        error_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionStatus.ErrorCode error = 3;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ErrorCode getError() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ErrorCode result = com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ErrorCode.valueOf(error_);
        return result == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ErrorCode.UNRECOGNIZED : result;
      }
      /**
       * <code>optional .build.remote.ExecutionStatus.ErrorCode error = 3;</code>
       */
      public Builder setError(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ErrorCode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        error_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .build.remote.ExecutionStatus.ErrorCode error = 3;</code>
       */
      public Builder clearError() {
        
        error_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object errorDetail_ = "";
      /**
       * <code>optional string error_detail = 4;</code>
       */
      public java.lang.String getErrorDetail() {
        java.lang.Object ref = errorDetail_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          errorDetail_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string error_detail = 4;</code>
       */
      public com.google.protobuf.ByteString
          getErrorDetailBytes() {
        java.lang.Object ref = errorDetail_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          errorDetail_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string error_detail = 4;</code>
       */
      public Builder setErrorDetail(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        errorDetail_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string error_detail = 4;</code>
       */
      public Builder clearErrorDetail() {
        
        errorDetail_ = getDefaultInstance().getErrorDetail();
        onChanged();
        return this;
      }
      /**
       * <code>optional string error_detail = 4;</code>
       */
      public Builder setErrorDetailBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        errorDetail_ = value;
        onChanged();
        return this;
      }

      private int stage_ = 0;
      /**
       * <pre>
       * Optionally will add more details pertaining to current stage, for example
       * time executing, or position in queue, etc.
       * </pre>
       *
       * <code>optional .build.remote.ExecutionStatus.ActionStage stage = 5;</code>
       */
      public int getStageValue() {
        return stage_;
      }
      /**
       * <pre>
       * Optionally will add more details pertaining to current stage, for example
       * time executing, or position in queue, etc.
       * </pre>
       *
       * <code>optional .build.remote.ExecutionStatus.ActionStage stage = 5;</code>
       */
      public Builder setStageValue(int value) {
        stage_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Optionally will add more details pertaining to current stage, for example
       * time executing, or position in queue, etc.
       * </pre>
       *
       * <code>optional .build.remote.ExecutionStatus.ActionStage stage = 5;</code>
       */
      public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ActionStage getStage() {
        com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ActionStage result = com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ActionStage.valueOf(stage_);
        return result == null ? com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ActionStage.UNRECOGNIZED : result;
      }
      /**
       * <pre>
       * Optionally will add more details pertaining to current stage, for example
       * time executing, or position in queue, etc.
       * </pre>
       *
       * <code>optional .build.remote.ExecutionStatus.ActionStage stage = 5;</code>
       */
      public Builder setStage(com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus.ActionStage value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        stage_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Optionally will add more details pertaining to current stage, for example
       * time executing, or position in queue, etc.
       * </pre>
       *
       * <code>optional .build.remote.ExecutionStatus.ActionStage stage = 5;</code>
       */
      public Builder clearStage() {
        
        stage_ = 0;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }

      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return this;
      }


      // @@protoc_insertion_point(builder_scope:build.remote.ExecutionStatus)
    }

    // @@protoc_insertion_point(class_scope:build.remote.ExecutionStatus)
    private static final com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus();
    }

    public static com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ExecutionStatus>
        PARSER = new com.google.protobuf.AbstractParser<ExecutionStatus>() {
      public ExecutionStatus parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
          return new ExecutionStatus(input, extensionRegistry);
      }
    };

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

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

    public com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionStatus getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_ContentDigest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_ContentDigest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_FileMetadata_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_FileMetadata_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_Platform_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_Platform_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_Action_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_Action_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_Command_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_Command_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_Command_EnvironmentEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_Command_EnvironmentEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_Output_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_Output_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_ActionResult_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_ActionResult_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_CasStatus_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_CasStatus_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_FileNode_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_FileNode_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_FileNode_Child_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_FileNode_Child_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_CasLookupRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_CasLookupRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_CasLookupReply_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_CasLookupReply_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_CasUploadTreeMetadataRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_CasUploadTreeMetadataRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_CasUploadTreeMetadataReply_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_CasUploadTreeMetadataReply_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_CasDownloadTreeMetadataRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_CasDownloadTreeMetadataRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_CasDownloadTreeMetadataReply_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_CasDownloadTreeMetadataReply_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_BlobChunk_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_BlobChunk_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_CasUploadBlobRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_CasUploadBlobRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_CasUploadBlobReply_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_CasUploadBlobReply_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_CasDownloadTreeRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_CasDownloadTreeRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_CasDownloadReply_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_CasDownloadReply_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_CasDownloadBlobRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_CasDownloadBlobRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_ExecutionCacheRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_ExecutionCacheRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_ExecutionCacheStatus_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_ExecutionCacheStatus_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_ExecutionCacheReply_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_ExecutionCacheReply_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_ExecutionCacheSetRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_ExecutionCacheSetRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_ExecutionCacheSetReply_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_ExecutionCacheSetReply_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_ExecuteRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_ExecuteRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_BuildInfo_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_BuildInfo_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_ExecutionStats_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_ExecutionStats_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_ExecuteReply_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_ExecuteReply_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_build_remote_ExecutionStatus_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_build_remote_ExecutionStatus_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~bazel-out/local-fastbuild/bin/src/main" +
      "/protobuf/libremote_protocol_java_proto_" +
      "srcjar.srcjar.preprocessed/remote_protoc" +
      "ol.proto\022\014build.remote\"D\n\rContentDigest\022" +
      "\016\n\006digest\030\001 \001(\014\022\022\n\nsize_bytes\030\002 \001(\003\022\017\n\007v" +
      "ersion\030\003 \001(\005\"O\n\014FileMetadata\022+\n\006digest\030\001" +
      " \001(\0132\033.build.remote.ContentDigest\022\022\n\nexe" +
      "cutable\030\003 \001(\010\"\n\n\010Platform\"\264\001\n\006Action\0223\n\016" +
      "command_digest\030\001 \001(\0132\033.build.remote.Cont" +
      "entDigest\0226\n\021input_root_digest\030\002 \001(\0132\033.b",
      "uild.remote.ContentDigest\022\023\n\013output_path" +
      "\030\004 \003(\t\022(\n\010platform\030\005 \001(\0132\026.build.remote." +
      "Platform\"\211\001\n\007Command\022\014\n\004argv\030\001 \003(\t\022;\n\013en" +
      "vironment\030\002 \003(\0132&.build.remote.Command.E" +
      "nvironmentEntry\0323\n\020EnvironmentEntry\022\020\n\010v" +
      "ariable\030\001 \001(\t\022\r\n\005value\030\002 \001(\t\"\205\001\n\006Output\022" +
      "\014\n\004path\030\001 \001(\t\022-\n\006digest\030\002 \001(\0132\033.build.re" +
      "mote.ContentDigestH\000\0223\n\rfile_metadata\030\003 " +
      "\001(\0132\032.build.remote.FileMetadataH\000B\t\n\007con" +
      "tent\"\261\001\n\014ActionResult\022$\n\006output\030\001 \003(\0132\024.",
      "build.remote.Output\022\023\n\013return_code\030\002 \001(\005" +
      "\0222\n\rstdout_digest\030\003 \001(\0132\033.build.remote.C" +
      "ontentDigest\0222\n\rstderr_digest\030\004 \001(\0132\033.bu" +
      "ild.remote.ContentDigest\"\304\002\n\tCasStatus\022\021" +
      "\n\tsucceeded\030\001 \001(\010\0220\n\005error\030\002 \001(\0162!.build" +
      ".remote.CasStatus.ErrorCode\022\024\n\014error_det" +
      "ail\030\003 \001(\t\0223\n\016missing_digest\030\004 \003(\0132\033.buil" +
      "d.remote.ContentDigest\0228\n\023parse_failed_d" +
      "igest\030\005 \003(\0132\033.build.remote.ContentDigest" +
      "\"m\n\tErrorCode\022\013\n\007UNKNOWN\020\000\022\024\n\020INVALID_AR",
      "GUMENT\020\001\022\022\n\016MISSING_DIGEST\020\002\022\023\n\017DIGEST_M" +
      "ISMATCH\020\003\022\024\n\020NODE_PARSE_ERROR\020\004\"\256\001\n\010File" +
      "Node\0221\n\rfile_metadata\030\001 \001(\0132\032.build.remo" +
      "te.FileMetadata\022+\n\005child\030\002 \003(\0132\034.build.r" +
      "emote.FileNode.Child\032B\n\005Child\022\014\n\004path\030\001 " +
      "\001(\t\022+\n\006digest\030\002 \001(\0132\033.build.remote.Conte" +
      "ntDigest\"?\n\020CasLookupRequest\022+\n\006digest\030\001" +
      " \003(\0132\033.build.remote.ContentDigest\"9\n\016Cas" +
      "LookupReply\022\'\n\006status\030\001 \001(\0132\027.build.remo" +
      "te.CasStatus\"I\n\034CasUploadTreeMetadataReq",
      "uest\022)\n\ttree_node\030\001 \003(\0132\026.build.remote.F" +
      "ileNode\"E\n\032CasUploadTreeMetadataReply\022\'\n" +
      "\006status\030\001 \001(\0132\027.build.remote.CasStatus\"K" +
      "\n\036CasDownloadTreeMetadataRequest\022)\n\004root" +
      "\030\001 \001(\0132\033.build.remote.ContentDigest\"r\n\034C" +
      "asDownloadTreeMetadataReply\022\'\n\006status\030\001 " +
      "\001(\0132\027.build.remote.CasStatus\022)\n\ttree_nod" +
      "e\030\002 \003(\0132\026.build.remote.FileNode\"V\n\tBlobC" +
      "hunk\022+\n\006digest\030\001 \001(\0132\033.build.remote.Cont" +
      "entDigest\022\016\n\006offset\030\002 \001(\003\022\014\n\004data\030\003 \001(\014\"",
      "=\n\024CasUploadBlobRequest\022%\n\004data\030\001 \001(\0132\027." +
      "build.remote.BlobChunk\"=\n\022CasUploadBlobR" +
      "eply\022\'\n\006status\030\001 \001(\0132\027.build.remote.CasS" +
      "tatus\"J\n\026CasDownloadTreeRequest\0220\n\013root_" +
      "digest\030\001 \001(\0132\033.build.remote.ContentDiges" +
      "t\"b\n\020CasDownloadReply\022\'\n\006status\030\001 \001(\0132\027." +
      "build.remote.CasStatus\022%\n\004data\030\002 \001(\0132\027.b" +
      "uild.remote.BlobChunk\"E\n\026CasDownloadBlob" +
      "Request\022+\n\006digest\030\001 \003(\0132\033.build.remote.C" +
      "ontentDigest\"K\n\025ExecutionCacheRequest\0222\n",
      "\raction_digest\030\001 \001(\0132\033.build.remote.Cont" +
      "entDigest\"\273\001\n\024ExecutionCacheStatus\022\021\n\tsu" +
      "cceeded\030\001 \001(\010\022;\n\005error\030\002 \001(\0162,.build.rem" +
      "ote.ExecutionCacheStatus.ErrorCode\022\024\n\014er" +
      "ror_detail\030\003 \001(\t\"=\n\tErrorCode\022\013\n\007UNKNOWN" +
      "\020\000\022\022\n\016MISSING_RESULT\020\001\022\017\n\013UNSUPPORTED\020\002\"" +
      "u\n\023ExecutionCacheReply\0222\n\006status\030\001 \001(\0132\"" +
      ".build.remote.ExecutionCacheStatus\022*\n\006re" +
      "sult\030\002 \001(\0132\032.build.remote.ActionResult\"z" +
      "\n\030ExecutionCacheSetRequest\0222\n\raction_dig",
      "est\030\001 \001(\0132\033.build.remote.ContentDigest\022*" +
      "\n\006result\030\002 \001(\0132\032.build.remote.ActionResu" +
      "lt\"L\n\026ExecutionCacheSetReply\0222\n\006status\030\001" +
      " \001(\0132\".build.remote.ExecutionCacheStatus" +
      "\"\322\001\n\016ExecuteRequest\022$\n\006action\030\001 \001(\0132\024.bu" +
      "ild.remote.Action\022\025\n\raccept_cached\030\002 \001(\010" +
      "\022\036\n\026total_input_file_count\030\003 \001(\005\022\036\n\026tota" +
      "l_input_file_bytes\030\004 \001(\003\022+\n\nbuild_info\030\005" +
      " \001(\0132\027.build.remote.BuildInfo\022\026\n\016timeout" +
      "_millis\030\006 \001(\003\"\035\n\tBuildInfo\022\020\n\010build_id\030\001",
      " \001(\t\"\020\n\016ExecutionStats\"\343\001\n\014ExecuteReply\022" +
      "-\n\006status\030\001 \001(\0132\035.build.remote.Execution" +
      "Status\022*\n\006result\030\002 \001(\0132\032.build.remote.Ac" +
      "tionResult\022\025\n\rcached_result\030\003 \001(\010\0225\n\017exe" +
      "cution_stats\030\004 \001(\0132\034.build.remote.Execut" +
      "ionStats\022*\n\tcas_error\030\005 \001(\0132\027.build.remo" +
      "te.CasStatus\"\371\002\n\017ExecutionStatus\022\020\n\010exec" +
      "uted\030\001 \001(\010\022\021\n\tsucceeded\030\002 \001(\010\0226\n\005error\030\003" +
      " \001(\0162\'.build.remote.ExecutionStatus.Erro" +
      "rCode\022\024\n\014error_detail\030\004 \001(\t\0228\n\005stage\030\005 \001",
      "(\0162).build.remote.ExecutionStatus.Action" +
      "Stage\"n\n\tErrorCode\022\021\n\rUNKNOWN_ERROR\020\000\022\023\n" +
      "\017MISSING_COMMAND\020\001\022\021\n\rMISSING_INPUT\020\002\022\025\n" +
      "\021DEADLINE_EXCEEDED\020\003\022\017\n\013EXEC_FAILED\020\004\"I\n" +
      "\013ActionStage\022\021\n\rUNKNOWN_STAGE\020\000\022\n\n\006QUEUE" +
      "D\020\001\022\r\n\tEXECUTING\020\002\022\014\n\010FINISHED\020\0032\304\004\n\nCas" +
      "Service\022H\n\006Lookup\022\036.build.remote.CasLook" +
      "upRequest\032\034.build.remote.CasLookupReply\"" +
      "\000\022l\n\022UploadTreeMetadata\022*.build.remote.C" +
      "asUploadTreeMetadataRequest\032(.build.remo",
      "te.CasUploadTreeMetadataReply\"\000\022V\n\nUploa" +
      "dBlob\022\".build.remote.CasUploadBlobReques" +
      "t\032 .build.remote.CasUploadBlobReply\"\000(\001\022" +
      "r\n\024DownloadTreeMetadata\022,.build.remote.C" +
      "asDownloadTreeMetadataRequest\032*.build.re" +
      "mote.CasDownloadTreeMetadataReply\"\000\022X\n\014D" +
      "ownloadTree\022$.build.remote.CasDownloadTr" +
      "eeRequest\032\036.build.remote.CasDownloadRepl" +
      "y\"\0000\001\022X\n\014DownloadBlob\022$.build.remote.Cas" +
      "DownloadBlobRequest\032\036.build.remote.CasDo",
      "wnloadReply\"\0000\0012\327\001\n\025ExecutionCacheServic" +
      "e\022[\n\017GetCachedResult\022#.build.remote.Exec" +
      "utionCacheRequest\032!.build.remote.Executi" +
      "onCacheReply\"\000\022a\n\017SetCachedResult\022&.buil" +
      "d.remote.ExecutionCacheSetRequest\032$.buil" +
      "d.remote.ExecutionCacheSetReply\"\0002Y\n\016Exe" +
      "cuteService\022G\n\007Execute\022\034.build.remote.Ex" +
      "ecuteRequest\032\032.build.remote.ExecuteReply" +
      "\"\0000\001B&\n$com.google.devtools.build.lib.re" +
      "moteb\006proto3"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
          public com.google.protobuf.ExtensionRegistry assignDescriptors(
              com.google.protobuf.Descriptors.FileDescriptor root) {
            descriptor = root;
            return null;
          }
        };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        }, assigner);
    internal_static_build_remote_ContentDigest_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_build_remote_ContentDigest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_ContentDigest_descriptor,
        new java.lang.String[] { "Digest", "SizeBytes", "Version", });
    internal_static_build_remote_FileMetadata_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_build_remote_FileMetadata_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_FileMetadata_descriptor,
        new java.lang.String[] { "Digest", "Executable", });
    internal_static_build_remote_Platform_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_build_remote_Platform_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_Platform_descriptor,
        new java.lang.String[] { });
    internal_static_build_remote_Action_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_build_remote_Action_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_Action_descriptor,
        new java.lang.String[] { "CommandDigest", "InputRootDigest", "OutputPath", "Platform", });
    internal_static_build_remote_Command_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_build_remote_Command_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_Command_descriptor,
        new java.lang.String[] { "Argv", "Environment", });
    internal_static_build_remote_Command_EnvironmentEntry_descriptor =
      internal_static_build_remote_Command_descriptor.getNestedTypes().get(0);
    internal_static_build_remote_Command_EnvironmentEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_Command_EnvironmentEntry_descriptor,
        new java.lang.String[] { "Variable", "Value", });
    internal_static_build_remote_Output_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_build_remote_Output_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_Output_descriptor,
        new java.lang.String[] { "Path", "Digest", "FileMetadata", "Content", });
    internal_static_build_remote_ActionResult_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_build_remote_ActionResult_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_ActionResult_descriptor,
        new java.lang.String[] { "Output", "ReturnCode", "StdoutDigest", "StderrDigest", });
    internal_static_build_remote_CasStatus_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_build_remote_CasStatus_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_CasStatus_descriptor,
        new java.lang.String[] { "Succeeded", "Error", "ErrorDetail", "MissingDigest", "ParseFailedDigest", });
    internal_static_build_remote_FileNode_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_build_remote_FileNode_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_FileNode_descriptor,
        new java.lang.String[] { "FileMetadata", "Child", });
    internal_static_build_remote_FileNode_Child_descriptor =
      internal_static_build_remote_FileNode_descriptor.getNestedTypes().get(0);
    internal_static_build_remote_FileNode_Child_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_FileNode_Child_descriptor,
        new java.lang.String[] { "Path", "Digest", });
    internal_static_build_remote_CasLookupRequest_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_build_remote_CasLookupRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_CasLookupRequest_descriptor,
        new java.lang.String[] { "Digest", });
    internal_static_build_remote_CasLookupReply_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_build_remote_CasLookupReply_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_CasLookupReply_descriptor,
        new java.lang.String[] { "Status", });
    internal_static_build_remote_CasUploadTreeMetadataRequest_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_build_remote_CasUploadTreeMetadataRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_CasUploadTreeMetadataRequest_descriptor,
        new java.lang.String[] { "TreeNode", });
    internal_static_build_remote_CasUploadTreeMetadataReply_descriptor =
      getDescriptor().getMessageTypes().get(12);
    internal_static_build_remote_CasUploadTreeMetadataReply_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_CasUploadTreeMetadataReply_descriptor,
        new java.lang.String[] { "Status", });
    internal_static_build_remote_CasDownloadTreeMetadataRequest_descriptor =
      getDescriptor().getMessageTypes().get(13);
    internal_static_build_remote_CasDownloadTreeMetadataRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_CasDownloadTreeMetadataRequest_descriptor,
        new java.lang.String[] { "Root", });
    internal_static_build_remote_CasDownloadTreeMetadataReply_descriptor =
      getDescriptor().getMessageTypes().get(14);
    internal_static_build_remote_CasDownloadTreeMetadataReply_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_CasDownloadTreeMetadataReply_descriptor,
        new java.lang.String[] { "Status", "TreeNode", });
    internal_static_build_remote_BlobChunk_descriptor =
      getDescriptor().getMessageTypes().get(15);
    internal_static_build_remote_BlobChunk_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_BlobChunk_descriptor,
        new java.lang.String[] { "Digest", "Offset", "Data", });
    internal_static_build_remote_CasUploadBlobRequest_descriptor =
      getDescriptor().getMessageTypes().get(16);
    internal_static_build_remote_CasUploadBlobRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_CasUploadBlobRequest_descriptor,
        new java.lang.String[] { "Data", });
    internal_static_build_remote_CasUploadBlobReply_descriptor =
      getDescriptor().getMessageTypes().get(17);
    internal_static_build_remote_CasUploadBlobReply_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_CasUploadBlobReply_descriptor,
        new java.lang.String[] { "Status", });
    internal_static_build_remote_CasDownloadTreeRequest_descriptor =
      getDescriptor().getMessageTypes().get(18);
    internal_static_build_remote_CasDownloadTreeRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_CasDownloadTreeRequest_descriptor,
        new java.lang.String[] { "RootDigest", });
    internal_static_build_remote_CasDownloadReply_descriptor =
      getDescriptor().getMessageTypes().get(19);
    internal_static_build_remote_CasDownloadReply_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_CasDownloadReply_descriptor,
        new java.lang.String[] { "Status", "Data", });
    internal_static_build_remote_CasDownloadBlobRequest_descriptor =
      getDescriptor().getMessageTypes().get(20);
    internal_static_build_remote_CasDownloadBlobRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_CasDownloadBlobRequest_descriptor,
        new java.lang.String[] { "Digest", });
    internal_static_build_remote_ExecutionCacheRequest_descriptor =
      getDescriptor().getMessageTypes().get(21);
    internal_static_build_remote_ExecutionCacheRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_ExecutionCacheRequest_descriptor,
        new java.lang.String[] { "ActionDigest", });
    internal_static_build_remote_ExecutionCacheStatus_descriptor =
      getDescriptor().getMessageTypes().get(22);
    internal_static_build_remote_ExecutionCacheStatus_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_ExecutionCacheStatus_descriptor,
        new java.lang.String[] { "Succeeded", "Error", "ErrorDetail", });
    internal_static_build_remote_ExecutionCacheReply_descriptor =
      getDescriptor().getMessageTypes().get(23);
    internal_static_build_remote_ExecutionCacheReply_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_ExecutionCacheReply_descriptor,
        new java.lang.String[] { "Status", "Result", });
    internal_static_build_remote_ExecutionCacheSetRequest_descriptor =
      getDescriptor().getMessageTypes().get(24);
    internal_static_build_remote_ExecutionCacheSetRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_ExecutionCacheSetRequest_descriptor,
        new java.lang.String[] { "ActionDigest", "Result", });
    internal_static_build_remote_ExecutionCacheSetReply_descriptor =
      getDescriptor().getMessageTypes().get(25);
    internal_static_build_remote_ExecutionCacheSetReply_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_ExecutionCacheSetReply_descriptor,
        new java.lang.String[] { "Status", });
    internal_static_build_remote_ExecuteRequest_descriptor =
      getDescriptor().getMessageTypes().get(26);
    internal_static_build_remote_ExecuteRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_ExecuteRequest_descriptor,
        new java.lang.String[] { "Action", "AcceptCached", "TotalInputFileCount", "TotalInputFileBytes", "BuildInfo", "TimeoutMillis", });
    internal_static_build_remote_BuildInfo_descriptor =
      getDescriptor().getMessageTypes().get(27);
    internal_static_build_remote_BuildInfo_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_BuildInfo_descriptor,
        new java.lang.String[] { "BuildId", });
    internal_static_build_remote_ExecutionStats_descriptor =
      getDescriptor().getMessageTypes().get(28);
    internal_static_build_remote_ExecutionStats_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_ExecutionStats_descriptor,
        new java.lang.String[] { });
    internal_static_build_remote_ExecuteReply_descriptor =
      getDescriptor().getMessageTypes().get(29);
    internal_static_build_remote_ExecuteReply_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_ExecuteReply_descriptor,
        new java.lang.String[] { "Status", "Result", "CachedResult", "ExecutionStats", "CasError", });
    internal_static_build_remote_ExecutionStatus_descriptor =
      getDescriptor().getMessageTypes().get(30);
    internal_static_build_remote_ExecutionStatus_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_build_remote_ExecutionStatus_descriptor,
        new java.lang.String[] { "Executed", "Succeeded", "Error", "ErrorDetail", "Stage", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
