content: package com.alexhulbert.icewind;
  
  // Generated by the protocol buffer compiler.  DO NOT EDIT!
  // source: protobuf.proto
  
  public final class Protocol {
    private Protocol() {}
    public static void registerAllExtensions(
        com.google.protobuf.ExtensionRegistry registry) {
    }
    public interface DeviceUdidsOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required string psid = 1;
      /**
       * <code>required string psid = 1;</code>
       */
      boolean hasPsid();
      /**
       * <code>required string psid = 1;</code>
       */
      java.lang.String getPsid();
      /**
       * <code>required string psid = 1;</code>
       */
      com.google.protobuf.ByteString
          getPsidBytes();
  
      // repeated bytes udids = 2;
      /**
       * <code>repeated bytes udids = 2;</code>
       */
      java.util.List<com.google.protobuf.ByteString> getUdidsList();
      /**
       * <code>repeated bytes udids = 2;</code>
       */
      int getUdidsCount();
      /**
       * <code>repeated bytes udids = 2;</code>
       */
      com.google.protobuf.ByteString getUdids(int index);
  
      // optional bool usuallyFalse = 3;
      /**
       * <code>optional bool usuallyFalse = 3;</code>
       */
      boolean hasUsuallyFalse();
      /**
       * <code>optional bool usuallyFalse = 3;</code>
       */
      boolean getUsuallyFalse();
    }
    /**
     * Protobuf type {@code DeviceUdids}
     */
    public static final class DeviceUdids extends
        com.google.protobuf.GeneratedMessage
        implements DeviceUdidsOrBuilder {
      // Use DeviceUdids.newBuilder() to construct.
      private DeviceUdids(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private DeviceUdids(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final DeviceUdids defaultInstance;
      public static DeviceUdids getDefaultInstance() {
        return defaultInstance;
      }
  
      public DeviceUdids getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private DeviceUdids(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                psid_ = input.readBytes();
                break;
              }
              case 18: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  udids_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
                  mutable_bitField0_ |= 0x00000002;
                }
                udids_.add(input.readBytes());
                break;
              }
              case 24: {
                bitField0_ |= 0x00000002;
                usuallyFalse_ = 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.getMessage()).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
            udids_ = java.util.Collections.unmodifiableList(udids_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_DeviceUdids_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_DeviceUdids_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.DeviceUdids.class, Protocol.DeviceUdids.Builder.class);
      }
  
      public static com.google.protobuf.Parser<DeviceUdids> PARSER =
          new com.google.protobuf.AbstractParser<DeviceUdids>() {
        public DeviceUdids parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new DeviceUdids(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<DeviceUdids> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required string psid = 1;
      public static final int PSID_FIELD_NUMBER = 1;
      private java.lang.Object psid_;
      /**
       * <code>required string psid = 1;</code>
       */
      public boolean hasPsid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required string psid = 1;</code>
       */
      public java.lang.String getPsid() {
        java.lang.Object ref = psid_;
        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();
          if (bs.isValidUtf8()) {
            psid_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string psid = 1;</code>
       */
      public com.google.protobuf.ByteString
          getPsidBytes() {
        java.lang.Object ref = psid_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          psid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // repeated bytes udids = 2;
      public static final int UDIDS_FIELD_NUMBER = 2;
      private java.util.List<com.google.protobuf.ByteString> udids_;
      /**
       * <code>repeated bytes udids = 2;</code>
       */
      public java.util.List<com.google.protobuf.ByteString>
          getUdidsList() {
        return udids_;
      }
      /**
       * <code>repeated bytes udids = 2;</code>
       */
      public int getUdidsCount() {
        return udids_.size();
      }
      /**
       * <code>repeated bytes udids = 2;</code>
       */
      public com.google.protobuf.ByteString getUdids(int index) {
        return udids_.get(index);
      }
  
      // optional bool usuallyFalse = 3;
      public static final int USUALLYFALSE_FIELD_NUMBER = 3;
      private boolean usuallyFalse_;
      /**
       * <code>optional bool usuallyFalse = 3;</code>
       */
      public boolean hasUsuallyFalse() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bool usuallyFalse = 3;</code>
       */
      public boolean getUsuallyFalse() {
        return usuallyFalse_;
      }
  
      private void initFields() {
        psid_ = "";
        udids_ = java.util.Collections.emptyList();
        usuallyFalse_ = false;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasPsid()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, getPsidBytes());
        }
        for (int i = 0; i < udids_.size(); i++) {
          output.writeBytes(2, udids_.get(i));
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBool(3, usuallyFalse_);
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, getPsidBytes());
        }
        {
          int dataSize = 0;
          for (int i = 0; i < udids_.size(); i++) {
            dataSize += com.google.protobuf.CodedOutputStream
              .computeBytesSizeNoTag(udids_.get(i));
          }
          size += dataSize;
          size += 1 * getUdidsList().size();
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBoolSize(3, usuallyFalse_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.DeviceUdids parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.DeviceUdids parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.DeviceUdids parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.DeviceUdids parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.DeviceUdids parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.DeviceUdids parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.DeviceUdids parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.DeviceUdids parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.DeviceUdids parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.DeviceUdids parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.DeviceUdids prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code DeviceUdids}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.DeviceUdidsOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_DeviceUdids_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_DeviceUdids_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.DeviceUdids.class, Protocol.DeviceUdids.Builder.class);
        }
  
        // Construct using Protobuf.DeviceUdids.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          psid_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          udids_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          usuallyFalse_ = false;
          bitField0_ = (bitField0_ & ~0x00000004);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_DeviceUdids_descriptor;
        }
  
        public Protocol.DeviceUdids getDefaultInstanceForType() {
          return Protocol.DeviceUdids.getDefaultInstance();
        }
  
        public Protocol.DeviceUdids build() {
          Protocol.DeviceUdids result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.DeviceUdids buildPartial() {
          Protocol.DeviceUdids result = new Protocol.DeviceUdids(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.psid_ = psid_;
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            udids_ = java.util.Collections.unmodifiableList(udids_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.udids_ = udids_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000002;
          }
          result.usuallyFalse_ = usuallyFalse_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.DeviceUdids) {
            return mergeFrom((Protocol.DeviceUdids)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.DeviceUdids other) {
          if (other == Protocol.DeviceUdids.getDefaultInstance()) return this;
          if (other.hasPsid()) {
            bitField0_ |= 0x00000001;
            psid_ = other.psid_;
            onChanged();
          }
          if (!other.udids_.isEmpty()) {
            if (udids_.isEmpty()) {
              udids_ = other.udids_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureUdidsIsMutable();
              udids_.addAll(other.udids_);
            }
            onChanged();
          }
          if (other.hasUsuallyFalse()) {
            setUsuallyFalse(other.getUsuallyFalse());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasPsid()) {
            
            return false;
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.DeviceUdids parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.DeviceUdids) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required string psid = 1;
        private java.lang.Object psid_ = "";
        /**
         * <code>required string psid = 1;</code>
         */
        public boolean hasPsid() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required string psid = 1;</code>
         */
        public java.lang.String getPsid() {
          java.lang.Object ref = psid_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            psid_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string psid = 1;</code>
         */
        public com.google.protobuf.ByteString
            getPsidBytes() {
          java.lang.Object ref = psid_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            psid_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string psid = 1;</code>
         */
        public Builder setPsid(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          psid_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string psid = 1;</code>
         */
        public Builder clearPsid() {
          bitField0_ = (bitField0_ & ~0x00000001);
          psid_ = getDefaultInstance().getPsid();
          onChanged();
          return this;
        }
        /**
         * <code>required string psid = 1;</code>
         */
        public Builder setPsidBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          psid_ = value;
          onChanged();
          return this;
        }
  
        // repeated bytes udids = 2;
        private java.util.List<com.google.protobuf.ByteString> udids_ = java.util.Collections.emptyList();
        private void ensureUdidsIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            udids_ = new java.util.ArrayList<com.google.protobuf.ByteString>(udids_);
            bitField0_ |= 0x00000002;
           }
        }
        /**
         * <code>repeated bytes udids = 2;</code>
         */
        public java.util.List<com.google.protobuf.ByteString>
            getUdidsList() {
          return java.util.Collections.unmodifiableList(udids_);
        }
        /**
         * <code>repeated bytes udids = 2;</code>
         */
        public int getUdidsCount() {
          return udids_.size();
        }
        /**
         * <code>repeated bytes udids = 2;</code>
         */
        public com.google.protobuf.ByteString getUdids(int index) {
          return udids_.get(index);
        }
        /**
         * <code>repeated bytes udids = 2;</code>
         */
        public Builder setUdids(
            int index, com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    ensureUdidsIsMutable();
          udids_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated bytes udids = 2;</code>
         */
        public Builder addUdids(com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    ensureUdidsIsMutable();
          udids_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated bytes udids = 2;</code>
         */
        public Builder addAllUdids(
            java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
          ensureUdidsIsMutable();
          super.addAll(values, udids_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated bytes udids = 2;</code>
         */
        public Builder clearUdids() {
          udids_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
          return this;
        }
  
        // optional bool usuallyFalse = 3;
        private boolean usuallyFalse_ ;
        /**
         * <code>optional bool usuallyFalse = 3;</code>
         */
        public boolean hasUsuallyFalse() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional bool usuallyFalse = 3;</code>
         */
        public boolean getUsuallyFalse() {
          return usuallyFalse_;
        }
        /**
         * <code>optional bool usuallyFalse = 3;</code>
         */
        public Builder setUsuallyFalse(boolean value) {
          bitField0_ |= 0x00000004;
          usuallyFalse_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional bool usuallyFalse = 3;</code>
         */
        public Builder clearUsuallyFalse() {
          bitField0_ = (bitField0_ & ~0x00000004);
          usuallyFalse_ = false;
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:DeviceUdids)
      }
  
      static {
        defaultInstance = new DeviceUdids(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:DeviceUdids)
    }
  
    public interface DeviceOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required bytes udid = 1;
      /**
       * <code>required bytes udid = 1;</code>
       */
      boolean hasUdid();
      /**
       * <code>required bytes udid = 1;</code>
       */
      com.google.protobuf.ByteString getUdid();
  
      // required int64 fullSize = 2;
      /**
       * <code>required int64 fullSize = 2;</code>
       */
      boolean hasFullSize();
      /**
       * <code>required int64 fullSize = 2;</code>
       */
      long getFullSize();
  
      // repeated .Backup backup = 3;
      /**
       * <code>repeated .Backup backup = 3;</code>
       */
      java.util.List<Protocol.Backup> 
          getBackupList();
      /**
       * <code>repeated .Backup backup = 3;</code>
       */
      Protocol.Backup getBackup(int index);
      /**
       * <code>repeated .Backup backup = 3;</code>
       */
      int getBackupCount();
      /**
       * <code>repeated .Backup backup = 3;</code>
       */
      java.util.List<? extends Protocol.BackupOrBuilder> 
          getBackupOrBuilderList();
      /**
       * <code>repeated .Backup backup = 3;</code>
       */
      Protocol.BackupOrBuilder getBackupOrBuilder(
          int index);
  
      // required .DeviceInfo device = 4;
      /**
       * <code>required .DeviceInfo device = 4;</code>
       */
      boolean hasDevice();
      /**
       * <code>required .DeviceInfo device = 4;</code>
       */
      Protocol.DeviceInfo getDevice();
      /**
       * <code>required .DeviceInfo device = 4;</code>
       */
      Protocol.DeviceInfoOrBuilder getDeviceOrBuilder();
  
      // required int64 time = 5;
      /**
       * <code>required int64 time = 5;</code>
       */
      boolean hasTime();
      /**
       * <code>required int64 time = 5;</code>
       */
      long getTime();
    }
    /**
     * Protobuf type {@code Device}
     */
    public static final class Device extends
        com.google.protobuf.GeneratedMessage
        implements DeviceOrBuilder {
      // Use Device.newBuilder() to construct.
      private Device(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Device(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final Device defaultInstance;
      public static Device getDefaultInstance() {
        return defaultInstance;
      }
  
      public Device getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Device(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                udid_ = input.readBytes();
                break;
              }
              case 16: {
                bitField0_ |= 0x00000002;
                fullSize_ = input.readInt64();
                break;
              }
              case 26: {
                if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                  backup_ = new java.util.ArrayList<Protocol.Backup>();
                  mutable_bitField0_ |= 0x00000004;
                }
                backup_.add(input.readMessage(Protocol.Backup.PARSER, extensionRegistry));
                break;
              }
              case 34: {
                Protocol.DeviceInfo.Builder subBuilder = null;
                if (((bitField0_ & 0x00000004) == 0x00000004)) {
                  subBuilder = device_.toBuilder();
                }
                device_ = input.readMessage(Protocol.DeviceInfo.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(device_);
                  device_ = subBuilder.buildPartial();
                }
                bitField0_ |= 0x00000004;
                break;
              }
              case 40: {
                bitField0_ |= 0x00000008;
                time_ = 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.getMessage()).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
            backup_ = java.util.Collections.unmodifiableList(backup_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_Device_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_Device_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.Device.class, Protocol.Device.Builder.class);
      }
  
      public static com.google.protobuf.Parser<Device> PARSER =
          new com.google.protobuf.AbstractParser<Device>() {
        public Device parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Device(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<Device> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required bytes udid = 1;
      public static final int UDID_FIELD_NUMBER = 1;
      private com.google.protobuf.ByteString udid_;
      /**
       * <code>required bytes udid = 1;</code>
       */
      public boolean hasUdid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required bytes udid = 1;</code>
       */
      public com.google.protobuf.ByteString getUdid() {
        return udid_;
      }
  
      // required int64 fullSize = 2;
      public static final int FULLSIZE_FIELD_NUMBER = 2;
      private long fullSize_;
      /**
       * <code>required int64 fullSize = 2;</code>
       */
      public boolean hasFullSize() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required int64 fullSize = 2;</code>
       */
      public long getFullSize() {
        return fullSize_;
      }
  
      // repeated .Backup backup = 3;
      public static final int BACKUP_FIELD_NUMBER = 3;
      private java.util.List<Protocol.Backup> backup_;
      /**
       * <code>repeated .Backup backup = 3;</code>
       */
      public java.util.List<Protocol.Backup> getBackupList() {
        return backup_;
      }
      /**
       * <code>repeated .Backup backup = 3;</code>
       */
      public java.util.List<? extends Protocol.BackupOrBuilder> 
          getBackupOrBuilderList() {
        return backup_;
      }
      /**
       * <code>repeated .Backup backup = 3;</code>
       */
      public int getBackupCount() {
        return backup_.size();
      }
      /**
       * <code>repeated .Backup backup = 3;</code>
       */
      public Protocol.Backup getBackup(int index) {
        return backup_.get(index);
      }
      /**
       * <code>repeated .Backup backup = 3;</code>
       */
      public Protocol.BackupOrBuilder getBackupOrBuilder(
          int index) {
        return backup_.get(index);
      }
  
      // required .DeviceInfo device = 4;
      public static final int DEVICE_FIELD_NUMBER = 4;
      private Protocol.DeviceInfo device_;
      /**
       * <code>required .DeviceInfo device = 4;</code>
       */
      public boolean hasDevice() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>required .DeviceInfo device = 4;</code>
       */
      public Protocol.DeviceInfo getDevice() {
        return device_;
      }
      /**
       * <code>required .DeviceInfo device = 4;</code>
       */
      public Protocol.DeviceInfoOrBuilder getDeviceOrBuilder() {
        return device_;
      }
  
      // required int64 time = 5;
      public static final int TIME_FIELD_NUMBER = 5;
      private long time_;
      /**
       * <code>required int64 time = 5;</code>
       */
      public boolean hasTime() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>required int64 time = 5;</code>
       */
      public long getTime() {
        return time_;
      }
  
      private void initFields() {
        udid_ = com.google.protobuf.ByteString.EMPTY;
        fullSize_ = 0L;
        backup_ = java.util.Collections.emptyList();
        device_ = Protocol.DeviceInfo.getDefaultInstance();
        time_ = 0L;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasUdid()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasFullSize()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasDevice()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasTime()) {
          memoizedIsInitialized = 0;
          return false;
        }
        for (int i = 0; i < getBackupCount(); i++) {
          if (!getBackup(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        if (!getDevice().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, udid_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeInt64(2, fullSize_);
        }
        for (int i = 0; i < backup_.size(); i++) {
          output.writeMessage(3, backup_.get(i));
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeMessage(4, device_);
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          output.writeInt64(5, time_);
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, udid_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt64Size(2, fullSize_);
        }
        for (int i = 0; i < backup_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(3, backup_.get(i));
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(4, device_);
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt64Size(5, time_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.Device parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.Device parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.Device parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.Device parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.Device parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.Device parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.Device parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.Device parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.Device parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.Device parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.Device prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code Device}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.DeviceOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_Device_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_Device_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.Device.class, Protocol.Device.Builder.class);
        }
  
        // Construct using Protobuf.Device.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getBackupFieldBuilder();
            getDeviceFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          udid_ = com.google.protobuf.ByteString.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          fullSize_ = 0L;
          bitField0_ = (bitField0_ & ~0x00000002);
          if (backupBuilder_ == null) {
            backup_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            backupBuilder_.clear();
          }
          if (deviceBuilder_ == null) {
            device_ = Protocol.DeviceInfo.getDefaultInstance();
          } else {
            deviceBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000008);
          time_ = 0L;
          bitField0_ = (bitField0_ & ~0x00000010);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_Device_descriptor;
        }
  
        public Protocol.Device getDefaultInstanceForType() {
          return Protocol.Device.getDefaultInstance();
        }
  
        public Protocol.Device build() {
          Protocol.Device result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.Device buildPartial() {
          Protocol.Device result = new Protocol.Device(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.udid_ = udid_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.fullSize_ = fullSize_;
          if (backupBuilder_ == null) {
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
              backup_ = java.util.Collections.unmodifiableList(backup_);
              bitField0_ = (bitField0_ & ~0x00000004);
            }
            result.backup_ = backup_;
          } else {
            result.backup_ = backupBuilder_.build();
          }
          if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
            to_bitField0_ |= 0x00000004;
          }
          if (deviceBuilder_ == null) {
            result.device_ = device_;
          } else {
            result.device_ = deviceBuilder_.build();
          }
          if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
            to_bitField0_ |= 0x00000008;
          }
          result.time_ = time_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.Device) {
            return mergeFrom((Protocol.Device)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.Device other) {
          if (other == Protocol.Device.getDefaultInstance()) return this;
          if (other.hasUdid()) {
            setUdid(other.getUdid());
          }
          if (other.hasFullSize()) {
            setFullSize(other.getFullSize());
          }
          if (backupBuilder_ == null) {
            if (!other.backup_.isEmpty()) {
              if (backup_.isEmpty()) {
                backup_ = other.backup_;
                bitField0_ = (bitField0_ & ~0x00000004);
              } else {
                ensureBackupIsMutable();
                backup_.addAll(other.backup_);
              }
              onChanged();
            }
          } else {
            if (!other.backup_.isEmpty()) {
              if (backupBuilder_.isEmpty()) {
                backupBuilder_.dispose();
                backupBuilder_ = null;
                backup_ = other.backup_;
                bitField0_ = (bitField0_ & ~0x00000004);
                backupBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getBackupFieldBuilder() : null;
              } else {
                backupBuilder_.addAllMessages(other.backup_);
              }
            }
          }
          if (other.hasDevice()) {
            mergeDevice(other.getDevice());
          }
          if (other.hasTime()) {
            setTime(other.getTime());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasUdid()) {
            
            return false;
          }
          if (!hasFullSize()) {
            
            return false;
          }
          if (!hasDevice()) {
            
            return false;
          }
          if (!hasTime()) {
            
            return false;
          }
          for (int i = 0; i < getBackupCount(); i++) {
            if (!getBackup(i).isInitialized()) {
              
              return false;
            }
          }
          if (!getDevice().isInitialized()) {
            
            return false;
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.Device parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.Device) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required bytes udid = 1;
        private com.google.protobuf.ByteString udid_ = com.google.protobuf.ByteString.EMPTY;
        /**
         * <code>required bytes udid = 1;</code>
         */
        public boolean hasUdid() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required bytes udid = 1;</code>
         */
        public com.google.protobuf.ByteString getUdid() {
          return udid_;
        }
        /**
         * <code>required bytes udid = 1;</code>
         */
        public Builder setUdid(com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          udid_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required bytes udid = 1;</code>
         */
        public Builder clearUdid() {
          bitField0_ = (bitField0_ & ~0x00000001);
          udid_ = getDefaultInstance().getUdid();
          onChanged();
          return this;
        }
  
        // required int64 fullSize = 2;
        private long fullSize_ ;
        /**
         * <code>required int64 fullSize = 2;</code>
         */
        public boolean hasFullSize() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>required int64 fullSize = 2;</code>
         */
        public long getFullSize() {
          return fullSize_;
        }
        /**
         * <code>required int64 fullSize = 2;</code>
         */
        public Builder setFullSize(long value) {
          bitField0_ |= 0x00000002;
          fullSize_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int64 fullSize = 2;</code>
         */
        public Builder clearFullSize() {
          bitField0_ = (bitField0_ & ~0x00000002);
          fullSize_ = 0L;
          onChanged();
          return this;
        }
  
        // repeated .Backup backup = 3;
        private java.util.List<Protocol.Backup> backup_ =
          java.util.Collections.emptyList();
        private void ensureBackupIsMutable() {
          if (!((bitField0_ & 0x00000004) == 0x00000004)) {
            backup_ = new java.util.ArrayList<Protocol.Backup>(backup_);
            bitField0_ |= 0x00000004;
           }
        }
  
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.Backup, Protocol.Backup.Builder, Protocol.BackupOrBuilder> backupBuilder_;
  
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public java.util.List<Protocol.Backup> getBackupList() {
          if (backupBuilder_ == null) {
            return java.util.Collections.unmodifiableList(backup_);
          } else {
            return backupBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public int getBackupCount() {
          if (backupBuilder_ == null) {
            return backup_.size();
          } else {
            return backupBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public Protocol.Backup getBackup(int index) {
          if (backupBuilder_ == null) {
            return backup_.get(index);
          } else {
            return backupBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public Builder setBackup(
            int index, Protocol.Backup value) {
          if (backupBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureBackupIsMutable();
            backup_.set(index, value);
            onChanged();
          } else {
            backupBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public Builder setBackup(
            int index, Protocol.Backup.Builder builderForValue) {
          if (backupBuilder_ == null) {
            ensureBackupIsMutable();
            backup_.set(index, builderForValue.build());
            onChanged();
          } else {
            backupBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public Builder addBackup(Protocol.Backup value) {
          if (backupBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureBackupIsMutable();
            backup_.add(value);
            onChanged();
          } else {
            backupBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public Builder addBackup(
            int index, Protocol.Backup value) {
          if (backupBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureBackupIsMutable();
            backup_.add(index, value);
            onChanged();
          } else {
            backupBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public Builder addBackup(
            Protocol.Backup.Builder builderForValue) {
          if (backupBuilder_ == null) {
            ensureBackupIsMutable();
            backup_.add(builderForValue.build());
            onChanged();
          } else {
            backupBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public Builder addBackup(
            int index, Protocol.Backup.Builder builderForValue) {
          if (backupBuilder_ == null) {
            ensureBackupIsMutable();
            backup_.add(index, builderForValue.build());
            onChanged();
          } else {
            backupBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public Builder addAllBackup(
            java.lang.Iterable<? extends Protocol.Backup> values) {
          if (backupBuilder_ == null) {
            ensureBackupIsMutable();
            super.addAll(values, backup_);
            onChanged();
          } else {
            backupBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public Builder clearBackup() {
          if (backupBuilder_ == null) {
            backup_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
            onChanged();
          } else {
            backupBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public Builder removeBackup(int index) {
          if (backupBuilder_ == null) {
            ensureBackupIsMutable();
            backup_.remove(index);
            onChanged();
          } else {
            backupBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public Protocol.Backup.Builder getBackupBuilder(
            int index) {
          return getBackupFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public Protocol.BackupOrBuilder getBackupOrBuilder(
            int index) {
          if (backupBuilder_ == null) {
            return backup_.get(index);  } else {
            return backupBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public java.util.List<? extends Protocol.BackupOrBuilder> 
             getBackupOrBuilderList() {
          if (backupBuilder_ != null) {
            return backupBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(backup_);
          }
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public Protocol.Backup.Builder addBackupBuilder() {
          return getBackupFieldBuilder().addBuilder(
              Protocol.Backup.getDefaultInstance());
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public Protocol.Backup.Builder addBackupBuilder(
            int index) {
          return getBackupFieldBuilder().addBuilder(
              index, Protocol.Backup.getDefaultInstance());
        }
        /**
         * <code>repeated .Backup backup = 3;</code>
         */
        public java.util.List<Protocol.Backup.Builder> 
             getBackupBuilderList() {
          return getBackupFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.Backup, Protocol.Backup.Builder, Protocol.BackupOrBuilder> 
            getBackupFieldBuilder() {
          if (backupBuilder_ == null) {
            backupBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                Protocol.Backup, Protocol.Backup.Builder, Protocol.BackupOrBuilder>(
                    backup_,
                    ((bitField0_ & 0x00000004) == 0x00000004),
                    getParentForChildren(),
                    isClean());
            backup_ = null;
          }
          return backupBuilder_;
        }
  
        // required .DeviceInfo device = 4;
        private Protocol.DeviceInfo device_ = Protocol.DeviceInfo.getDefaultInstance();
        private com.google.protobuf.SingleFieldBuilder<
            Protocol.DeviceInfo, Protocol.DeviceInfo.Builder, Protocol.DeviceInfoOrBuilder> deviceBuilder_;
        /**
         * <code>required .DeviceInfo device = 4;</code>
         */
        public boolean hasDevice() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>required .DeviceInfo device = 4;</code>
         */
        public Protocol.DeviceInfo getDevice() {
          if (deviceBuilder_ == null) {
            return device_;
          } else {
            return deviceBuilder_.getMessage();
          }
        }
        /**
         * <code>required .DeviceInfo device = 4;</code>
         */
        public Builder setDevice(Protocol.DeviceInfo value) {
          if (deviceBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            device_ = value;
            onChanged();
          } else {
            deviceBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000008;
          return this;
        }
        /**
         * <code>required .DeviceInfo device = 4;</code>
         */
        public Builder setDevice(
            Protocol.DeviceInfo.Builder builderForValue) {
          if (deviceBuilder_ == null) {
            device_ = builderForValue.build();
            onChanged();
          } else {
            deviceBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000008;
          return this;
        }
        /**
         * <code>required .DeviceInfo device = 4;</code>
         */
        public Builder mergeDevice(Protocol.DeviceInfo value) {
          if (deviceBuilder_ == null) {
            if (((bitField0_ & 0x00000008) == 0x00000008) &&
                device_ != Protocol.DeviceInfo.getDefaultInstance()) {
              device_ =
                Protocol.DeviceInfo.newBuilder(device_).mergeFrom(value).buildPartial();
            } else {
              device_ = value;
            }
            onChanged();
          } else {
            deviceBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000008;
          return this;
        }
        /**
         * <code>required .DeviceInfo device = 4;</code>
         */
        public Builder clearDevice() {
          if (deviceBuilder_ == null) {
            device_ = Protocol.DeviceInfo.getDefaultInstance();
            onChanged();
          } else {
            deviceBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000008);
          return this;
        }
        /**
         * <code>required .DeviceInfo device = 4;</code>
         */
        public Protocol.DeviceInfo.Builder getDeviceBuilder() {
          bitField0_ |= 0x00000008;
          onChanged();
          return getDeviceFieldBuilder().getBuilder();
        }
        /**
         * <code>required .DeviceInfo device = 4;</code>
         */
        public Protocol.DeviceInfoOrBuilder getDeviceOrBuilder() {
          if (deviceBuilder_ != null) {
            return deviceBuilder_.getMessageOrBuilder();
          } else {
            return device_;
          }
        }
        /**
         * <code>required .DeviceInfo device = 4;</code>
         */
        private com.google.protobuf.SingleFieldBuilder<
            Protocol.DeviceInfo, Protocol.DeviceInfo.Builder, Protocol.DeviceInfoOrBuilder> 
            getDeviceFieldBuilder() {
          if (deviceBuilder_ == null) {
            deviceBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                Protocol.DeviceInfo, Protocol.DeviceInfo.Builder, Protocol.DeviceInfoOrBuilder>(
                    device_,
                    getParentForChildren(),
                    isClean());
            device_ = null;
          }
          return deviceBuilder_;
        }
  
        // required int64 time = 5;
        private long time_ ;
        /**
         * <code>required int64 time = 5;</code>
         */
        public boolean hasTime() {
          return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>required int64 time = 5;</code>
         */
        public long getTime() {
          return time_;
        }
        /**
         * <code>required int64 time = 5;</code>
         */
        public Builder setTime(long value) {
          bitField0_ |= 0x00000010;
          time_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int64 time = 5;</code>
         */
        public Builder clearTime() {
          bitField0_ = (bitField0_ & ~0x00000010);
          time_ = 0L;
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:Device)
      }
  
      static {
        defaultInstance = new Device(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:Device)
    }
  
    public interface BackupOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required int32 snapshotID = 1;
      /**
       * <code>required int32 snapshotID = 1;</code>
       */
      boolean hasSnapshotID();
      /**
       * <code>required int32 snapshotID = 1;</code>
       */
      int getSnapshotID();
  
      // required int64 size = 2;
      /**
       * <code>required int64 size = 2;</code>
       */
      boolean hasSize();
      /**
       * <code>required int64 size = 2;</code>
       */
      long getSize();
  
      // required int64 time1 = 3;
      /**
       * <code>required int64 time1 = 3;</code>
       */
      boolean hasTime1();
      /**
       * <code>required int64 time1 = 3;</code>
       */
      long getTime1();
  
      // required .BackupInfo info = 5;
      /**
       * <code>required .BackupInfo info = 5;</code>
       */
      boolean hasInfo();
      /**
       * <code>required .BackupInfo info = 5;</code>
       */
      Protocol.BackupInfo getInfo();
      /**
       * <code>required .BackupInfo info = 5;</code>
       */
      Protocol.BackupInfoOrBuilder getInfoOrBuilder();
  
      // required int64 time2 = 6;
      /**
       * <code>required int64 time2 = 6;</code>
       */
      boolean hasTime2();
      /**
       * <code>required int64 time2 = 6;</code>
       */
      long getTime2();
    }
    /**
     * Protobuf type {@code Backup}
     */
    public static final class Backup extends
        com.google.protobuf.GeneratedMessage
        implements BackupOrBuilder {
      // Use Backup.newBuilder() to construct.
      private Backup(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Backup(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final Backup defaultInstance;
      public static Backup getDefaultInstance() {
        return defaultInstance;
      }
  
      public Backup getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Backup(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 8: {
                bitField0_ |= 0x00000001;
                snapshotID_ = input.readInt32();
                break;
              }
              case 16: {
                bitField0_ |= 0x00000002;
                size_ = input.readInt64();
                break;
              }
              case 24: {
                bitField0_ |= 0x00000004;
                time1_ = input.readInt64();
                break;
              }
              case 42: {
                Protocol.BackupInfo.Builder subBuilder = null;
                if (((bitField0_ & 0x00000008) == 0x00000008)) {
                  subBuilder = info_.toBuilder();
                }
                info_ = input.readMessage(Protocol.BackupInfo.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(info_);
                  info_ = subBuilder.buildPartial();
                }
                bitField0_ |= 0x00000008;
                break;
              }
              case 48: {
                bitField0_ |= 0x00000010;
                time2_ = 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.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_Backup_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_Backup_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.Backup.class, Protocol.Backup.Builder.class);
      }
  
      public static com.google.protobuf.Parser<Backup> PARSER =
          new com.google.protobuf.AbstractParser<Backup>() {
        public Backup parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Backup(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<Backup> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required int32 snapshotID = 1;
      public static final int SNAPSHOTID_FIELD_NUMBER = 1;
      private int snapshotID_;
      /**
       * <code>required int32 snapshotID = 1;</code>
       */
      public boolean hasSnapshotID() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required int32 snapshotID = 1;</code>
       */
      public int getSnapshotID() {
        return snapshotID_;
      }
  
      // required int64 size = 2;
      public static final int SIZE_FIELD_NUMBER = 2;
      private long size_;
      /**
       * <code>required int64 size = 2;</code>
       */
      public boolean hasSize() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required int64 size = 2;</code>
       */
      public long getSize() {
        return size_;
      }
  
      // required int64 time1 = 3;
      public static final int TIME1_FIELD_NUMBER = 3;
      private long time1_;
      /**
       * <code>required int64 time1 = 3;</code>
       */
      public boolean hasTime1() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>required int64 time1 = 3;</code>
       */
      public long getTime1() {
        return time1_;
      }
  
      // required .BackupInfo info = 5;
      public static final int INFO_FIELD_NUMBER = 5;
      private Protocol.BackupInfo info_;
      /**
       * <code>required .BackupInfo info = 5;</code>
       */
      public boolean hasInfo() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>required .BackupInfo info = 5;</code>
       */
      public Protocol.BackupInfo getInfo() {
        return info_;
      }
      /**
       * <code>required .BackupInfo info = 5;</code>
       */
      public Protocol.BackupInfoOrBuilder getInfoOrBuilder() {
        return info_;
      }
  
      // required int64 time2 = 6;
      public static final int TIME2_FIELD_NUMBER = 6;
      private long time2_;
      /**
       * <code>required int64 time2 = 6;</code>
       */
      public boolean hasTime2() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>required int64 time2 = 6;</code>
       */
      public long getTime2() {
        return time2_;
      }
  
      private void initFields() {
        snapshotID_ = 0;
        size_ = 0L;
        time1_ = 0L;
        info_ = Protocol.BackupInfo.getDefaultInstance();
        time2_ = 0L;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasSnapshotID()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasSize()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasTime1()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasInfo()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasTime2()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!getInfo().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeInt32(1, snapshotID_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeInt64(2, size_);
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeInt64(3, time1_);
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          output.writeMessage(5, info_);
        }
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          output.writeInt64(6, time2_);
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(1, snapshotID_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt64Size(2, size_);
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt64Size(3, time1_);
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(5, info_);
        }
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt64Size(6, time2_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.Backup parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.Backup parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.Backup parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.Backup parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.Backup parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.Backup parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.Backup parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.Backup parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.Backup parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.Backup parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.Backup prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code Backup}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.BackupOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_Backup_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_Backup_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.Backup.class, Protocol.Backup.Builder.class);
        }
  
        // Construct using Protobuf.Backup.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getInfoFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          snapshotID_ = 0;
          bitField0_ = (bitField0_ & ~0x00000001);
          size_ = 0L;
          bitField0_ = (bitField0_ & ~0x00000002);
          time1_ = 0L;
          bitField0_ = (bitField0_ & ~0x00000004);
          if (infoBuilder_ == null) {
            info_ = Protocol.BackupInfo.getDefaultInstance();
          } else {
            infoBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000008);
          time2_ = 0L;
          bitField0_ = (bitField0_ & ~0x00000010);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_Backup_descriptor;
        }
  
        public Protocol.Backup getDefaultInstanceForType() {
          return Protocol.Backup.getDefaultInstance();
        }
  
        public Protocol.Backup build() {
          Protocol.Backup result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.Backup buildPartial() {
          Protocol.Backup result = new Protocol.Backup(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.snapshotID_ = snapshotID_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.size_ = size_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000004;
          }
          result.time1_ = time1_;
          if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
            to_bitField0_ |= 0x00000008;
          }
          if (infoBuilder_ == null) {
            result.info_ = info_;
          } else {
            result.info_ = infoBuilder_.build();
          }
          if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
            to_bitField0_ |= 0x00000010;
          }
          result.time2_ = time2_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.Backup) {
            return mergeFrom((Protocol.Backup)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.Backup other) {
          if (other == Protocol.Backup.getDefaultInstance()) return this;
          if (other.hasSnapshotID()) {
            setSnapshotID(other.getSnapshotID());
          }
          if (other.hasSize()) {
            setSize(other.getSize());
          }
          if (other.hasTime1()) {
            setTime1(other.getTime1());
          }
          if (other.hasInfo()) {
            mergeInfo(other.getInfo());
          }
          if (other.hasTime2()) {
            setTime2(other.getTime2());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasSnapshotID()) {
            
            return false;
          }
          if (!hasSize()) {
            
            return false;
          }
          if (!hasTime1()) {
            
            return false;
          }
          if (!hasInfo()) {
            
            return false;
          }
          if (!hasTime2()) {
            
            return false;
          }
          if (!getInfo().isInitialized()) {
            
            return false;
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.Backup parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.Backup) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required int32 snapshotID = 1;
        private int snapshotID_ ;
        /**
         * <code>required int32 snapshotID = 1;</code>
         */
        public boolean hasSnapshotID() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required int32 snapshotID = 1;</code>
         */
        public int getSnapshotID() {
          return snapshotID_;
        }
        /**
         * <code>required int32 snapshotID = 1;</code>
         */
        public Builder setSnapshotID(int value) {
          bitField0_ |= 0x00000001;
          snapshotID_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int32 snapshotID = 1;</code>
         */
        public Builder clearSnapshotID() {
          bitField0_ = (bitField0_ & ~0x00000001);
          snapshotID_ = 0;
          onChanged();
          return this;
        }
  
        // required int64 size = 2;
        private long size_ ;
        /**
         * <code>required int64 size = 2;</code>
         */
        public boolean hasSize() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>required int64 size = 2;</code>
         */
        public long getSize() {
          return size_;
        }
        /**
         * <code>required int64 size = 2;</code>
         */
        public Builder setSize(long value) {
          bitField0_ |= 0x00000002;
          size_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int64 size = 2;</code>
         */
        public Builder clearSize() {
          bitField0_ = (bitField0_ & ~0x00000002);
          size_ = 0L;
          onChanged();
          return this;
        }
  
        // required int64 time1 = 3;
        private long time1_ ;
        /**
         * <code>required int64 time1 = 3;</code>
         */
        public boolean hasTime1() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>required int64 time1 = 3;</code>
         */
        public long getTime1() {
          return time1_;
        }
        /**
         * <code>required int64 time1 = 3;</code>
         */
        public Builder setTime1(long value) {
          bitField0_ |= 0x00000004;
          time1_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int64 time1 = 3;</code>
         */
        public Builder clearTime1() {
          bitField0_ = (bitField0_ & ~0x00000004);
          time1_ = 0L;
          onChanged();
          return this;
        }
  
        // required .BackupInfo info = 5;
        private Protocol.BackupInfo info_ = Protocol.BackupInfo.getDefaultInstance();
        private com.google.protobuf.SingleFieldBuilder<
            Protocol.BackupInfo, Protocol.BackupInfo.Builder, Protocol.BackupInfoOrBuilder> infoBuilder_;
        /**
         * <code>required .BackupInfo info = 5;</code>
         */
        public boolean hasInfo() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>required .BackupInfo info = 5;</code>
         */
        public Protocol.BackupInfo getInfo() {
          if (infoBuilder_ == null) {
            return info_;
          } else {
            return infoBuilder_.getMessage();
          }
        }
        /**
         * <code>required .BackupInfo info = 5;</code>
         */
        public Builder setInfo(Protocol.BackupInfo value) {
          if (infoBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            info_ = value;
            onChanged();
          } else {
            infoBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000008;
          return this;
        }
        /**
         * <code>required .BackupInfo info = 5;</code>
         */
        public Builder setInfo(
            Protocol.BackupInfo.Builder builderForValue) {
          if (infoBuilder_ == null) {
            info_ = builderForValue.build();
            onChanged();
          } else {
            infoBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000008;
          return this;
        }
        /**
         * <code>required .BackupInfo info = 5;</code>
         */
        public Builder mergeInfo(Protocol.BackupInfo value) {
          if (infoBuilder_ == null) {
            if (((bitField0_ & 0x00000008) == 0x00000008) &&
                info_ != Protocol.BackupInfo.getDefaultInstance()) {
              info_ =
                Protocol.BackupInfo.newBuilder(info_).mergeFrom(value).buildPartial();
            } else {
              info_ = value;
            }
            onChanged();
          } else {
            infoBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000008;
          return this;
        }
        /**
         * <code>required .BackupInfo info = 5;</code>
         */
        public Builder clearInfo() {
          if (infoBuilder_ == null) {
            info_ = Protocol.BackupInfo.getDefaultInstance();
            onChanged();
          } else {
            infoBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000008);
          return this;
        }
        /**
         * <code>required .BackupInfo info = 5;</code>
         */
        public Protocol.BackupInfo.Builder getInfoBuilder() {
          bitField0_ |= 0x00000008;
          onChanged();
          return getInfoFieldBuilder().getBuilder();
        }
        /**
         * <code>required .BackupInfo info = 5;</code>
         */
        public Protocol.BackupInfoOrBuilder getInfoOrBuilder() {
          if (infoBuilder_ != null) {
            return infoBuilder_.getMessageOrBuilder();
          } else {
            return info_;
          }
        }
        /**
         * <code>required .BackupInfo info = 5;</code>
         */
        private com.google.protobuf.SingleFieldBuilder<
            Protocol.BackupInfo, Protocol.BackupInfo.Builder, Protocol.BackupInfoOrBuilder> 
            getInfoFieldBuilder() {
          if (infoBuilder_ == null) {
            infoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                Protocol.BackupInfo, Protocol.BackupInfo.Builder, Protocol.BackupInfoOrBuilder>(
                    info_,
                    getParentForChildren(),
                    isClean());
            info_ = null;
          }
          return infoBuilder_;
        }
  
        // required int64 time2 = 6;
        private long time2_ ;
        /**
         * <code>required int64 time2 = 6;</code>
         */
        public boolean hasTime2() {
          return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>required int64 time2 = 6;</code>
         */
        public long getTime2() {
          return time2_;
        }
        /**
         * <code>required int64 time2 = 6;</code>
         */
        public Builder setTime2(long value) {
          bitField0_ |= 0x00000010;
          time2_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int64 time2 = 6;</code>
         */
        public Builder clearTime2() {
          bitField0_ = (bitField0_ & ~0x00000010);
          time2_ = 0L;
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:Backup)
      }
  
      static {
        defaultInstance = new Backup(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:Backup)
    }
  
    public interface BackupInfoOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required string name = 1;
      /**
       * <code>required string name = 1;</code>
       */
      boolean hasName();
      /**
       * <code>required string name = 1;</code>
       */
      java.lang.String getName();
      /**
       * <code>required string name = 1;</code>
       */
      com.google.protobuf.ByteString
          getNameBytes();
  
      // required string firmware = 2;
      /**
       * <code>required string firmware = 2;</code>
       */
      boolean hasFirmware();
      /**
       * <code>required string firmware = 2;</code>
       */
      java.lang.String getFirmware();
      /**
       * <code>required string firmware = 2;</code>
       */
      com.google.protobuf.ByteString
          getFirmwareBytes();
  
      // required string build = 3;
      /**
       * <code>required string build = 3;</code>
       */
      boolean hasBuild();
      /**
       * <code>required string build = 3;</code>
       */
      java.lang.String getBuild();
      /**
       * <code>required string build = 3;</code>
       */
      com.google.protobuf.ByteString
          getBuildBytes();
  
      // required int32 usually2_1 = 4;
      /**
       * <code>required int32 usually2_1 = 4;</code>
       */
      boolean hasUsually21();
      /**
       * <code>required int32 usually2_1 = 4;</code>
       */
      int getUsually21();
  
      // required bytes idk = 5;
      /**
       * <code>required bytes idk = 5;</code>
       */
      boolean hasIdk();
      /**
       * <code>required bytes idk = 5;</code>
       */
      com.google.protobuf.ByteString getIdk();
  
      // required int32 usually2_2 = 6;
      /**
       * <code>required int32 usually2_2 = 6;</code>
       */
      boolean hasUsually22();
      /**
       * <code>required int32 usually2_2 = 6;</code>
       */
      int getUsually22();
  
      // required int32 usually1 = 7;
      /**
       * <code>required int32 usually1 = 7;</code>
       */
      boolean hasUsually1();
      /**
       * <code>required int32 usually1 = 7;</code>
       */
      int getUsually1();
    }
    /**
     * Protobuf type {@code BackupInfo}
     */
    public static final class BackupInfo extends
        com.google.protobuf.GeneratedMessage
        implements BackupInfoOrBuilder {
      // Use BackupInfo.newBuilder() to construct.
      private BackupInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private BackupInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final BackupInfo defaultInstance;
      public static BackupInfo getDefaultInstance() {
        return defaultInstance;
      }
  
      public BackupInfo getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private BackupInfo(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                name_ = input.readBytes();
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                firmware_ = input.readBytes();
                break;
              }
              case 26: {
                bitField0_ |= 0x00000004;
                build_ = input.readBytes();
                break;
              }
              case 32: {
                bitField0_ |= 0x00000008;
                usually21_ = input.readInt32();
                break;
              }
              case 42: {
                bitField0_ |= 0x00000010;
                idk_ = input.readBytes();
                break;
              }
              case 48: {
                bitField0_ |= 0x00000020;
                usually22_ = input.readInt32();
                break;
              }
              case 56: {
                bitField0_ |= 0x00000040;
                usually1_ = 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.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_BackupInfo_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_BackupInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.BackupInfo.class, Protocol.BackupInfo.Builder.class);
      }
  
      public static com.google.protobuf.Parser<BackupInfo> PARSER =
          new com.google.protobuf.AbstractParser<BackupInfo>() {
        public BackupInfo parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new BackupInfo(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<BackupInfo> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required string name = 1;
      public static final int NAME_FIELD_NUMBER = 1;
      private java.lang.Object name_;
      /**
       * <code>required string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required string firmware = 2;
      public static final int FIRMWARE_FIELD_NUMBER = 2;
      private java.lang.Object firmware_;
      /**
       * <code>required string firmware = 2;</code>
       */
      public boolean hasFirmware() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required string firmware = 2;</code>
       */
      public java.lang.String getFirmware() {
        java.lang.Object ref = firmware_;
        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();
          if (bs.isValidUtf8()) {
            firmware_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string firmware = 2;</code>
       */
      public com.google.protobuf.ByteString
          getFirmwareBytes() {
        java.lang.Object ref = firmware_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          firmware_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required string build = 3;
      public static final int BUILD_FIELD_NUMBER = 3;
      private java.lang.Object build_;
      /**
       * <code>required string build = 3;</code>
       */
      public boolean hasBuild() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>required string build = 3;</code>
       */
      public java.lang.String getBuild() {
        java.lang.Object ref = build_;
        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();
          if (bs.isValidUtf8()) {
            build_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string build = 3;</code>
       */
      public com.google.protobuf.ByteString
          getBuildBytes() {
        java.lang.Object ref = build_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          build_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required int32 usually2_1 = 4;
      public static final int USUALLY2_1_FIELD_NUMBER = 4;
      private int usually21_;
      /**
       * <code>required int32 usually2_1 = 4;</code>
       */
      public boolean hasUsually21() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>required int32 usually2_1 = 4;</code>
       */
      public int getUsually21() {
        return usually21_;
      }
  
      // required bytes idk = 5;
      public static final int IDK_FIELD_NUMBER = 5;
      private com.google.protobuf.ByteString idk_;
      /**
       * <code>required bytes idk = 5;</code>
       */
      public boolean hasIdk() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>required bytes idk = 5;</code>
       */
      public com.google.protobuf.ByteString getIdk() {
        return idk_;
      }
  
      // required int32 usually2_2 = 6;
      public static final int USUALLY2_2_FIELD_NUMBER = 6;
      private int usually22_;
      /**
       * <code>required int32 usually2_2 = 6;</code>
       */
      public boolean hasUsually22() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>required int32 usually2_2 = 6;</code>
       */
      public int getUsually22() {
        return usually22_;
      }
  
      // required int32 usually1 = 7;
      public static final int USUALLY1_FIELD_NUMBER = 7;
      private int usually1_;
      /**
       * <code>required int32 usually1 = 7;</code>
       */
      public boolean hasUsually1() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>required int32 usually1 = 7;</code>
       */
      public int getUsually1() {
        return usually1_;
      }
  
      private void initFields() {
        name_ = "";
        firmware_ = "";
        build_ = "";
        usually21_ = 0;
        idk_ = com.google.protobuf.ByteString.EMPTY;
        usually22_ = 0;
        usually1_ = 0;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasName()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasFirmware()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasBuild()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasUsually21()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasIdk()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasUsually22()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasUsually1()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, getNameBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(2, getFirmwareBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeBytes(3, getBuildBytes());
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          output.writeInt32(4, usually21_);
        }
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          output.writeBytes(5, idk_);
        }
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          output.writeInt32(6, usually22_);
        }
        if (((bitField0_ & 0x00000040) == 0x00000040)) {
          output.writeInt32(7, usually1_);
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, getNameBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, getFirmwareBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(3, getBuildBytes());
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(4, usually21_);
        }
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(5, idk_);
        }
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(6, usually22_);
        }
        if (((bitField0_ & 0x00000040) == 0x00000040)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(7, usually1_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.BackupInfo parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.BackupInfo parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.BackupInfo parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.BackupInfo parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.BackupInfo parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.BackupInfo parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.BackupInfo parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.BackupInfo parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.BackupInfo parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.BackupInfo parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.BackupInfo prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code BackupInfo}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.BackupInfoOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_BackupInfo_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_BackupInfo_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.BackupInfo.class, Protocol.BackupInfo.Builder.class);
        }
  
        // Construct using Protobuf.BackupInfo.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          name_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          firmware_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          build_ = "";
          bitField0_ = (bitField0_ & ~0x00000004);
          usually21_ = 0;
          bitField0_ = (bitField0_ & ~0x00000008);
          idk_ = com.google.protobuf.ByteString.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000010);
          usually22_ = 0;
          bitField0_ = (bitField0_ & ~0x00000020);
          usually1_ = 0;
          bitField0_ = (bitField0_ & ~0x00000040);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_BackupInfo_descriptor;
        }
  
        public Protocol.BackupInfo getDefaultInstanceForType() {
          return Protocol.BackupInfo.getDefaultInstance();
        }
  
        public Protocol.BackupInfo build() {
          Protocol.BackupInfo result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.BackupInfo buildPartial() {
          Protocol.BackupInfo result = new Protocol.BackupInfo(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.name_ = name_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.firmware_ = firmware_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000004;
          }
          result.build_ = build_;
          if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
            to_bitField0_ |= 0x00000008;
          }
          result.usually21_ = usually21_;
          if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
            to_bitField0_ |= 0x00000010;
          }
          result.idk_ = idk_;
          if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
            to_bitField0_ |= 0x00000020;
          }
          result.usually22_ = usually22_;
          if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
            to_bitField0_ |= 0x00000040;
          }
          result.usually1_ = usually1_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.BackupInfo) {
            return mergeFrom((Protocol.BackupInfo)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.BackupInfo other) {
          if (other == Protocol.BackupInfo.getDefaultInstance()) return this;
          if (other.hasName()) {
            bitField0_ |= 0x00000001;
            name_ = other.name_;
            onChanged();
          }
          if (other.hasFirmware()) {
            bitField0_ |= 0x00000002;
            firmware_ = other.firmware_;
            onChanged();
          }
          if (other.hasBuild()) {
            bitField0_ |= 0x00000004;
            build_ = other.build_;
            onChanged();
          }
          if (other.hasUsually21()) {
            setUsually21(other.getUsually21());
          }
          if (other.hasIdk()) {
            setIdk(other.getIdk());
          }
          if (other.hasUsually22()) {
            setUsually22(other.getUsually22());
          }
          if (other.hasUsually1()) {
            setUsually1(other.getUsually1());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasName()) {
            
            return false;
          }
          if (!hasFirmware()) {
            
            return false;
          }
          if (!hasBuild()) {
            
            return false;
          }
          if (!hasUsually21()) {
            
            return false;
          }
          if (!hasIdk()) {
            
            return false;
          }
          if (!hasUsually22()) {
            
            return false;
          }
          if (!hasUsually1()) {
            
            return false;
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.BackupInfo parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.BackupInfo) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required string name = 1;
        private java.lang.Object name_ = "";
        /**
         * <code>required string name = 1;</code>
         */
        public boolean hasName() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required string name = 1;</code>
         */
        public java.lang.String getName() {
          java.lang.Object ref = name_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            name_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string name = 1;</code>
         */
        public com.google.protobuf.ByteString
            getNameBytes() {
          java.lang.Object ref = name_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            name_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string name = 1;</code>
         */
        public Builder setName(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          name_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string name = 1;</code>
         */
        public Builder clearName() {
          bitField0_ = (bitField0_ & ~0x00000001);
          name_ = getDefaultInstance().getName();
          onChanged();
          return this;
        }
        /**
         * <code>required string name = 1;</code>
         */
        public Builder setNameBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          name_ = value;
          onChanged();
          return this;
        }
  
        // required string firmware = 2;
        private java.lang.Object firmware_ = "";
        /**
         * <code>required string firmware = 2;</code>
         */
        public boolean hasFirmware() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>required string firmware = 2;</code>
         */
        public java.lang.String getFirmware() {
          java.lang.Object ref = firmware_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            firmware_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string firmware = 2;</code>
         */
        public com.google.protobuf.ByteString
            getFirmwareBytes() {
          java.lang.Object ref = firmware_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            firmware_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string firmware = 2;</code>
         */
        public Builder setFirmware(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          firmware_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string firmware = 2;</code>
         */
        public Builder clearFirmware() {
          bitField0_ = (bitField0_ & ~0x00000002);
          firmware_ = getDefaultInstance().getFirmware();
          onChanged();
          return this;
        }
        /**
         * <code>required string firmware = 2;</code>
         */
        public Builder setFirmwareBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          firmware_ = value;
          onChanged();
          return this;
        }
  
        // required string build = 3;
        private java.lang.Object build_ = "";
        /**
         * <code>required string build = 3;</code>
         */
        public boolean hasBuild() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>required string build = 3;</code>
         */
        public java.lang.String getBuild() {
          java.lang.Object ref = build_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            build_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string build = 3;</code>
         */
        public com.google.protobuf.ByteString
            getBuildBytes() {
          java.lang.Object ref = build_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            build_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string build = 3;</code>
         */
        public Builder setBuild(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000004;
          build_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string build = 3;</code>
         */
        public Builder clearBuild() {
          bitField0_ = (bitField0_ & ~0x00000004);
          build_ = getDefaultInstance().getBuild();
          onChanged();
          return this;
        }
        /**
         * <code>required string build = 3;</code>
         */
        public Builder setBuildBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000004;
          build_ = value;
          onChanged();
          return this;
        }
  
        // required int32 usually2_1 = 4;
        private int usually21_ ;
        /**
         * <code>required int32 usually2_1 = 4;</code>
         */
        public boolean hasUsually21() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>required int32 usually2_1 = 4;</code>
         */
        public int getUsually21() {
          return usually21_;
        }
        /**
         * <code>required int32 usually2_1 = 4;</code>
         */
        public Builder setUsually21(int value) {
          bitField0_ |= 0x00000008;
          usually21_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int32 usually2_1 = 4;</code>
         */
        public Builder clearUsually21() {
          bitField0_ = (bitField0_ & ~0x00000008);
          usually21_ = 0;
          onChanged();
          return this;
        }
  
        // required bytes idk = 5;
        private com.google.protobuf.ByteString idk_ = com.google.protobuf.ByteString.EMPTY;
        /**
         * <code>required bytes idk = 5;</code>
         */
        public boolean hasIdk() {
          return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>required bytes idk = 5;</code>
         */
        public com.google.protobuf.ByteString getIdk() {
          return idk_;
        }
        /**
         * <code>required bytes idk = 5;</code>
         */
        public Builder setIdk(com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000010;
          idk_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required bytes idk = 5;</code>
         */
        public Builder clearIdk() {
          bitField0_ = (bitField0_ & ~0x00000010);
          idk_ = getDefaultInstance().getIdk();
          onChanged();
          return this;
        }
  
        // required int32 usually2_2 = 6;
        private int usually22_ ;
        /**
         * <code>required int32 usually2_2 = 6;</code>
         */
        public boolean hasUsually22() {
          return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>required int32 usually2_2 = 6;</code>
         */
        public int getUsually22() {
          return usually22_;
        }
        /**
         * <code>required int32 usually2_2 = 6;</code>
         */
        public Builder setUsually22(int value) {
          bitField0_ |= 0x00000020;
          usually22_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int32 usually2_2 = 6;</code>
         */
        public Builder clearUsually22() {
          bitField0_ = (bitField0_ & ~0x00000020);
          usually22_ = 0;
          onChanged();
          return this;
        }
  
        // required int32 usually1 = 7;
        private int usually1_ ;
        /**
         * <code>required int32 usually1 = 7;</code>
         */
        public boolean hasUsually1() {
          return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>required int32 usually1 = 7;</code>
         */
        public int getUsually1() {
          return usually1_;
        }
        /**
         * <code>required int32 usually1 = 7;</code>
         */
        public Builder setUsually1(int value) {
          bitField0_ |= 0x00000040;
          usually1_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int32 usually1 = 7;</code>
         */
        public Builder clearUsually1() {
          bitField0_ = (bitField0_ & ~0x00000040);
          usually1_ = 0;
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:BackupInfo)
      }
  
      static {
        defaultInstance = new BackupInfo(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:BackupInfo)
    }
  
    public interface DeviceInfoOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required string shortName = 1;
      /**
       * <code>required string shortName = 1;</code>
       */
      boolean hasShortName();
      /**
       * <code>required string shortName = 1;</code>
       */
      java.lang.String getShortName();
      /**
       * <code>required string shortName = 1;</code>
       */
      com.google.protobuf.ByteString
          getShortNameBytes();
  
      // required string realName = 2;
      /**
       * <code>required string realName = 2;</code>
       */
      boolean hasRealName();
      /**
       * <code>required string realName = 2;</code>
       */
      java.lang.String getRealName();
      /**
       * <code>required string realName = 2;</code>
       */
      com.google.protobuf.ByteString
          getRealNameBytes();
  
      // required string serial = 3;
      /**
       * <code>required string serial = 3;</code>
       */
      boolean hasSerial();
      /**
       * <code>required string serial = 3;</code>
       */
      java.lang.String getSerial();
      /**
       * <code>required string serial = 3;</code>
       */
      com.google.protobuf.ByteString
          getSerialBytes();
  
      // required string color = 4;
      /**
       * <code>required string color = 4;</code>
       */
      boolean hasColor();
      /**
       * <code>required string color = 4;</code>
       */
      java.lang.String getColor();
      /**
       * <code>required string color = 4;</code>
       */
      com.google.protobuf.ByteString
          getColorBytes();
  
      // required string model = 5;
      /**
       * <code>required string model = 5;</code>
       */
      boolean hasModel();
      /**
       * <code>required string model = 5;</code>
       */
      java.lang.String getModel();
      /**
       * <code>required string model = 5;</code>
       */
      com.google.protobuf.ByteString
          getModelBytes();
  
      // required string prettyName = 6;
      /**
       * <code>required string prettyName = 6;</code>
       */
      boolean hasPrettyName();
      /**
       * <code>required string prettyName = 6;</code>
       */
      java.lang.String getPrettyName();
      /**
       * <code>required string prettyName = 6;</code>
       */
      com.google.protobuf.ByteString
          getPrettyNameBytes();
  
      // optional string idk = 7;
      /**
       * <code>optional string idk = 7;</code>
       */
      boolean hasIdk();
      /**
       * <code>optional string idk = 7;</code>
       */
      java.lang.String getIdk();
      /**
       * <code>optional string idk = 7;</code>
       */
      com.google.protobuf.ByteString
          getIdkBytes();
    }
    /**
     * Protobuf type {@code DeviceInfo}
     */
    public static final class DeviceInfo extends
        com.google.protobuf.GeneratedMessage
        implements DeviceInfoOrBuilder {
      // Use DeviceInfo.newBuilder() to construct.
      private DeviceInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private DeviceInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final DeviceInfo defaultInstance;
      public static DeviceInfo getDefaultInstance() {
        return defaultInstance;
      }
  
      public DeviceInfo getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private DeviceInfo(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                shortName_ = input.readBytes();
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                realName_ = input.readBytes();
                break;
              }
              case 26: {
                bitField0_ |= 0x00000004;
                serial_ = input.readBytes();
                break;
              }
              case 34: {
                bitField0_ |= 0x00000008;
                color_ = input.readBytes();
                break;
              }
              case 42: {
                bitField0_ |= 0x00000010;
                model_ = input.readBytes();
                break;
              }
              case 50: {
                bitField0_ |= 0x00000020;
                prettyName_ = input.readBytes();
                break;
              }
              case 58: {
                bitField0_ |= 0x00000040;
                idk_ = 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.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_DeviceInfo_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_DeviceInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.DeviceInfo.class, Protocol.DeviceInfo.Builder.class);
      }
  
      public static com.google.protobuf.Parser<DeviceInfo> PARSER =
          new com.google.protobuf.AbstractParser<DeviceInfo>() {
        public DeviceInfo parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new DeviceInfo(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<DeviceInfo> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required string shortName = 1;
      public static final int SHORTNAME_FIELD_NUMBER = 1;
      private java.lang.Object shortName_;
      /**
       * <code>required string shortName = 1;</code>
       */
      public boolean hasShortName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required string shortName = 1;</code>
       */
      public java.lang.String getShortName() {
        java.lang.Object ref = shortName_;
        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();
          if (bs.isValidUtf8()) {
            shortName_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string shortName = 1;</code>
       */
      public com.google.protobuf.ByteString
          getShortNameBytes() {
        java.lang.Object ref = shortName_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          shortName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required string realName = 2;
      public static final int REALNAME_FIELD_NUMBER = 2;
      private java.lang.Object realName_;
      /**
       * <code>required string realName = 2;</code>
       */
      public boolean hasRealName() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required string realName = 2;</code>
       */
      public java.lang.String getRealName() {
        java.lang.Object ref = realName_;
        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();
          if (bs.isValidUtf8()) {
            realName_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string realName = 2;</code>
       */
      public com.google.protobuf.ByteString
          getRealNameBytes() {
        java.lang.Object ref = realName_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          realName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required string serial = 3;
      public static final int SERIAL_FIELD_NUMBER = 3;
      private java.lang.Object serial_;
      /**
       * <code>required string serial = 3;</code>
       */
      public boolean hasSerial() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>required string serial = 3;</code>
       */
      public java.lang.String getSerial() {
        java.lang.Object ref = serial_;
        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();
          if (bs.isValidUtf8()) {
            serial_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string serial = 3;</code>
       */
      public com.google.protobuf.ByteString
          getSerialBytes() {
        java.lang.Object ref = serial_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          serial_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required string color = 4;
      public static final int COLOR_FIELD_NUMBER = 4;
      private java.lang.Object color_;
      /**
       * <code>required string color = 4;</code>
       */
      public boolean hasColor() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>required string color = 4;</code>
       */
      public java.lang.String getColor() {
        java.lang.Object ref = color_;
        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();
          if (bs.isValidUtf8()) {
            color_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string color = 4;</code>
       */
      public com.google.protobuf.ByteString
          getColorBytes() {
        java.lang.Object ref = color_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          color_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required string model = 5;
      public static final int MODEL_FIELD_NUMBER = 5;
      private java.lang.Object model_;
      /**
       * <code>required string model = 5;</code>
       */
      public boolean hasModel() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>required string model = 5;</code>
       */
      public java.lang.String getModel() {
        java.lang.Object ref = model_;
        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();
          if (bs.isValidUtf8()) {
            model_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string model = 5;</code>
       */
      public com.google.protobuf.ByteString
          getModelBytes() {
        java.lang.Object ref = model_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          model_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required string prettyName = 6;
      public static final int PRETTYNAME_FIELD_NUMBER = 6;
      private java.lang.Object prettyName_;
      /**
       * <code>required string prettyName = 6;</code>
       */
      public boolean hasPrettyName() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>required string prettyName = 6;</code>
       */
      public java.lang.String getPrettyName() {
        java.lang.Object ref = prettyName_;
        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();
          if (bs.isValidUtf8()) {
            prettyName_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string prettyName = 6;</code>
       */
      public com.google.protobuf.ByteString
          getPrettyNameBytes() {
        java.lang.Object ref = prettyName_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          prettyName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // optional string idk = 7;
      public static final int IDK_FIELD_NUMBER = 7;
      private java.lang.Object idk_;
      /**
       * <code>optional string idk = 7;</code>
       */
      public boolean hasIdk() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string idk = 7;</code>
       */
      public java.lang.String getIdk() {
        java.lang.Object ref = idk_;
        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();
          if (bs.isValidUtf8()) {
            idk_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string idk = 7;</code>
       */
      public com.google.protobuf.ByteString
          getIdkBytes() {
        java.lang.Object ref = idk_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          idk_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      private void initFields() {
        shortName_ = "";
        realName_ = "";
        serial_ = "";
        color_ = "";
        model_ = "";
        prettyName_ = "";
        idk_ = "";
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasShortName()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasRealName()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasSerial()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasColor()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasModel()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasPrettyName()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, getShortNameBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(2, getRealNameBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeBytes(3, getSerialBytes());
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          output.writeBytes(4, getColorBytes());
        }
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          output.writeBytes(5, getModelBytes());
        }
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          output.writeBytes(6, getPrettyNameBytes());
        }
        if (((bitField0_ & 0x00000040) == 0x00000040)) {
          output.writeBytes(7, getIdkBytes());
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, getShortNameBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, getRealNameBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(3, getSerialBytes());
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(4, getColorBytes());
        }
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(5, getModelBytes());
        }
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(6, getPrettyNameBytes());
        }
        if (((bitField0_ & 0x00000040) == 0x00000040)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(7, getIdkBytes());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.DeviceInfo parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.DeviceInfo parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.DeviceInfo parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.DeviceInfo parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.DeviceInfo parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.DeviceInfo parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.DeviceInfo parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.DeviceInfo parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.DeviceInfo parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.DeviceInfo parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.DeviceInfo prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code DeviceInfo}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.DeviceInfoOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_DeviceInfo_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_DeviceInfo_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.DeviceInfo.class, Protocol.DeviceInfo.Builder.class);
        }
  
        // Construct using Protobuf.DeviceInfo.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          shortName_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          realName_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          serial_ = "";
          bitField0_ = (bitField0_ & ~0x00000004);
          color_ = "";
          bitField0_ = (bitField0_ & ~0x00000008);
          model_ = "";
          bitField0_ = (bitField0_ & ~0x00000010);
          prettyName_ = "";
          bitField0_ = (bitField0_ & ~0x00000020);
          idk_ = "";
          bitField0_ = (bitField0_ & ~0x00000040);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_DeviceInfo_descriptor;
        }
  
        public Protocol.DeviceInfo getDefaultInstanceForType() {
          return Protocol.DeviceInfo.getDefaultInstance();
        }
  
        public Protocol.DeviceInfo build() {
          Protocol.DeviceInfo result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.DeviceInfo buildPartial() {
          Protocol.DeviceInfo result = new Protocol.DeviceInfo(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.shortName_ = shortName_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.realName_ = realName_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000004;
          }
          result.serial_ = serial_;
          if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
            to_bitField0_ |= 0x00000008;
          }
          result.color_ = color_;
          if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
            to_bitField0_ |= 0x00000010;
          }
          result.model_ = model_;
          if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
            to_bitField0_ |= 0x00000020;
          }
          result.prettyName_ = prettyName_;
          if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
            to_bitField0_ |= 0x00000040;
          }
          result.idk_ = idk_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.DeviceInfo) {
            return mergeFrom((Protocol.DeviceInfo)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.DeviceInfo other) {
          if (other == Protocol.DeviceInfo.getDefaultInstance()) return this;
          if (other.hasShortName()) {
            bitField0_ |= 0x00000001;
            shortName_ = other.shortName_;
            onChanged();
          }
          if (other.hasRealName()) {
            bitField0_ |= 0x00000002;
            realName_ = other.realName_;
            onChanged();
          }
          if (other.hasSerial()) {
            bitField0_ |= 0x00000004;
            serial_ = other.serial_;
            onChanged();
          }
          if (other.hasColor()) {
            bitField0_ |= 0x00000008;
            color_ = other.color_;
            onChanged();
          }
          if (other.hasModel()) {
            bitField0_ |= 0x00000010;
            model_ = other.model_;
            onChanged();
          }
          if (other.hasPrettyName()) {
            bitField0_ |= 0x00000020;
            prettyName_ = other.prettyName_;
            onChanged();
          }
          if (other.hasIdk()) {
            bitField0_ |= 0x00000040;
            idk_ = other.idk_;
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasShortName()) {
            
            return false;
          }
          if (!hasRealName()) {
            
            return false;
          }
          if (!hasSerial()) {
            
            return false;
          }
          if (!hasColor()) {
            
            return false;
          }
          if (!hasModel()) {
            
            return false;
          }
          if (!hasPrettyName()) {
            
            return false;
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.DeviceInfo parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.DeviceInfo) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required string shortName = 1;
        private java.lang.Object shortName_ = "";
        /**
         * <code>required string shortName = 1;</code>
         */
        public boolean hasShortName() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required string shortName = 1;</code>
         */
        public java.lang.String getShortName() {
          java.lang.Object ref = shortName_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            shortName_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string shortName = 1;</code>
         */
        public com.google.protobuf.ByteString
            getShortNameBytes() {
          java.lang.Object ref = shortName_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            shortName_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string shortName = 1;</code>
         */
        public Builder setShortName(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          shortName_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string shortName = 1;</code>
         */
        public Builder clearShortName() {
          bitField0_ = (bitField0_ & ~0x00000001);
          shortName_ = getDefaultInstance().getShortName();
          onChanged();
          return this;
        }
        /**
         * <code>required string shortName = 1;</code>
         */
        public Builder setShortNameBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          shortName_ = value;
          onChanged();
          return this;
        }
  
        // required string realName = 2;
        private java.lang.Object realName_ = "";
        /**
         * <code>required string realName = 2;</code>
         */
        public boolean hasRealName() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>required string realName = 2;</code>
         */
        public java.lang.String getRealName() {
          java.lang.Object ref = realName_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            realName_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string realName = 2;</code>
         */
        public com.google.protobuf.ByteString
            getRealNameBytes() {
          java.lang.Object ref = realName_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            realName_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string realName = 2;</code>
         */
        public Builder setRealName(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          realName_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string realName = 2;</code>
         */
        public Builder clearRealName() {
          bitField0_ = (bitField0_ & ~0x00000002);
          realName_ = getDefaultInstance().getRealName();
          onChanged();
          return this;
        }
        /**
         * <code>required string realName = 2;</code>
         */
        public Builder setRealNameBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          realName_ = value;
          onChanged();
          return this;
        }
  
        // required string serial = 3;
        private java.lang.Object serial_ = "";
        /**
         * <code>required string serial = 3;</code>
         */
        public boolean hasSerial() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>required string serial = 3;</code>
         */
        public java.lang.String getSerial() {
          java.lang.Object ref = serial_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            serial_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string serial = 3;</code>
         */
        public com.google.protobuf.ByteString
            getSerialBytes() {
          java.lang.Object ref = serial_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            serial_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string serial = 3;</code>
         */
        public Builder setSerial(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000004;
          serial_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string serial = 3;</code>
         */
        public Builder clearSerial() {
          bitField0_ = (bitField0_ & ~0x00000004);
          serial_ = getDefaultInstance().getSerial();
          onChanged();
          return this;
        }
        /**
         * <code>required string serial = 3;</code>
         */
        public Builder setSerialBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000004;
          serial_ = value;
          onChanged();
          return this;
        }
  
        // required string color = 4;
        private java.lang.Object color_ = "";
        /**
         * <code>required string color = 4;</code>
         */
        public boolean hasColor() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>required string color = 4;</code>
         */
        public java.lang.String getColor() {
          java.lang.Object ref = color_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            color_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string color = 4;</code>
         */
        public com.google.protobuf.ByteString
            getColorBytes() {
          java.lang.Object ref = color_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            color_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string color = 4;</code>
         */
        public Builder setColor(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000008;
          color_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string color = 4;</code>
         */
        public Builder clearColor() {
          bitField0_ = (bitField0_ & ~0x00000008);
          color_ = getDefaultInstance().getColor();
          onChanged();
          return this;
        }
        /**
         * <code>required string color = 4;</code>
         */
        public Builder setColorBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000008;
          color_ = value;
          onChanged();
          return this;
        }
  
        // required string model = 5;
        private java.lang.Object model_ = "";
        /**
         * <code>required string model = 5;</code>
         */
        public boolean hasModel() {
          return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>required string model = 5;</code>
         */
        public java.lang.String getModel() {
          java.lang.Object ref = model_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            model_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string model = 5;</code>
         */
        public com.google.protobuf.ByteString
            getModelBytes() {
          java.lang.Object ref = model_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            model_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string model = 5;</code>
         */
        public Builder setModel(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000010;
          model_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string model = 5;</code>
         */
        public Builder clearModel() {
          bitField0_ = (bitField0_ & ~0x00000010);
          model_ = getDefaultInstance().getModel();
          onChanged();
          return this;
        }
        /**
         * <code>required string model = 5;</code>
         */
        public Builder setModelBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000010;
          model_ = value;
          onChanged();
          return this;
        }
  
        // required string prettyName = 6;
        private java.lang.Object prettyName_ = "";
        /**
         * <code>required string prettyName = 6;</code>
         */
        public boolean hasPrettyName() {
          return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>required string prettyName = 6;</code>
         */
        public java.lang.String getPrettyName() {
          java.lang.Object ref = prettyName_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            prettyName_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string prettyName = 6;</code>
         */
        public com.google.protobuf.ByteString
            getPrettyNameBytes() {
          java.lang.Object ref = prettyName_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            prettyName_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string prettyName = 6;</code>
         */
        public Builder setPrettyName(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000020;
          prettyName_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string prettyName = 6;</code>
         */
        public Builder clearPrettyName() {
          bitField0_ = (bitField0_ & ~0x00000020);
          prettyName_ = getDefaultInstance().getPrettyName();
          onChanged();
          return this;
        }
        /**
         * <code>required string prettyName = 6;</code>
         */
        public Builder setPrettyNameBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000020;
          prettyName_ = value;
          onChanged();
          return this;
        }
  
        // optional string idk = 7;
        private java.lang.Object idk_ = "";
        /**
         * <code>optional string idk = 7;</code>
         */
        public boolean hasIdk() {
          return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>optional string idk = 7;</code>
         */
        public java.lang.String getIdk() {
          java.lang.Object ref = idk_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            idk_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string idk = 7;</code>
         */
        public com.google.protobuf.ByteString
            getIdkBytes() {
          java.lang.Object ref = idk_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            idk_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string idk = 7;</code>
         */
        public Builder setIdk(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000040;
          idk_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string idk = 7;</code>
         */
        public Builder clearIdk() {
          bitField0_ = (bitField0_ & ~0x00000040);
          idk_ = getDefaultInstance().getIdk();
          onChanged();
          return this;
        }
        /**
         * <code>optional string idk = 7;</code>
         */
        public Builder setIdkBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000040;
          idk_ = value;
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:DeviceInfo)
      }
  
      static {
        defaultInstance = new DeviceInfo(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:DeviceInfo)
    }
  
    public interface KeysOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // repeated .Key keySet = 1;
      /**
       * <code>repeated .Key keySet = 1;</code>
       */
      java.util.List<Protocol.Key> 
          getKeySetList();
      /**
       * <code>repeated .Key keySet = 1;</code>
       */
      Protocol.Key getKeySet(int index);
      /**
       * <code>repeated .Key keySet = 1;</code>
       */
      int getKeySetCount();
      /**
       * <code>repeated .Key keySet = 1;</code>
       */
      java.util.List<? extends Protocol.KeyOrBuilder> 
          getKeySetOrBuilderList();
      /**
       * <code>repeated .Key keySet = 1;</code>
       */
      Protocol.KeyOrBuilder getKeySetOrBuilder(
          int index);
    }
    /**
     * Protobuf type {@code Keys}
     */
    public static final class Keys extends
        com.google.protobuf.GeneratedMessage
        implements KeysOrBuilder {
      // Use Keys.newBuilder() to construct.
      private Keys(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Keys(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final Keys defaultInstance;
      public static Keys getDefaultInstance() {
        return defaultInstance;
      }
  
      public Keys getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Keys(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                  keySet_ = new java.util.ArrayList<Protocol.Key>();
                  mutable_bitField0_ |= 0x00000001;
                }
                keySet_.add(input.readMessage(Protocol.Key.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.getMessage()).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
            keySet_ = java.util.Collections.unmodifiableList(keySet_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_Keys_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_Keys_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.Keys.class, Protocol.Keys.Builder.class);
      }
  
      public static com.google.protobuf.Parser<Keys> PARSER =
          new com.google.protobuf.AbstractParser<Keys>() {
        public Keys parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Keys(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<Keys> getParserForType() {
        return PARSER;
      }
  
      // repeated .Key keySet = 1;
      public static final int KEYSET_FIELD_NUMBER = 1;
      private java.util.List<Protocol.Key> keySet_;
      /**
       * <code>repeated .Key keySet = 1;</code>
       */
      public java.util.List<Protocol.Key> getKeySetList() {
        return keySet_;
      }
      /**
       * <code>repeated .Key keySet = 1;</code>
       */
      public java.util.List<? extends Protocol.KeyOrBuilder> 
          getKeySetOrBuilderList() {
        return keySet_;
      }
      /**
       * <code>repeated .Key keySet = 1;</code>
       */
      public int getKeySetCount() {
        return keySet_.size();
      }
      /**
       * <code>repeated .Key keySet = 1;</code>
       */
      public Protocol.Key getKeySet(int index) {
        return keySet_.get(index);
      }
      /**
       * <code>repeated .Key keySet = 1;</code>
       */
      public Protocol.KeyOrBuilder getKeySetOrBuilder(
          int index) {
        return keySet_.get(index);
      }
  
      private void initFields() {
        keySet_ = java.util.Collections.emptyList();
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        for (int i = 0; i < getKeySetCount(); i++) {
          if (!getKeySet(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        for (int i = 0; i < keySet_.size(); i++) {
          output.writeMessage(1, keySet_.get(i));
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        for (int i = 0; i < keySet_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, keySet_.get(i));
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.Keys parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.Keys parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.Keys parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.Keys parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.Keys parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.Keys parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.Keys parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.Keys parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.Keys parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.Keys parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.Keys prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code Keys}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.KeysOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_Keys_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_Keys_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.Keys.class, Protocol.Keys.Builder.class);
        }
  
        // Construct using Protobuf.Keys.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getKeySetFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          if (keySetBuilder_ == null) {
            keySet_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            keySetBuilder_.clear();
          }
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_Keys_descriptor;
        }
  
        public Protocol.Keys getDefaultInstanceForType() {
          return Protocol.Keys.getDefaultInstance();
        }
  
        public Protocol.Keys build() {
          Protocol.Keys result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.Keys buildPartial() {
          Protocol.Keys result = new Protocol.Keys(this);
          int from_bitField0_ = bitField0_;
          if (keySetBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
              keySet_ = java.util.Collections.unmodifiableList(keySet_);
              bitField0_ = (bitField0_ & ~0x00000001);
            }
            result.keySet_ = keySet_;
          } else {
            result.keySet_ = keySetBuilder_.build();
          }
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.Keys) {
            return mergeFrom((Protocol.Keys)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.Keys other) {
          if (other == Protocol.Keys.getDefaultInstance()) return this;
          if (keySetBuilder_ == null) {
            if (!other.keySet_.isEmpty()) {
              if (keySet_.isEmpty()) {
                keySet_ = other.keySet_;
                bitField0_ = (bitField0_ & ~0x00000001);
              } else {
                ensureKeySetIsMutable();
                keySet_.addAll(other.keySet_);
              }
              onChanged();
            }
          } else {
            if (!other.keySet_.isEmpty()) {
              if (keySetBuilder_.isEmpty()) {
                keySetBuilder_.dispose();
                keySetBuilder_ = null;
                keySet_ = other.keySet_;
                bitField0_ = (bitField0_ & ~0x00000001);
                keySetBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getKeySetFieldBuilder() : null;
              } else {
                keySetBuilder_.addAllMessages(other.keySet_);
              }
            }
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          for (int i = 0; i < getKeySetCount(); i++) {
            if (!getKeySet(i).isInitialized()) {
              
              return false;
            }
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.Keys parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.Keys) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // repeated .Key keySet = 1;
        private java.util.List<Protocol.Key> keySet_ =
          java.util.Collections.emptyList();
        private void ensureKeySetIsMutable() {
          if (!((bitField0_ & 0x00000001) == 0x00000001)) {
            keySet_ = new java.util.ArrayList<Protocol.Key>(keySet_);
            bitField0_ |= 0x00000001;
           }
        }
  
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.Key, Protocol.Key.Builder, Protocol.KeyOrBuilder> keySetBuilder_;
  
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public java.util.List<Protocol.Key> getKeySetList() {
          if (keySetBuilder_ == null) {
            return java.util.Collections.unmodifiableList(keySet_);
          } else {
            return keySetBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public int getKeySetCount() {
          if (keySetBuilder_ == null) {
            return keySet_.size();
          } else {
            return keySetBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public Protocol.Key getKeySet(int index) {
          if (keySetBuilder_ == null) {
            return keySet_.get(index);
          } else {
            return keySetBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public Builder setKeySet(
            int index, Protocol.Key value) {
          if (keySetBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureKeySetIsMutable();
            keySet_.set(index, value);
            onChanged();
          } else {
            keySetBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public Builder setKeySet(
            int index, Protocol.Key.Builder builderForValue) {
          if (keySetBuilder_ == null) {
            ensureKeySetIsMutable();
            keySet_.set(index, builderForValue.build());
            onChanged();
          } else {
            keySetBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public Builder addKeySet(Protocol.Key value) {
          if (keySetBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureKeySetIsMutable();
            keySet_.add(value);
            onChanged();
          } else {
            keySetBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public Builder addKeySet(
            int index, Protocol.Key value) {
          if (keySetBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureKeySetIsMutable();
            keySet_.add(index, value);
            onChanged();
          } else {
            keySetBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public Builder addKeySet(
            Protocol.Key.Builder builderForValue) {
          if (keySetBuilder_ == null) {
            ensureKeySetIsMutable();
            keySet_.add(builderForValue.build());
            onChanged();
          } else {
            keySetBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public Builder addKeySet(
            int index, Protocol.Key.Builder builderForValue) {
          if (keySetBuilder_ == null) {
            ensureKeySetIsMutable();
            keySet_.add(index, builderForValue.build());
            onChanged();
          } else {
            keySetBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public Builder addAllKeySet(
            java.lang.Iterable<? extends Protocol.Key> values) {
          if (keySetBuilder_ == null) {
            ensureKeySetIsMutable();
            super.addAll(values, keySet_);
            onChanged();
          } else {
            keySetBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public Builder clearKeySet() {
          if (keySetBuilder_ == null) {
            keySet_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000001);
            onChanged();
          } else {
            keySetBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public Builder removeKeySet(int index) {
          if (keySetBuilder_ == null) {
            ensureKeySetIsMutable();
            keySet_.remove(index);
            onChanged();
          } else {
            keySetBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public Protocol.Key.Builder getKeySetBuilder(
            int index) {
          return getKeySetFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public Protocol.KeyOrBuilder getKeySetOrBuilder(
            int index) {
          if (keySetBuilder_ == null) {
            return keySet_.get(index);  } else {
            return keySetBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public java.util.List<? extends Protocol.KeyOrBuilder> 
             getKeySetOrBuilderList() {
          if (keySetBuilder_ != null) {
            return keySetBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(keySet_);
          }
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public Protocol.Key.Builder addKeySetBuilder() {
          return getKeySetFieldBuilder().addBuilder(
              Protocol.Key.getDefaultInstance());
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public Protocol.Key.Builder addKeySetBuilder(
            int index) {
          return getKeySetFieldBuilder().addBuilder(
              index, Protocol.Key.getDefaultInstance());
        }
        /**
         * <code>repeated .Key keySet = 1;</code>
         */
        public java.util.List<Protocol.Key.Builder> 
             getKeySetBuilderList() {
          return getKeySetFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.Key, Protocol.Key.Builder, Protocol.KeyOrBuilder> 
            getKeySetFieldBuilder() {
          if (keySetBuilder_ == null) {
            keySetBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                Protocol.Key, Protocol.Key.Builder, Protocol.KeyOrBuilder>(
                    keySet_,
                    ((bitField0_ & 0x00000001) == 0x00000001),
                    getParentForChildren(),
                    isClean());
            keySet_ = null;
          }
          return keySetBuilder_;
        }
  
        // @@protoc_insertion_point(builder_scope:Keys)
      }
  
      static {
        defaultInstance = new Keys(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:Keys)
    }
  
    public interface KeyOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required int32 index = 1;
      /**
       * <code>required int32 index = 1;</code>
       */
      boolean hasIndex();
      /**
       * <code>required int32 index = 1;</code>
       */
      int getIndex();
  
      // required string data = 2;
      /**
       * <code>required string data = 2;</code>
       */
      boolean hasData();
      /**
       * <code>required string data = 2;</code>
       */
      java.lang.String getData();
      /**
       * <code>required string data = 2;</code>
       */
      com.google.protobuf.ByteString
          getDataBytes();
    }
    /**
     * Protobuf type {@code Key}
     */
    public static final class Key extends
        com.google.protobuf.GeneratedMessage
        implements KeyOrBuilder {
      // Use Key.newBuilder() to construct.
      private Key(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Key(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final Key defaultInstance;
      public static Key getDefaultInstance() {
        return defaultInstance;
      }
  
      public Key getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Key(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 8: {
                bitField0_ |= 0x00000001;
                index_ = input.readInt32();
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                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.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_Key_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_Key_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.Key.class, Protocol.Key.Builder.class);
      }
  
      public static com.google.protobuf.Parser<Key> PARSER =
          new com.google.protobuf.AbstractParser<Key>() {
        public Key parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Key(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<Key> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required int32 index = 1;
      public static final int INDEX_FIELD_NUMBER = 1;
      private int index_;
      /**
       * <code>required int32 index = 1;</code>
       */
      public boolean hasIndex() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required int32 index = 1;</code>
       */
      public int getIndex() {
        return index_;
      }
  
      // required string data = 2;
      public static final int DATA_FIELD_NUMBER = 2;
      private java.lang.Object data_;
      /**
       * <code>required string data = 2;</code>
       */
      public boolean hasData() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required string data = 2;</code>
       */
      public java.lang.String getData() {
        java.lang.Object ref = data_;
        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();
          if (bs.isValidUtf8()) {
            data_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string data = 2;</code>
       */
      public com.google.protobuf.ByteString
          getDataBytes() {
        java.lang.Object ref = data_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          data_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      private void initFields() {
        index_ = 0;
        data_ = "";
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasIndex()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasData()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeInt32(1, index_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(2, getDataBytes());
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(1, index_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, getDataBytes());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.Key parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.Key parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.Key parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.Key parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.Key parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.Key parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.Key parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.Key parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.Key parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.Key parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.Key prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code Key}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.KeyOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_Key_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_Key_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.Key.class, Protocol.Key.Builder.class);
        }
  
        // Construct using Protobuf.Key.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          index_ = 0;
          bitField0_ = (bitField0_ & ~0x00000001);
          data_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_Key_descriptor;
        }
  
        public Protocol.Key getDefaultInstanceForType() {
          return Protocol.Key.getDefaultInstance();
        }
  
        public Protocol.Key build() {
          Protocol.Key result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.Key buildPartial() {
          Protocol.Key result = new Protocol.Key(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.index_ = index_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.data_ = data_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.Key) {
            return mergeFrom((Protocol.Key)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.Key other) {
          if (other == Protocol.Key.getDefaultInstance()) return this;
          if (other.hasIndex()) {
            setIndex(other.getIndex());
          }
          if (other.hasData()) {
            bitField0_ |= 0x00000002;
            data_ = other.data_;
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasIndex()) {
            
            return false;
          }
          if (!hasData()) {
            
            return false;
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.Key parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.Key) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required int32 index = 1;
        private int index_ ;
        /**
         * <code>required int32 index = 1;</code>
         */
        public boolean hasIndex() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required int32 index = 1;</code>
         */
        public int getIndex() {
          return index_;
        }
        /**
         * <code>required int32 index = 1;</code>
         */
        public Builder setIndex(int value) {
          bitField0_ |= 0x00000001;
          index_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int32 index = 1;</code>
         */
        public Builder clearIndex() {
          bitField0_ = (bitField0_ & ~0x00000001);
          index_ = 0;
          onChanged();
          return this;
        }
  
        // required string data = 2;
        private java.lang.Object data_ = "";
        /**
         * <code>required string data = 2;</code>
         */
        public boolean hasData() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>required string data = 2;</code>
         */
        public java.lang.String getData() {
          java.lang.Object ref = data_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            data_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string data = 2;</code>
         */
        public com.google.protobuf.ByteString
            getDataBytes() {
          java.lang.Object ref = data_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            data_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string data = 2;</code>
         */
        public Builder setData(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          data_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string data = 2;</code>
         */
        public Builder clearData() {
          bitField0_ = (bitField0_ & ~0x00000002);
          data_ = getDefaultInstance().getData();
          onChanged();
          return this;
        }
        /**
         * <code>required string data = 2;</code>
         */
        public Builder setDataBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          data_ = value;
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:Key)
      }
  
      static {
        defaultInstance = new Key(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:Key)
    }
  
    public interface GetFilesOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required bytes hash = 1;
      /**
       * <code>required bytes hash = 1;</code>
       */
      boolean hasHash();
      /**
       * <code>required bytes hash = 1;</code>
       */
      com.google.protobuf.ByteString getHash();
    }
    /**
     * Protobuf type {@code GetFiles}
     *
     * <pre>
     *POST this to getFiles, get an AuthChunk in response
     * </pre>
     */
    public static final class GetFiles extends
        com.google.protobuf.GeneratedMessage
        implements GetFilesOrBuilder {
      // Use GetFiles.newBuilder() to construct.
      private GetFiles(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private GetFiles(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final GetFiles defaultInstance;
      public static GetFiles getDefaultInstance() {
        return defaultInstance;
      }
  
      public GetFiles getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private GetFiles(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                hash_ = 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.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_GetFiles_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_GetFiles_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.GetFiles.class, Protocol.GetFiles.Builder.class);
      }
  
      public static com.google.protobuf.Parser<GetFiles> PARSER =
          new com.google.protobuf.AbstractParser<GetFiles>() {
        public GetFiles parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new GetFiles(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<GetFiles> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required bytes hash = 1;
      public static final int HASH_FIELD_NUMBER = 1;
      private com.google.protobuf.ByteString hash_;
      /**
       * <code>required bytes hash = 1;</code>
       */
      public boolean hasHash() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required bytes hash = 1;</code>
       */
      public com.google.protobuf.ByteString getHash() {
        return hash_;
      }
  
      private void initFields() {
        hash_ = com.google.protobuf.ByteString.EMPTY;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasHash()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, hash_);
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, hash_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.GetFiles parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.GetFiles parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.GetFiles parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.GetFiles parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.GetFiles parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.GetFiles parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.GetFiles parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.GetFiles parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.GetFiles parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.GetFiles parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.GetFiles prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code GetFiles}
       *
       * <pre>
       *POST this to getFiles, get an AuthChunk in response
       * </pre>
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.GetFilesOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_GetFiles_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_GetFiles_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.GetFiles.class, Protocol.GetFiles.Builder.class);
        }
  
        // Construct using Protobuf.GetFiles.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          hash_ = com.google.protobuf.ByteString.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_GetFiles_descriptor;
        }
  
        public Protocol.GetFiles getDefaultInstanceForType() {
          return Protocol.GetFiles.getDefaultInstance();
        }
  
        public Protocol.GetFiles build() {
          Protocol.GetFiles result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.GetFiles buildPartial() {
          Protocol.GetFiles result = new Protocol.GetFiles(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.hash_ = hash_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.GetFiles) {
            return mergeFrom((Protocol.GetFiles)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.GetFiles other) {
          if (other == Protocol.GetFiles.getDefaultInstance()) return this;
          if (other.hasHash()) {
            setHash(other.getHash());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasHash()) {
            
            return false;
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.GetFiles parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.GetFiles) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required bytes hash = 1;
        private com.google.protobuf.ByteString hash_ = com.google.protobuf.ByteString.EMPTY;
        /**
         * <code>required bytes hash = 1;</code>
         */
        public boolean hasHash() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required bytes hash = 1;</code>
         */
        public com.google.protobuf.ByteString getHash() {
          return hash_;
        }
        /**
         * <code>required bytes hash = 1;</code>
         */
        public Builder setHash(com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          hash_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required bytes hash = 1;</code>
         */
        public Builder clearHash() {
          bitField0_ = (bitField0_ & ~0x00000001);
          hash_ = getDefaultInstance().getHash();
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:GetFiles)
      }
  
      static {
        defaultInstance = new GetFiles(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:GetFiles)
    }
  
    public interface FileAuthOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // repeated .AuthChunk main = 1;
      /**
       * <code>repeated .AuthChunk main = 1;</code>
       */
      java.util.List<Protocol.AuthChunk> 
          getMainList();
      /**
       * <code>repeated .AuthChunk main = 1;</code>
       */
      Protocol.AuthChunk getMain(int index);
      /**
       * <code>repeated .AuthChunk main = 1;</code>
       */
      int getMainCount();
      /**
       * <code>repeated .AuthChunk main = 1;</code>
       */
      java.util.List<? extends Protocol.AuthChunkOrBuilder> 
          getMainOrBuilderList();
      /**
       * <code>repeated .AuthChunk main = 1;</code>
       */
      Protocol.AuthChunkOrBuilder getMainOrBuilder(
          int index);
    }
    /**
     * Protobuf type {@code FileAuth}
     *
     * <pre>
     *POST this to "authorizeGet"
     * </pre>
     */
    public static final class FileAuth extends
        com.google.protobuf.GeneratedMessage
        implements FileAuthOrBuilder {
      // Use FileAuth.newBuilder() to construct.
      private FileAuth(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private FileAuth(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final FileAuth defaultInstance;
      public static FileAuth getDefaultInstance() {
        return defaultInstance;
      }
  
      public FileAuth getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private FileAuth(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                  main_ = new java.util.ArrayList<Protocol.AuthChunk>();
                  mutable_bitField0_ |= 0x00000001;
                }
                main_.add(input.readMessage(Protocol.AuthChunk.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.getMessage()).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
            main_ = java.util.Collections.unmodifiableList(main_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_FileAuth_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_FileAuth_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.FileAuth.class, Protocol.FileAuth.Builder.class);
      }
  
      public static com.google.protobuf.Parser<FileAuth> PARSER =
          new com.google.protobuf.AbstractParser<FileAuth>() {
        public FileAuth parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new FileAuth(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<FileAuth> getParserForType() {
        return PARSER;
      }
  
      // repeated .AuthChunk main = 1;
      public static final int MAIN_FIELD_NUMBER = 1;
      private java.util.List<Protocol.AuthChunk> main_;
      /**
       * <code>repeated .AuthChunk main = 1;</code>
       */
      public java.util.List<Protocol.AuthChunk> getMainList() {
        return main_;
      }
      /**
       * <code>repeated .AuthChunk main = 1;</code>
       */
      public java.util.List<? extends Protocol.AuthChunkOrBuilder> 
          getMainOrBuilderList() {
        return main_;
      }
      /**
       * <code>repeated .AuthChunk main = 1;</code>
       */
      public int getMainCount() {
        return main_.size();
      }
      /**
       * <code>repeated .AuthChunk main = 1;</code>
       */
      public Protocol.AuthChunk getMain(int index) {
        return main_.get(index);
      }
      /**
       * <code>repeated .AuthChunk main = 1;</code>
       */
      public Protocol.AuthChunkOrBuilder getMainOrBuilder(
          int index) {
        return main_.get(index);
      }
  
      private void initFields() {
        main_ = java.util.Collections.emptyList();
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        for (int i = 0; i < getMainCount(); i++) {
          if (!getMain(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        for (int i = 0; i < main_.size(); i++) {
          output.writeMessage(1, main_.get(i));
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        for (int i = 0; i < main_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, main_.get(i));
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.FileAuth parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.FileAuth parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.FileAuth parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.FileAuth parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.FileAuth parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.FileAuth parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.FileAuth parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.FileAuth parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.FileAuth parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.FileAuth parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.FileAuth prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code FileAuth}
       *
       * <pre>
       *POST this to "authorizeGet"
       * </pre>
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.FileAuthOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_FileAuth_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_FileAuth_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.FileAuth.class, Protocol.FileAuth.Builder.class);
        }
  
        // Construct using Protobuf.FileAuth.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getMainFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          if (mainBuilder_ == null) {
            main_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            mainBuilder_.clear();
          }
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_FileAuth_descriptor;
        }
  
        public Protocol.FileAuth getDefaultInstanceForType() {
          return Protocol.FileAuth.getDefaultInstance();
        }
  
        public Protocol.FileAuth build() {
          Protocol.FileAuth result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.FileAuth buildPartial() {
          Protocol.FileAuth result = new Protocol.FileAuth(this);
          int from_bitField0_ = bitField0_;
          if (mainBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
              main_ = java.util.Collections.unmodifiableList(main_);
              bitField0_ = (bitField0_ & ~0x00000001);
            }
            result.main_ = main_;
          } else {
            result.main_ = mainBuilder_.build();
          }
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.FileAuth) {
            return mergeFrom((Protocol.FileAuth)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.FileAuth other) {
          if (other == Protocol.FileAuth.getDefaultInstance()) return this;
          if (mainBuilder_ == null) {
            if (!other.main_.isEmpty()) {
              if (main_.isEmpty()) {
                main_ = other.main_;
                bitField0_ = (bitField0_ & ~0x00000001);
              } else {
                ensureMainIsMutable();
                main_.addAll(other.main_);
              }
              onChanged();
            }
          } else {
            if (!other.main_.isEmpty()) {
              if (mainBuilder_.isEmpty()) {
                mainBuilder_.dispose();
                mainBuilder_ = null;
                main_ = other.main_;
                bitField0_ = (bitField0_ & ~0x00000001);
                mainBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getMainFieldBuilder() : null;
              } else {
                mainBuilder_.addAllMessages(other.main_);
              }
            }
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          for (int i = 0; i < getMainCount(); i++) {
            if (!getMain(i).isInitialized()) {
              
              return false;
            }
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.FileAuth parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.FileAuth) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // repeated .AuthChunk main = 1;
        private java.util.List<Protocol.AuthChunk> main_ =
          java.util.Collections.emptyList();
        private void ensureMainIsMutable() {
          if (!((bitField0_ & 0x00000001) == 0x00000001)) {
            main_ = new java.util.ArrayList<Protocol.AuthChunk>(main_);
            bitField0_ |= 0x00000001;
           }
        }
  
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.AuthChunk, Protocol.AuthChunk.Builder, Protocol.AuthChunkOrBuilder> mainBuilder_;
  
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public java.util.List<Protocol.AuthChunk> getMainList() {
          if (mainBuilder_ == null) {
            return java.util.Collections.unmodifiableList(main_);
          } else {
            return mainBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public int getMainCount() {
          if (mainBuilder_ == null) {
            return main_.size();
          } else {
            return mainBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public Protocol.AuthChunk getMain(int index) {
          if (mainBuilder_ == null) {
            return main_.get(index);
          } else {
            return mainBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public Builder setMain(
            int index, Protocol.AuthChunk value) {
          if (mainBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureMainIsMutable();
            main_.set(index, value);
            onChanged();
          } else {
            mainBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public Builder setMain(
            int index, Protocol.AuthChunk.Builder builderForValue) {
          if (mainBuilder_ == null) {
            ensureMainIsMutable();
            main_.set(index, builderForValue.build());
            onChanged();
          } else {
            mainBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public Builder addMain(Protocol.AuthChunk value) {
          if (mainBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureMainIsMutable();
            main_.add(value);
            onChanged();
          } else {
            mainBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public Builder addMain(
            int index, Protocol.AuthChunk value) {
          if (mainBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureMainIsMutable();
            main_.add(index, value);
            onChanged();
          } else {
            mainBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public Builder addMain(
            Protocol.AuthChunk.Builder builderForValue) {
          if (mainBuilder_ == null) {
            ensureMainIsMutable();
            main_.add(builderForValue.build());
            onChanged();
          } else {
            mainBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public Builder addMain(
            int index, Protocol.AuthChunk.Builder builderForValue) {
          if (mainBuilder_ == null) {
            ensureMainIsMutable();
            main_.add(index, builderForValue.build());
            onChanged();
          } else {
            mainBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public Builder addAllMain(
            java.lang.Iterable<? extends Protocol.AuthChunk> values) {
          if (mainBuilder_ == null) {
            ensureMainIsMutable();
            super.addAll(values, main_);
            onChanged();
          } else {
            mainBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public Builder clearMain() {
          if (mainBuilder_ == null) {
            main_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000001);
            onChanged();
          } else {
            mainBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public Builder removeMain(int index) {
          if (mainBuilder_ == null) {
            ensureMainIsMutable();
            main_.remove(index);
            onChanged();
          } else {
            mainBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public Protocol.AuthChunk.Builder getMainBuilder(
            int index) {
          return getMainFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public Protocol.AuthChunkOrBuilder getMainOrBuilder(
            int index) {
          if (mainBuilder_ == null) {
            return main_.get(index);  } else {
            return mainBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public java.util.List<? extends Protocol.AuthChunkOrBuilder> 
             getMainOrBuilderList() {
          if (mainBuilder_ != null) {
            return mainBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(main_);
          }
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public Protocol.AuthChunk.Builder addMainBuilder() {
          return getMainFieldBuilder().addBuilder(
              Protocol.AuthChunk.getDefaultInstance());
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public Protocol.AuthChunk.Builder addMainBuilder(
            int index) {
          return getMainFieldBuilder().addBuilder(
              index, Protocol.AuthChunk.getDefaultInstance());
        }
        /**
         * <code>repeated .AuthChunk main = 1;</code>
         */
        public java.util.List<Protocol.AuthChunk.Builder> 
             getMainBuilderList() {
          return getMainFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.AuthChunk, Protocol.AuthChunk.Builder, Protocol.AuthChunkOrBuilder> 
            getMainFieldBuilder() {
          if (mainBuilder_ == null) {
            mainBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                Protocol.AuthChunk, Protocol.AuthChunk.Builder, Protocol.AuthChunkOrBuilder>(
                    main_,
                    ((bitField0_ & 0x00000001) == 0x00000001),
                    getParentForChildren(),
                    isClean());
            main_ = null;
          }
          return mainBuilder_;
        }
  
        // @@protoc_insertion_point(builder_scope:FileAuth)
      }
  
      static {
        defaultInstance = new FileAuth(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:FileAuth)
    }
  
    public interface AuthChunkOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required bytes checksum = 1;
      /**
       * <code>required bytes checksum = 1;</code>
       *
       * <pre>
       *First in header
       * </pre>
       */
      boolean hasChecksum();
      /**
       * <code>required bytes checksum = 1;</code>
       *
       * <pre>
       *First in header
       * </pre>
       */
      com.google.protobuf.ByteString getChecksum();
  
      // required string authToken = 2;
      /**
       * <code>required string authToken = 2;</code>
       *
       * <pre>
       *Second in header
       * </pre>
       */
      boolean hasAuthToken();
      /**
       * <code>required string authToken = 2;</code>
       *
       * <pre>
       *Second in header
       * </pre>
       */
      java.lang.String getAuthToken();
      /**
       * <code>required string authToken = 2;</code>
       *
       * <pre>
       *Second in header
       * </pre>
       */
      com.google.protobuf.ByteString
          getAuthTokenBytes();
    }
    /**
     * Protobuf type {@code AuthChunk}
     *
     * <pre>
     *Also response of getFiles
     * </pre>
     */
    public static final class AuthChunk extends
        com.google.protobuf.GeneratedMessage
        implements AuthChunkOrBuilder {
      // Use AuthChunk.newBuilder() to construct.
      private AuthChunk(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private AuthChunk(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final AuthChunk defaultInstance;
      public static AuthChunk getDefaultInstance() {
        return defaultInstance;
      }
  
      public AuthChunk getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private AuthChunk(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                checksum_ = input.readBytes();
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                authToken_ = 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.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_AuthChunk_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_AuthChunk_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.AuthChunk.class, Protocol.AuthChunk.Builder.class);
      }
  
      public static com.google.protobuf.Parser<AuthChunk> PARSER =
          new com.google.protobuf.AbstractParser<AuthChunk>() {
        public AuthChunk parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new AuthChunk(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<AuthChunk> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required bytes checksum = 1;
      public static final int CHECKSUM_FIELD_NUMBER = 1;
      private com.google.protobuf.ByteString checksum_;
      /**
       * <code>required bytes checksum = 1;</code>
       *
       * <pre>
       *First in header
       * </pre>
       */
      public boolean hasChecksum() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required bytes checksum = 1;</code>
       *
       * <pre>
       *First in header
       * </pre>
       */
      public com.google.protobuf.ByteString getChecksum() {
        return checksum_;
      }
  
      // required string authToken = 2;
      public static final int AUTHTOKEN_FIELD_NUMBER = 2;
      private java.lang.Object authToken_;
      /**
       * <code>required string authToken = 2;</code>
       *
       * <pre>
       *Second in header
       * </pre>
       */
      public boolean hasAuthToken() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required string authToken = 2;</code>
       *
       * <pre>
       *Second in header
       * </pre>
       */
      public java.lang.String getAuthToken() {
        java.lang.Object ref = authToken_;
        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();
          if (bs.isValidUtf8()) {
            authToken_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string authToken = 2;</code>
       *
       * <pre>
       *Second in header
       * </pre>
       */
      public com.google.protobuf.ByteString
          getAuthTokenBytes() {
        java.lang.Object ref = authToken_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          authToken_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      private void initFields() {
        checksum_ = com.google.protobuf.ByteString.EMPTY;
        authToken_ = "";
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasChecksum()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasAuthToken()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, checksum_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(2, getAuthTokenBytes());
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, checksum_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, getAuthTokenBytes());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.AuthChunk parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.AuthChunk parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.AuthChunk parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.AuthChunk parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.AuthChunk parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.AuthChunk parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.AuthChunk parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.AuthChunk parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.AuthChunk parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.AuthChunk parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.AuthChunk prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code AuthChunk}
       *
       * <pre>
       *Also response of getFiles
       * </pre>
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.AuthChunkOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_AuthChunk_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_AuthChunk_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.AuthChunk.class, Protocol.AuthChunk.Builder.class);
        }
  
        // Construct using Protobuf.AuthChunk.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          checksum_ = com.google.protobuf.ByteString.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          authToken_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_AuthChunk_descriptor;
        }
  
        public Protocol.AuthChunk getDefaultInstanceForType() {
          return Protocol.AuthChunk.getDefaultInstance();
        }
  
        public Protocol.AuthChunk build() {
          Protocol.AuthChunk result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.AuthChunk buildPartial() {
          Protocol.AuthChunk result = new Protocol.AuthChunk(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.checksum_ = checksum_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.authToken_ = authToken_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.AuthChunk) {
            return mergeFrom((Protocol.AuthChunk)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.AuthChunk other) {
          if (other == Protocol.AuthChunk.getDefaultInstance()) return this;
          if (other.hasChecksum()) {
            setChecksum(other.getChecksum());
          }
          if (other.hasAuthToken()) {
            bitField0_ |= 0x00000002;
            authToken_ = other.authToken_;
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasChecksum()) {
            
            return false;
          }
          if (!hasAuthToken()) {
            
            return false;
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.AuthChunk parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.AuthChunk) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required bytes checksum = 1;
        private com.google.protobuf.ByteString checksum_ = com.google.protobuf.ByteString.EMPTY;
        /**
         * <code>required bytes checksum = 1;</code>
         *
         * <pre>
         *First in header
         * </pre>
         */
        public boolean hasChecksum() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required bytes checksum = 1;</code>
         *
         * <pre>
         *First in header
         * </pre>
         */
        public com.google.protobuf.ByteString getChecksum() {
          return checksum_;
        }
        /**
         * <code>required bytes checksum = 1;</code>
         *
         * <pre>
         *First in header
         * </pre>
         */
        public Builder setChecksum(com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          checksum_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required bytes checksum = 1;</code>
         *
         * <pre>
         *First in header
         * </pre>
         */
        public Builder clearChecksum() {
          bitField0_ = (bitField0_ & ~0x00000001);
          checksum_ = getDefaultInstance().getChecksum();
          onChanged();
          return this;
        }
  
        // required string authToken = 2;
        private java.lang.Object authToken_ = "";
        /**
         * <code>required string authToken = 2;</code>
         *
         * <pre>
         *Second in header
         * </pre>
         */
        public boolean hasAuthToken() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>required string authToken = 2;</code>
         *
         * <pre>
         *Second in header
         * </pre>
         */
        public java.lang.String getAuthToken() {
          java.lang.Object ref = authToken_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            authToken_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string authToken = 2;</code>
         *
         * <pre>
         *Second in header
         * </pre>
         */
        public com.google.protobuf.ByteString
            getAuthTokenBytes() {
          java.lang.Object ref = authToken_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            authToken_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string authToken = 2;</code>
         *
         * <pre>
         *Second in header
         * </pre>
         */
        public Builder setAuthToken(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          authToken_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string authToken = 2;</code>
         *
         * <pre>
         *Second in header
         * </pre>
         */
        public Builder clearAuthToken() {
          bitField0_ = (bitField0_ & ~0x00000002);
          authToken_ = getDefaultInstance().getAuthToken();
          onChanged();
          return this;
        }
        /**
         * <code>required string authToken = 2;</code>
         *
         * <pre>
         *Second in header
         * </pre>
         */
        public Builder setAuthTokenBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          authToken_ = value;
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:AuthChunk)
      }
  
      static {
        defaultInstance = new AuthChunk(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:AuthChunk)
    }
  
    public interface AuthorizeGetOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required .FileChecksumStorageHostChunkLists data = 1;
      /**
       * <code>required .FileChecksumStorageHostChunkLists data = 1;</code>
       */
      boolean hasData();
      /**
       * <code>required .FileChecksumStorageHostChunkLists data = 1;</code>
       */
      Protocol.FileChecksumStorageHostChunkLists getData();
      /**
       * <code>required .FileChecksumStorageHostChunkLists data = 1;</code>
       */
      Protocol.FileChecksumStorageHostChunkListsOrBuilder getDataOrBuilder();
  
      // required int32 verbosity = 4;
      /**
       * <code>required int32 verbosity = 4;</code>
       *
       * <pre>
       *Usually 2
       * </pre>
       */
      boolean hasVerbosity();
      /**
       * <code>required int32 verbosity = 4;</code>
       *
       * <pre>
       *Usually 2
       * </pre>
       */
      int getVerbosity();
    }
    /**
     * Protobuf type {@code AuthorizeGet}
     *
     * <pre>
     *Response from "authorizeGet"
     * </pre>
     */
    public static final class AuthorizeGet extends
        com.google.protobuf.GeneratedMessage
        implements AuthorizeGetOrBuilder {
      // Use AuthorizeGet.newBuilder() to construct.
      private AuthorizeGet(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private AuthorizeGet(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final AuthorizeGet defaultInstance;
      public static AuthorizeGet getDefaultInstance() {
        return defaultInstance;
      }
  
      public AuthorizeGet getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private AuthorizeGet(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                Protocol.FileChecksumStorageHostChunkLists.Builder subBuilder = null;
                if (((bitField0_ & 0x00000001) == 0x00000001)) {
                  subBuilder = data_.toBuilder();
                }
                data_ = input.readMessage(Protocol.FileChecksumStorageHostChunkLists.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(data_);
                  data_ = subBuilder.buildPartial();
                }
                bitField0_ |= 0x00000001;
                break;
              }
              case 32: {
                bitField0_ |= 0x00000002;
                verbosity_ = 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.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_AuthorizeGet_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_AuthorizeGet_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.AuthorizeGet.class, Protocol.AuthorizeGet.Builder.class);
      }
  
      public static com.google.protobuf.Parser<AuthorizeGet> PARSER =
          new com.google.protobuf.AbstractParser<AuthorizeGet>() {
        public AuthorizeGet parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new AuthorizeGet(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<AuthorizeGet> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required .FileChecksumStorageHostChunkLists data = 1;
      public static final int DATA_FIELD_NUMBER = 1;
      private Protocol.FileChecksumStorageHostChunkLists data_;
      /**
       * <code>required .FileChecksumStorageHostChunkLists data = 1;</code>
       */
      public boolean hasData() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required .FileChecksumStorageHostChunkLists data = 1;</code>
       */
      public Protocol.FileChecksumStorageHostChunkLists getData() {
        return data_;
      }
      /**
       * <code>required .FileChecksumStorageHostChunkLists data = 1;</code>
       */
      public Protocol.FileChecksumStorageHostChunkListsOrBuilder getDataOrBuilder() {
        return data_;
      }
  
      // required int32 verbosity = 4;
      public static final int VERBOSITY_FIELD_NUMBER = 4;
      private int verbosity_;
      /**
       * <code>required int32 verbosity = 4;</code>
       *
       * <pre>
       *Usually 2
       * </pre>
       */
      public boolean hasVerbosity() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required int32 verbosity = 4;</code>
       *
       * <pre>
       *Usually 2
       * </pre>
       */
      public int getVerbosity() {
        return verbosity_;
      }
  
      private void initFields() {
        data_ = Protocol.FileChecksumStorageHostChunkLists.getDefaultInstance();
        verbosity_ = 0;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasData()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasVerbosity()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!getData().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeMessage(1, data_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeInt32(4, verbosity_);
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, data_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(4, verbosity_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.AuthorizeGet parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.AuthorizeGet parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.AuthorizeGet parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.AuthorizeGet parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.AuthorizeGet parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.AuthorizeGet parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.AuthorizeGet parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.AuthorizeGet parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.AuthorizeGet parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.AuthorizeGet parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.AuthorizeGet prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code AuthorizeGet}
       *
       * <pre>
       *Response from "authorizeGet"
       * </pre>
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.AuthorizeGetOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_AuthorizeGet_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_AuthorizeGet_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.AuthorizeGet.class, Protocol.AuthorizeGet.Builder.class);
        }
  
        // Construct using Protobuf.AuthorizeGet.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getDataFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          if (dataBuilder_ == null) {
            data_ = Protocol.FileChecksumStorageHostChunkLists.getDefaultInstance();
          } else {
            dataBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          verbosity_ = 0;
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_AuthorizeGet_descriptor;
        }
  
        public Protocol.AuthorizeGet getDefaultInstanceForType() {
          return Protocol.AuthorizeGet.getDefaultInstance();
        }
  
        public Protocol.AuthorizeGet build() {
          Protocol.AuthorizeGet result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.AuthorizeGet buildPartial() {
          Protocol.AuthorizeGet result = new Protocol.AuthorizeGet(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          if (dataBuilder_ == null) {
            result.data_ = data_;
          } else {
            result.data_ = dataBuilder_.build();
          }
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.verbosity_ = verbosity_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.AuthorizeGet) {
            return mergeFrom((Protocol.AuthorizeGet)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.AuthorizeGet other) {
          if (other == Protocol.AuthorizeGet.getDefaultInstance()) return this;
          if (other.hasData()) {
            mergeData(other.getData());
          }
          if (other.hasVerbosity()) {
            setVerbosity(other.getVerbosity());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasData()) {
            
            return false;
          }
          if (!hasVerbosity()) {
            
            return false;
          }
          if (!getData().isInitialized()) {
            
            return false;
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.AuthorizeGet parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.AuthorizeGet) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required .FileChecksumStorageHostChunkLists data = 1;
        private Protocol.FileChecksumStorageHostChunkLists data_ = Protocol.FileChecksumStorageHostChunkLists.getDefaultInstance();
        private com.google.protobuf.SingleFieldBuilder<
            Protocol.FileChecksumStorageHostChunkLists, Protocol.FileChecksumStorageHostChunkLists.Builder, Protocol.FileChecksumStorageHostChunkListsOrBuilder> dataBuilder_;
        /**
         * <code>required .FileChecksumStorageHostChunkLists data = 1;</code>
         */
        public boolean hasData() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required .FileChecksumStorageHostChunkLists data = 1;</code>
         */
        public Protocol.FileChecksumStorageHostChunkLists getData() {
          if (dataBuilder_ == null) {
            return data_;
          } else {
            return dataBuilder_.getMessage();
          }
        }
        /**
         * <code>required .FileChecksumStorageHostChunkLists data = 1;</code>
         */
        public Builder setData(Protocol.FileChecksumStorageHostChunkLists value) {
          if (dataBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            data_ = value;
            onChanged();
          } else {
            dataBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <code>required .FileChecksumStorageHostChunkLists data = 1;</code>
         */
        public Builder setData(
            Protocol.FileChecksumStorageHostChunkLists.Builder builderForValue) {
          if (dataBuilder_ == null) {
            data_ = builderForValue.build();
            onChanged();
          } else {
            dataBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <code>required .FileChecksumStorageHostChunkLists data = 1;</code>
         */
        public Builder mergeData(Protocol.FileChecksumStorageHostChunkLists value) {
          if (dataBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001) &&
                data_ != Protocol.FileChecksumStorageHostChunkLists.getDefaultInstance()) {
              data_ =
                Protocol.FileChecksumStorageHostChunkLists.newBuilder(data_).mergeFrom(value).buildPartial();
            } else {
              data_ = value;
            }
            onChanged();
          } else {
            dataBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <code>required .FileChecksumStorageHostChunkLists data = 1;</code>
         */
        public Builder clearData() {
          if (dataBuilder_ == null) {
            data_ = Protocol.FileChecksumStorageHostChunkLists.getDefaultInstance();
            onChanged();
          } else {
            dataBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
        /**
         * <code>required .FileChecksumStorageHostChunkLists data = 1;</code>
         */
        public Protocol.FileChecksumStorageHostChunkLists.Builder getDataBuilder() {
          bitField0_ |= 0x00000001;
          onChanged();
          return getDataFieldBuilder().getBuilder();
        }
        /**
         * <code>required .FileChecksumStorageHostChunkLists data = 1;</code>
         */
        public Protocol.FileChecksumStorageHostChunkListsOrBuilder getDataOrBuilder() {
          if (dataBuilder_ != null) {
            return dataBuilder_.getMessageOrBuilder();
          } else {
            return data_;
          }
        }
        /**
         * <code>required .FileChecksumStorageHostChunkLists data = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilder<
            Protocol.FileChecksumStorageHostChunkLists, Protocol.FileChecksumStorageHostChunkLists.Builder, Protocol.FileChecksumStorageHostChunkListsOrBuilder> 
            getDataFieldBuilder() {
          if (dataBuilder_ == null) {
            dataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                Protocol.FileChecksumStorageHostChunkLists, Protocol.FileChecksumStorageHostChunkLists.Builder, Protocol.FileChecksumStorageHostChunkListsOrBuilder>(
                    data_,
                    getParentForChildren(),
                    isClean());
            data_ = null;
          }
          return dataBuilder_;
        }
  
        // required int32 verbosity = 4;
        private int verbosity_ ;
        /**
         * <code>required int32 verbosity = 4;</code>
         *
         * <pre>
         *Usually 2
         * </pre>
         */
        public boolean hasVerbosity() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>required int32 verbosity = 4;</code>
         *
         * <pre>
         *Usually 2
         * </pre>
         */
        public int getVerbosity() {
          return verbosity_;
        }
        /**
         * <code>required int32 verbosity = 4;</code>
         *
         * <pre>
         *Usually 2
         * </pre>
         */
        public Builder setVerbosity(int value) {
          bitField0_ |= 0x00000002;
          verbosity_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int32 verbosity = 4;</code>
         *
         * <pre>
         *Usually 2
         * </pre>
         */
        public Builder clearVerbosity() {
          bitField0_ = (bitField0_ & ~0x00000002);
          verbosity_ = 0;
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:AuthorizeGet)
      }
  
      static {
        defaultInstance = new AuthorizeGet(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:AuthorizeGet)
    }
  
    public interface FileChecksumStorageHostChunkListsOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // repeated .StorageHostChunkList storage_host_chunk_list = 1;
      /**
       * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
       */
      java.util.List<Protocol.StorageHostChunkList> 
          getStorageHostChunkListList();
      /**
       * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
       */
      Protocol.StorageHostChunkList getStorageHostChunkList(int index);
      /**
       * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
       */
      int getStorageHostChunkListCount();
      /**
       * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
       */
      java.util.List<? extends Protocol.StorageHostChunkListOrBuilder> 
          getStorageHostChunkListOrBuilderList();
      /**
       * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
       */
      Protocol.StorageHostChunkListOrBuilder getStorageHostChunkListOrBuilder(
          int index);
  
      // repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;
      /**
       * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
       */
      java.util.List<Protocol.FileChecksumChunkReferences> 
          getFileChecksumChunkRefListList();
      /**
       * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
       */
      Protocol.FileChecksumChunkReferences getFileChecksumChunkRefList(int index);
      /**
       * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
       */
      int getFileChecksumChunkRefListCount();
      /**
       * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
       */
      java.util.List<? extends Protocol.FileChecksumChunkReferencesOrBuilder> 
          getFileChecksumChunkRefListOrBuilderList();
      /**
       * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
       */
      Protocol.FileChecksumChunkReferencesOrBuilder getFileChecksumChunkRefListOrBuilder(
          int index);
    }
    /**
     * Protobuf type {@code FileChecksumStorageHostChunkLists}
     */
    public static final class FileChecksumStorageHostChunkLists extends
        com.google.protobuf.GeneratedMessage
        implements FileChecksumStorageHostChunkListsOrBuilder {
      // Use FileChecksumStorageHostChunkLists.newBuilder() to construct.
      private FileChecksumStorageHostChunkLists(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private FileChecksumStorageHostChunkLists(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final FileChecksumStorageHostChunkLists defaultInstance;
      public static FileChecksumStorageHostChunkLists getDefaultInstance() {
        return defaultInstance;
      }
  
      public FileChecksumStorageHostChunkLists getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private FileChecksumStorageHostChunkLists(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                  storageHostChunkList_ = new java.util.ArrayList<Protocol.StorageHostChunkList>();
                  mutable_bitField0_ |= 0x00000001;
                }
                storageHostChunkList_.add(input.readMessage(Protocol.StorageHostChunkList.PARSER, extensionRegistry));
                break;
              }
              case 18: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  fileChecksumChunkRefList_ = new java.util.ArrayList<Protocol.FileChecksumChunkReferences>();
                  mutable_bitField0_ |= 0x00000002;
                }
                fileChecksumChunkRefList_.add(input.readMessage(Protocol.FileChecksumChunkReferences.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.getMessage()).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
            storageHostChunkList_ = java.util.Collections.unmodifiableList(storageHostChunkList_);
          }
          if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
            fileChecksumChunkRefList_ = java.util.Collections.unmodifiableList(fileChecksumChunkRefList_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_FileChecksumStorageHostChunkLists_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_FileChecksumStorageHostChunkLists_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.FileChecksumStorageHostChunkLists.class, Protocol.FileChecksumStorageHostChunkLists.Builder.class);
      }
  
      public static com.google.protobuf.Parser<FileChecksumStorageHostChunkLists> PARSER =
          new com.google.protobuf.AbstractParser<FileChecksumStorageHostChunkLists>() {
        public FileChecksumStorageHostChunkLists parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new FileChecksumStorageHostChunkLists(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<FileChecksumStorageHostChunkLists> getParserForType() {
        return PARSER;
      }
  
      // repeated .StorageHostChunkList storage_host_chunk_list = 1;
      public static final int STORAGE_HOST_CHUNK_LIST_FIELD_NUMBER = 1;
      private java.util.List<Protocol.StorageHostChunkList> storageHostChunkList_;
      /**
       * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
       */
      public java.util.List<Protocol.StorageHostChunkList> getStorageHostChunkListList() {
        return storageHostChunkList_;
      }
      /**
       * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
       */
      public java.util.List<? extends Protocol.StorageHostChunkListOrBuilder> 
          getStorageHostChunkListOrBuilderList() {
        return storageHostChunkList_;
      }
      /**
       * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
       */
      public int getStorageHostChunkListCount() {
        return storageHostChunkList_.size();
      }
      /**
       * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
       */
      public Protocol.StorageHostChunkList getStorageHostChunkList(int index) {
        return storageHostChunkList_.get(index);
      }
      /**
       * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
       */
      public Protocol.StorageHostChunkListOrBuilder getStorageHostChunkListOrBuilder(
          int index) {
        return storageHostChunkList_.get(index);
      }
  
      // repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;
      public static final int FILE_CHECKSUM_CHUNK_REF_LIST_FIELD_NUMBER = 2;
      private java.util.List<Protocol.FileChecksumChunkReferences> fileChecksumChunkRefList_;
      /**
       * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
       */
      public java.util.List<Protocol.FileChecksumChunkReferences> getFileChecksumChunkRefListList() {
        return fileChecksumChunkRefList_;
      }
      /**
       * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
       */
      public java.util.List<? extends Protocol.FileChecksumChunkReferencesOrBuilder> 
          getFileChecksumChunkRefListOrBuilderList() {
        return fileChecksumChunkRefList_;
      }
      /**
       * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
       */
      public int getFileChecksumChunkRefListCount() {
        return fileChecksumChunkRefList_.size();
      }
      /**
       * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
       */
      public Protocol.FileChecksumChunkReferences getFileChecksumChunkRefList(int index) {
        return fileChecksumChunkRefList_.get(index);
      }
      /**
       * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
       */
      public Protocol.FileChecksumChunkReferencesOrBuilder getFileChecksumChunkRefListOrBuilder(
          int index) {
        return fileChecksumChunkRefList_.get(index);
      }
  
      private void initFields() {
        storageHostChunkList_ = java.util.Collections.emptyList();
        fileChecksumChunkRefList_ = java.util.Collections.emptyList();
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        for (int i = 0; i < getStorageHostChunkListCount(); i++) {
          if (!getStorageHostChunkList(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        for (int i = 0; i < getFileChecksumChunkRefListCount(); i++) {
          if (!getFileChecksumChunkRefList(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        for (int i = 0; i < storageHostChunkList_.size(); i++) {
          output.writeMessage(1, storageHostChunkList_.get(i));
        }
        for (int i = 0; i < fileChecksumChunkRefList_.size(); i++) {
          output.writeMessage(2, fileChecksumChunkRefList_.get(i));
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        for (int i = 0; i < storageHostChunkList_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, storageHostChunkList_.get(i));
        }
        for (int i = 0; i < fileChecksumChunkRefList_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, fileChecksumChunkRefList_.get(i));
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.FileChecksumStorageHostChunkLists parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.FileChecksumStorageHostChunkLists parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.FileChecksumStorageHostChunkLists parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.FileChecksumStorageHostChunkLists parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.FileChecksumStorageHostChunkLists parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.FileChecksumStorageHostChunkLists parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.FileChecksumStorageHostChunkLists parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.FileChecksumStorageHostChunkLists parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.FileChecksumStorageHostChunkLists parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.FileChecksumStorageHostChunkLists parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.FileChecksumStorageHostChunkLists prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code FileChecksumStorageHostChunkLists}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.FileChecksumStorageHostChunkListsOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_FileChecksumStorageHostChunkLists_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_FileChecksumStorageHostChunkLists_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.FileChecksumStorageHostChunkLists.class, Protocol.FileChecksumStorageHostChunkLists.Builder.class);
        }
  
        // Construct using Protobuf.FileChecksumStorageHostChunkLists.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getStorageHostChunkListFieldBuilder();
            getFileChecksumChunkRefListFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          if (storageHostChunkListBuilder_ == null) {
            storageHostChunkList_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            storageHostChunkListBuilder_.clear();
          }
          if (fileChecksumChunkRefListBuilder_ == null) {
            fileChecksumChunkRefList_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            fileChecksumChunkRefListBuilder_.clear();
          }
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_FileChecksumStorageHostChunkLists_descriptor;
        }
  
        public Protocol.FileChecksumStorageHostChunkLists getDefaultInstanceForType() {
          return Protocol.FileChecksumStorageHostChunkLists.getDefaultInstance();
        }
  
        public Protocol.FileChecksumStorageHostChunkLists build() {
          Protocol.FileChecksumStorageHostChunkLists result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.FileChecksumStorageHostChunkLists buildPartial() {
          Protocol.FileChecksumStorageHostChunkLists result = new Protocol.FileChecksumStorageHostChunkLists(this);
          int from_bitField0_ = bitField0_;
          if (storageHostChunkListBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
              storageHostChunkList_ = java.util.Collections.unmodifiableList(storageHostChunkList_);
              bitField0_ = (bitField0_ & ~0x00000001);
            }
            result.storageHostChunkList_ = storageHostChunkList_;
          } else {
            result.storageHostChunkList_ = storageHostChunkListBuilder_.build();
          }
          if (fileChecksumChunkRefListBuilder_ == null) {
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
              fileChecksumChunkRefList_ = java.util.Collections.unmodifiableList(fileChecksumChunkRefList_);
              bitField0_ = (bitField0_ & ~0x00000002);
            }
            result.fileChecksumChunkRefList_ = fileChecksumChunkRefList_;
          } else {
            result.fileChecksumChunkRefList_ = fileChecksumChunkRefListBuilder_.build();
          }
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.FileChecksumStorageHostChunkLists) {
            return mergeFrom((Protocol.FileChecksumStorageHostChunkLists)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.FileChecksumStorageHostChunkLists other) {
          if (other == Protocol.FileChecksumStorageHostChunkLists.getDefaultInstance()) return this;
          if (storageHostChunkListBuilder_ == null) {
            if (!other.storageHostChunkList_.isEmpty()) {
              if (storageHostChunkList_.isEmpty()) {
                storageHostChunkList_ = other.storageHostChunkList_;
                bitField0_ = (bitField0_ & ~0x00000001);
              } else {
                ensureStorageHostChunkListIsMutable();
                storageHostChunkList_.addAll(other.storageHostChunkList_);
              }
              onChanged();
            }
          } else {
            if (!other.storageHostChunkList_.isEmpty()) {
              if (storageHostChunkListBuilder_.isEmpty()) {
                storageHostChunkListBuilder_.dispose();
                storageHostChunkListBuilder_ = null;
                storageHostChunkList_ = other.storageHostChunkList_;
                bitField0_ = (bitField0_ & ~0x00000001);
                storageHostChunkListBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getStorageHostChunkListFieldBuilder() : null;
              } else {
                storageHostChunkListBuilder_.addAllMessages(other.storageHostChunkList_);
              }
            }
          }
          if (fileChecksumChunkRefListBuilder_ == null) {
            if (!other.fileChecksumChunkRefList_.isEmpty()) {
              if (fileChecksumChunkRefList_.isEmpty()) {
                fileChecksumChunkRefList_ = other.fileChecksumChunkRefList_;
                bitField0_ = (bitField0_ & ~0x00000002);
              } else {
                ensureFileChecksumChunkRefListIsMutable();
                fileChecksumChunkRefList_.addAll(other.fileChecksumChunkRefList_);
              }
              onChanged();
            }
          } else {
            if (!other.fileChecksumChunkRefList_.isEmpty()) {
              if (fileChecksumChunkRefListBuilder_.isEmpty()) {
                fileChecksumChunkRefListBuilder_.dispose();
                fileChecksumChunkRefListBuilder_ = null;
                fileChecksumChunkRefList_ = other.fileChecksumChunkRefList_;
                bitField0_ = (bitField0_ & ~0x00000002);
                fileChecksumChunkRefListBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getFileChecksumChunkRefListFieldBuilder() : null;
              } else {
                fileChecksumChunkRefListBuilder_.addAllMessages(other.fileChecksumChunkRefList_);
              }
            }
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          for (int i = 0; i < getStorageHostChunkListCount(); i++) {
            if (!getStorageHostChunkList(i).isInitialized()) {
              
              return false;
            }
          }
          for (int i = 0; i < getFileChecksumChunkRefListCount(); i++) {
            if (!getFileChecksumChunkRefList(i).isInitialized()) {
              
              return false;
            }
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.FileChecksumStorageHostChunkLists parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.FileChecksumStorageHostChunkLists) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // repeated .StorageHostChunkList storage_host_chunk_list = 1;
        private java.util.List<Protocol.StorageHostChunkList> storageHostChunkList_ =
          java.util.Collections.emptyList();
        private void ensureStorageHostChunkListIsMutable() {
          if (!((bitField0_ & 0x00000001) == 0x00000001)) {
            storageHostChunkList_ = new java.util.ArrayList<Protocol.StorageHostChunkList>(storageHostChunkList_);
            bitField0_ |= 0x00000001;
           }
        }
  
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.StorageHostChunkList, Protocol.StorageHostChunkList.Builder, Protocol.StorageHostChunkListOrBuilder> storageHostChunkListBuilder_;
  
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public java.util.List<Protocol.StorageHostChunkList> getStorageHostChunkListList() {
          if (storageHostChunkListBuilder_ == null) {
            return java.util.Collections.unmodifiableList(storageHostChunkList_);
          } else {
            return storageHostChunkListBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public int getStorageHostChunkListCount() {
          if (storageHostChunkListBuilder_ == null) {
            return storageHostChunkList_.size();
          } else {
            return storageHostChunkListBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public Protocol.StorageHostChunkList getStorageHostChunkList(int index) {
          if (storageHostChunkListBuilder_ == null) {
            return storageHostChunkList_.get(index);
          } else {
            return storageHostChunkListBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public Builder setStorageHostChunkList(
            int index, Protocol.StorageHostChunkList value) {
          if (storageHostChunkListBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureStorageHostChunkListIsMutable();
            storageHostChunkList_.set(index, value);
            onChanged();
          } else {
            storageHostChunkListBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public Builder setStorageHostChunkList(
            int index, Protocol.StorageHostChunkList.Builder builderForValue) {
          if (storageHostChunkListBuilder_ == null) {
            ensureStorageHostChunkListIsMutable();
            storageHostChunkList_.set(index, builderForValue.build());
            onChanged();
          } else {
            storageHostChunkListBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public Builder addStorageHostChunkList(Protocol.StorageHostChunkList value) {
          if (storageHostChunkListBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureStorageHostChunkListIsMutable();
            storageHostChunkList_.add(value);
            onChanged();
          } else {
            storageHostChunkListBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public Builder addStorageHostChunkList(
            int index, Protocol.StorageHostChunkList value) {
          if (storageHostChunkListBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureStorageHostChunkListIsMutable();
            storageHostChunkList_.add(index, value);
            onChanged();
          } else {
            storageHostChunkListBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public Builder addStorageHostChunkList(
            Protocol.StorageHostChunkList.Builder builderForValue) {
          if (storageHostChunkListBuilder_ == null) {
            ensureStorageHostChunkListIsMutable();
            storageHostChunkList_.add(builderForValue.build());
            onChanged();
          } else {
            storageHostChunkListBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public Builder addStorageHostChunkList(
            int index, Protocol.StorageHostChunkList.Builder builderForValue) {
          if (storageHostChunkListBuilder_ == null) {
            ensureStorageHostChunkListIsMutable();
            storageHostChunkList_.add(index, builderForValue.build());
            onChanged();
          } else {
            storageHostChunkListBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public Builder addAllStorageHostChunkList(
            java.lang.Iterable<? extends Protocol.StorageHostChunkList> values) {
          if (storageHostChunkListBuilder_ == null) {
            ensureStorageHostChunkListIsMutable();
            super.addAll(values, storageHostChunkList_);
            onChanged();
          } else {
            storageHostChunkListBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public Builder clearStorageHostChunkList() {
          if (storageHostChunkListBuilder_ == null) {
            storageHostChunkList_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000001);
            onChanged();
          } else {
            storageHostChunkListBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public Builder removeStorageHostChunkList(int index) {
          if (storageHostChunkListBuilder_ == null) {
            ensureStorageHostChunkListIsMutable();
            storageHostChunkList_.remove(index);
            onChanged();
          } else {
            storageHostChunkListBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public Protocol.StorageHostChunkList.Builder getStorageHostChunkListBuilder(
            int index) {
          return getStorageHostChunkListFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public Protocol.StorageHostChunkListOrBuilder getStorageHostChunkListOrBuilder(
            int index) {
          if (storageHostChunkListBuilder_ == null) {
            return storageHostChunkList_.get(index);  } else {
            return storageHostChunkListBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public java.util.List<? extends Protocol.StorageHostChunkListOrBuilder> 
             getStorageHostChunkListOrBuilderList() {
          if (storageHostChunkListBuilder_ != null) {
            return storageHostChunkListBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(storageHostChunkList_);
          }
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public Protocol.StorageHostChunkList.Builder addStorageHostChunkListBuilder() {
          return getStorageHostChunkListFieldBuilder().addBuilder(
              Protocol.StorageHostChunkList.getDefaultInstance());
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public Protocol.StorageHostChunkList.Builder addStorageHostChunkListBuilder(
            int index) {
          return getStorageHostChunkListFieldBuilder().addBuilder(
              index, Protocol.StorageHostChunkList.getDefaultInstance());
        }
        /**
         * <code>repeated .StorageHostChunkList storage_host_chunk_list = 1;</code>
         */
        public java.util.List<Protocol.StorageHostChunkList.Builder> 
             getStorageHostChunkListBuilderList() {
          return getStorageHostChunkListFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.StorageHostChunkList, Protocol.StorageHostChunkList.Builder, Protocol.StorageHostChunkListOrBuilder> 
            getStorageHostChunkListFieldBuilder() {
          if (storageHostChunkListBuilder_ == null) {
            storageHostChunkListBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                Protocol.StorageHostChunkList, Protocol.StorageHostChunkList.Builder, Protocol.StorageHostChunkListOrBuilder>(
                    storageHostChunkList_,
                    ((bitField0_ & 0x00000001) == 0x00000001),
                    getParentForChildren(),
                    isClean());
            storageHostChunkList_ = null;
          }
          return storageHostChunkListBuilder_;
        }
  
        // repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;
        private java.util.List<Protocol.FileChecksumChunkReferences> fileChecksumChunkRefList_ =
          java.util.Collections.emptyList();
        private void ensureFileChecksumChunkRefListIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            fileChecksumChunkRefList_ = new java.util.ArrayList<Protocol.FileChecksumChunkReferences>(fileChecksumChunkRefList_);
            bitField0_ |= 0x00000002;
           }
        }
  
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.FileChecksumChunkReferences, Protocol.FileChecksumChunkReferences.Builder, Protocol.FileChecksumChunkReferencesOrBuilder> fileChecksumChunkRefListBuilder_;
  
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public java.util.List<Protocol.FileChecksumChunkReferences> getFileChecksumChunkRefListList() {
          if (fileChecksumChunkRefListBuilder_ == null) {
            return java.util.Collections.unmodifiableList(fileChecksumChunkRefList_);
          } else {
            return fileChecksumChunkRefListBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public int getFileChecksumChunkRefListCount() {
          if (fileChecksumChunkRefListBuilder_ == null) {
            return fileChecksumChunkRefList_.size();
          } else {
            return fileChecksumChunkRefListBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public Protocol.FileChecksumChunkReferences getFileChecksumChunkRefList(int index) {
          if (fileChecksumChunkRefListBuilder_ == null) {
            return fileChecksumChunkRefList_.get(index);
          } else {
            return fileChecksumChunkRefListBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public Builder setFileChecksumChunkRefList(
            int index, Protocol.FileChecksumChunkReferences value) {
          if (fileChecksumChunkRefListBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFileChecksumChunkRefListIsMutable();
            fileChecksumChunkRefList_.set(index, value);
            onChanged();
          } else {
            fileChecksumChunkRefListBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public Builder setFileChecksumChunkRefList(
            int index, Protocol.FileChecksumChunkReferences.Builder builderForValue) {
          if (fileChecksumChunkRefListBuilder_ == null) {
            ensureFileChecksumChunkRefListIsMutable();
            fileChecksumChunkRefList_.set(index, builderForValue.build());
            onChanged();
          } else {
            fileChecksumChunkRefListBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public Builder addFileChecksumChunkRefList(Protocol.FileChecksumChunkReferences value) {
          if (fileChecksumChunkRefListBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFileChecksumChunkRefListIsMutable();
            fileChecksumChunkRefList_.add(value);
            onChanged();
          } else {
            fileChecksumChunkRefListBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public Builder addFileChecksumChunkRefList(
            int index, Protocol.FileChecksumChunkReferences value) {
          if (fileChecksumChunkRefListBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFileChecksumChunkRefListIsMutable();
            fileChecksumChunkRefList_.add(index, value);
            onChanged();
          } else {
            fileChecksumChunkRefListBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public Builder addFileChecksumChunkRefList(
            Protocol.FileChecksumChunkReferences.Builder builderForValue) {
          if (fileChecksumChunkRefListBuilder_ == null) {
            ensureFileChecksumChunkRefListIsMutable();
            fileChecksumChunkRefList_.add(builderForValue.build());
            onChanged();
          } else {
            fileChecksumChunkRefListBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public Builder addFileChecksumChunkRefList(
            int index, Protocol.FileChecksumChunkReferences.Builder builderForValue) {
          if (fileChecksumChunkRefListBuilder_ == null) {
            ensureFileChecksumChunkRefListIsMutable();
            fileChecksumChunkRefList_.add(index, builderForValue.build());
            onChanged();
          } else {
            fileChecksumChunkRefListBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public Builder addAllFileChecksumChunkRefList(
            java.lang.Iterable<? extends Protocol.FileChecksumChunkReferences> values) {
          if (fileChecksumChunkRefListBuilder_ == null) {
            ensureFileChecksumChunkRefListIsMutable();
            super.addAll(values, fileChecksumChunkRefList_);
            onChanged();
          } else {
            fileChecksumChunkRefListBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public Builder clearFileChecksumChunkRefList() {
          if (fileChecksumChunkRefListBuilder_ == null) {
            fileChecksumChunkRefList_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
            onChanged();
          } else {
            fileChecksumChunkRefListBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public Builder removeFileChecksumChunkRefList(int index) {
          if (fileChecksumChunkRefListBuilder_ == null) {
            ensureFileChecksumChunkRefListIsMutable();
            fileChecksumChunkRefList_.remove(index);
            onChanged();
          } else {
            fileChecksumChunkRefListBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public Protocol.FileChecksumChunkReferences.Builder getFileChecksumChunkRefListBuilder(
            int index) {
          return getFileChecksumChunkRefListFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public Protocol.FileChecksumChunkReferencesOrBuilder getFileChecksumChunkRefListOrBuilder(
            int index) {
          if (fileChecksumChunkRefListBuilder_ == null) {
            return fileChecksumChunkRefList_.get(index);  } else {
            return fileChecksumChunkRefListBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public java.util.List<? extends Protocol.FileChecksumChunkReferencesOrBuilder> 
             getFileChecksumChunkRefListOrBuilderList() {
          if (fileChecksumChunkRefListBuilder_ != null) {
            return fileChecksumChunkRefListBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(fileChecksumChunkRefList_);
          }
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public Protocol.FileChecksumChunkReferences.Builder addFileChecksumChunkRefListBuilder() {
          return getFileChecksumChunkRefListFieldBuilder().addBuilder(
              Protocol.FileChecksumChunkReferences.getDefaultInstance());
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public Protocol.FileChecksumChunkReferences.Builder addFileChecksumChunkRefListBuilder(
            int index) {
          return getFileChecksumChunkRefListFieldBuilder().addBuilder(
              index, Protocol.FileChecksumChunkReferences.getDefaultInstance());
        }
        /**
         * <code>repeated .FileChecksumChunkReferences file_checksum_chunk_ref_list = 2;</code>
         */
        public java.util.List<Protocol.FileChecksumChunkReferences.Builder> 
             getFileChecksumChunkRefListBuilderList() {
          return getFileChecksumChunkRefListFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.FileChecksumChunkReferences, Protocol.FileChecksumChunkReferences.Builder, Protocol.FileChecksumChunkReferencesOrBuilder> 
            getFileChecksumChunkRefListFieldBuilder() {
          if (fileChecksumChunkRefListBuilder_ == null) {
            fileChecksumChunkRefListBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                Protocol.FileChecksumChunkReferences, Protocol.FileChecksumChunkReferences.Builder, Protocol.FileChecksumChunkReferencesOrBuilder>(
                    fileChecksumChunkRefList_,
                    ((bitField0_ & 0x00000002) == 0x00000002),
                    getParentForChildren(),
                    isClean());
            fileChecksumChunkRefList_ = null;
          }
          return fileChecksumChunkRefListBuilder_;
        }
  
        // @@protoc_insertion_point(builder_scope:FileChecksumStorageHostChunkLists)
      }
  
      static {
        defaultInstance = new FileChecksumStorageHostChunkLists(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:FileChecksumStorageHostChunkLists)
    }
  
    public interface StorageHostChunkListOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required .Request host_info = 1;
      /**
       * <code>required .Request host_info = 1;</code>
       */
      boolean hasHostInfo();
      /**
       * <code>required .Request host_info = 1;</code>
       */
      Protocol.Request getHostInfo();
      /**
       * <code>required .Request host_info = 1;</code>
       */
      Protocol.RequestOrBuilder getHostInfoOrBuilder();
  
      // repeated .ChunkInfo chunk_info = 2;
      /**
       * <code>repeated .ChunkInfo chunk_info = 2;</code>
       */
      java.util.List<Protocol.ChunkInfo> 
          getChunkInfoList();
      /**
       * <code>repeated .ChunkInfo chunk_info = 2;</code>
       */
      Protocol.ChunkInfo getChunkInfo(int index);
      /**
       * <code>repeated .ChunkInfo chunk_info = 2;</code>
       */
      int getChunkInfoCount();
      /**
       * <code>repeated .ChunkInfo chunk_info = 2;</code>
       */
      java.util.List<? extends Protocol.ChunkInfoOrBuilder> 
          getChunkInfoOrBuilderList();
      /**
       * <code>repeated .ChunkInfo chunk_info = 2;</code>
       */
      Protocol.ChunkInfoOrBuilder getChunkInfoOrBuilder(
          int index);
  
      // required string storage_container_key = 3;
      /**
       * <code>required string storage_container_key = 3;</code>
       */
      boolean hasStorageContainerKey();
      /**
       * <code>required string storage_container_key = 3;</code>
       */
      java.lang.String getStorageContainerKey();
      /**
       * <code>required string storage_container_key = 3;</code>
       */
      com.google.protobuf.ByteString
          getStorageContainerKeyBytes();
  
      // required string storage_container_authorization_token = 4;
      /**
       * <code>required string storage_container_authorization_token = 4;</code>
       */
      boolean hasStorageContainerAuthorizationToken();
      /**
       * <code>required string storage_container_authorization_token = 4;</code>
       */
      java.lang.String getStorageContainerAuthorizationToken();
      /**
       * <code>required string storage_container_authorization_token = 4;</code>
       */
      com.google.protobuf.ByteString
          getStorageContainerAuthorizationTokenBytes();
    }
    /**
     * Protobuf type {@code StorageHostChunkList}
     *
     * <pre>
     *Contains info needed for downloading chunks
     * </pre>
     */
    public static final class StorageHostChunkList extends
        com.google.protobuf.GeneratedMessage
        implements StorageHostChunkListOrBuilder {
      // Use StorageHostChunkList.newBuilder() to construct.
      private StorageHostChunkList(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private StorageHostChunkList(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final StorageHostChunkList defaultInstance;
      public static StorageHostChunkList getDefaultInstance() {
        return defaultInstance;
      }
  
      public StorageHostChunkList getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private StorageHostChunkList(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                Protocol.Request.Builder subBuilder = null;
                if (((bitField0_ & 0x00000001) == 0x00000001)) {
                  subBuilder = hostInfo_.toBuilder();
                }
                hostInfo_ = input.readMessage(Protocol.Request.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(hostInfo_);
                  hostInfo_ = subBuilder.buildPartial();
                }
                bitField0_ |= 0x00000001;
                break;
              }
              case 18: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  chunkInfo_ = new java.util.ArrayList<Protocol.ChunkInfo>();
                  mutable_bitField0_ |= 0x00000002;
                }
                chunkInfo_.add(input.readMessage(Protocol.ChunkInfo.PARSER, extensionRegistry));
                break;
              }
              case 26: {
                bitField0_ |= 0x00000002;
                storageContainerKey_ = input.readBytes();
                break;
              }
              case 34: {
                bitField0_ |= 0x00000004;
                storageContainerAuthorizationToken_ = 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.getMessage()).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
            chunkInfo_ = java.util.Collections.unmodifiableList(chunkInfo_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_StorageHostChunkList_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_StorageHostChunkList_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.StorageHostChunkList.class, Protocol.StorageHostChunkList.Builder.class);
      }
  
      public static com.google.protobuf.Parser<StorageHostChunkList> PARSER =
          new com.google.protobuf.AbstractParser<StorageHostChunkList>() {
        public StorageHostChunkList parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new StorageHostChunkList(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<StorageHostChunkList> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required .Request host_info = 1;
      public static final int HOST_INFO_FIELD_NUMBER = 1;
      private Protocol.Request hostInfo_;
      /**
       * <code>required .Request host_info = 1;</code>
       */
      public boolean hasHostInfo() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required .Request host_info = 1;</code>
       */
      public Protocol.Request getHostInfo() {
        return hostInfo_;
      }
      /**
       * <code>required .Request host_info = 1;</code>
       */
      public Protocol.RequestOrBuilder getHostInfoOrBuilder() {
        return hostInfo_;
      }
  
      // repeated .ChunkInfo chunk_info = 2;
      public static final int CHUNK_INFO_FIELD_NUMBER = 2;
      private java.util.List<Protocol.ChunkInfo> chunkInfo_;
      /**
       * <code>repeated .ChunkInfo chunk_info = 2;</code>
       */
      public java.util.List<Protocol.ChunkInfo> getChunkInfoList() {
        return chunkInfo_;
      }
      /**
       * <code>repeated .ChunkInfo chunk_info = 2;</code>
       */
      public java.util.List<? extends Protocol.ChunkInfoOrBuilder> 
          getChunkInfoOrBuilderList() {
        return chunkInfo_;
      }
      /**
       * <code>repeated .ChunkInfo chunk_info = 2;</code>
       */
      public int getChunkInfoCount() {
        return chunkInfo_.size();
      }
      /**
       * <code>repeated .ChunkInfo chunk_info = 2;</code>
       */
      public Protocol.ChunkInfo getChunkInfo(int index) {
        return chunkInfo_.get(index);
      }
      /**
       * <code>repeated .ChunkInfo chunk_info = 2;</code>
       */
      public Protocol.ChunkInfoOrBuilder getChunkInfoOrBuilder(
          int index) {
        return chunkInfo_.get(index);
      }
  
      // required string storage_container_key = 3;
      public static final int STORAGE_CONTAINER_KEY_FIELD_NUMBER = 3;
      private java.lang.Object storageContainerKey_;
      /**
       * <code>required string storage_container_key = 3;</code>
       */
      public boolean hasStorageContainerKey() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required string storage_container_key = 3;</code>
       */
      public java.lang.String getStorageContainerKey() {
        java.lang.Object ref = storageContainerKey_;
        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();
          if (bs.isValidUtf8()) {
            storageContainerKey_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string storage_container_key = 3;</code>
       */
      public com.google.protobuf.ByteString
          getStorageContainerKeyBytes() {
        java.lang.Object ref = storageContainerKey_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          storageContainerKey_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required string storage_container_authorization_token = 4;
      public static final int STORAGE_CONTAINER_AUTHORIZATION_TOKEN_FIELD_NUMBER = 4;
      private java.lang.Object storageContainerAuthorizationToken_;
      /**
       * <code>required string storage_container_authorization_token = 4;</code>
       */
      public boolean hasStorageContainerAuthorizationToken() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>required string storage_container_authorization_token = 4;</code>
       */
      public java.lang.String getStorageContainerAuthorizationToken() {
        java.lang.Object ref = storageContainerAuthorizationToken_;
        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();
          if (bs.isValidUtf8()) {
            storageContainerAuthorizationToken_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string storage_container_authorization_token = 4;</code>
       */
      public com.google.protobuf.ByteString
          getStorageContainerAuthorizationTokenBytes() {
        java.lang.Object ref = storageContainerAuthorizationToken_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          storageContainerAuthorizationToken_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      private void initFields() {
        hostInfo_ = Protocol.Request.getDefaultInstance();
        chunkInfo_ = java.util.Collections.emptyList();
        storageContainerKey_ = "";
        storageContainerAuthorizationToken_ = "";
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasHostInfo()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasStorageContainerKey()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasStorageContainerAuthorizationToken()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!getHostInfo().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
        for (int i = 0; i < getChunkInfoCount(); i++) {
          if (!getChunkInfo(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeMessage(1, hostInfo_);
        }
        for (int i = 0; i < chunkInfo_.size(); i++) {
          output.writeMessage(2, chunkInfo_.get(i));
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(3, getStorageContainerKeyBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeBytes(4, getStorageContainerAuthorizationTokenBytes());
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, hostInfo_);
        }
        for (int i = 0; i < chunkInfo_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, chunkInfo_.get(i));
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(3, getStorageContainerKeyBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(4, getStorageContainerAuthorizationTokenBytes());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.StorageHostChunkList parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.StorageHostChunkList parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.StorageHostChunkList parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.StorageHostChunkList parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.StorageHostChunkList parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.StorageHostChunkList parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.StorageHostChunkList parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.StorageHostChunkList parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.StorageHostChunkList parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.StorageHostChunkList parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.StorageHostChunkList prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code StorageHostChunkList}
       *
       * <pre>
       *Contains info needed for downloading chunks
       * </pre>
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.StorageHostChunkListOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_StorageHostChunkList_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_StorageHostChunkList_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.StorageHostChunkList.class, Protocol.StorageHostChunkList.Builder.class);
        }
  
        // Construct using Protobuf.StorageHostChunkList.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getHostInfoFieldBuilder();
            getChunkInfoFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          if (hostInfoBuilder_ == null) {
            hostInfo_ = Protocol.Request.getDefaultInstance();
          } else {
            hostInfoBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          if (chunkInfoBuilder_ == null) {
            chunkInfo_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            chunkInfoBuilder_.clear();
          }
          storageContainerKey_ = "";
          bitField0_ = (bitField0_ & ~0x00000004);
          storageContainerAuthorizationToken_ = "";
          bitField0_ = (bitField0_ & ~0x00000008);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_StorageHostChunkList_descriptor;
        }
  
        public Protocol.StorageHostChunkList getDefaultInstanceForType() {
          return Protocol.StorageHostChunkList.getDefaultInstance();
        }
  
        public Protocol.StorageHostChunkList build() {
          Protocol.StorageHostChunkList result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.StorageHostChunkList buildPartial() {
          Protocol.StorageHostChunkList result = new Protocol.StorageHostChunkList(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          if (hostInfoBuilder_ == null) {
            result.hostInfo_ = hostInfo_;
          } else {
            result.hostInfo_ = hostInfoBuilder_.build();
          }
          if (chunkInfoBuilder_ == null) {
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
              chunkInfo_ = java.util.Collections.unmodifiableList(chunkInfo_);
              bitField0_ = (bitField0_ & ~0x00000002);
            }
            result.chunkInfo_ = chunkInfo_;
          } else {
            result.chunkInfo_ = chunkInfoBuilder_.build();
          }
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000002;
          }
          result.storageContainerKey_ = storageContainerKey_;
          if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
            to_bitField0_ |= 0x00000004;
          }
          result.storageContainerAuthorizationToken_ = storageContainerAuthorizationToken_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.StorageHostChunkList) {
            return mergeFrom((Protocol.StorageHostChunkList)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.StorageHostChunkList other) {
          if (other == Protocol.StorageHostChunkList.getDefaultInstance()) return this;
          if (other.hasHostInfo()) {
            mergeHostInfo(other.getHostInfo());
          }
          if (chunkInfoBuilder_ == null) {
            if (!other.chunkInfo_.isEmpty()) {
              if (chunkInfo_.isEmpty()) {
                chunkInfo_ = other.chunkInfo_;
                bitField0_ = (bitField0_ & ~0x00000002);
              } else {
                ensureChunkInfoIsMutable();
                chunkInfo_.addAll(other.chunkInfo_);
              }
              onChanged();
            }
          } else {
            if (!other.chunkInfo_.isEmpty()) {
              if (chunkInfoBuilder_.isEmpty()) {
                chunkInfoBuilder_.dispose();
                chunkInfoBuilder_ = null;
                chunkInfo_ = other.chunkInfo_;
                bitField0_ = (bitField0_ & ~0x00000002);
                chunkInfoBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getChunkInfoFieldBuilder() : null;
              } else {
                chunkInfoBuilder_.addAllMessages(other.chunkInfo_);
              }
            }
          }
          if (other.hasStorageContainerKey()) {
            bitField0_ |= 0x00000004;
            storageContainerKey_ = other.storageContainerKey_;
            onChanged();
          }
          if (other.hasStorageContainerAuthorizationToken()) {
            bitField0_ |= 0x00000008;
            storageContainerAuthorizationToken_ = other.storageContainerAuthorizationToken_;
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasHostInfo()) {
            
            return false;
          }
          if (!hasStorageContainerKey()) {
            
            return false;
          }
          if (!hasStorageContainerAuthorizationToken()) {
            
            return false;
          }
          if (!getHostInfo().isInitialized()) {
            
            return false;
          }
          for (int i = 0; i < getChunkInfoCount(); i++) {
            if (!getChunkInfo(i).isInitialized()) {
              
              return false;
            }
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.StorageHostChunkList parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.StorageHostChunkList) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required .Request host_info = 1;
        private Protocol.Request hostInfo_ = Protocol.Request.getDefaultInstance();
        private com.google.protobuf.SingleFieldBuilder<
            Protocol.Request, Protocol.Request.Builder, Protocol.RequestOrBuilder> hostInfoBuilder_;
        /**
         * <code>required .Request host_info = 1;</code>
         */
        public boolean hasHostInfo() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required .Request host_info = 1;</code>
         */
        public Protocol.Request getHostInfo() {
          if (hostInfoBuilder_ == null) {
            return hostInfo_;
          } else {
            return hostInfoBuilder_.getMessage();
          }
        }
        /**
         * <code>required .Request host_info = 1;</code>
         */
        public Builder setHostInfo(Protocol.Request value) {
          if (hostInfoBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            hostInfo_ = value;
            onChanged();
          } else {
            hostInfoBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <code>required .Request host_info = 1;</code>
         */
        public Builder setHostInfo(
            Protocol.Request.Builder builderForValue) {
          if (hostInfoBuilder_ == null) {
            hostInfo_ = builderForValue.build();
            onChanged();
          } else {
            hostInfoBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <code>required .Request host_info = 1;</code>
         */
        public Builder mergeHostInfo(Protocol.Request value) {
          if (hostInfoBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001) &&
                hostInfo_ != Protocol.Request.getDefaultInstance()) {
              hostInfo_ =
                Protocol.Request.newBuilder(hostInfo_).mergeFrom(value).buildPartial();
            } else {
              hostInfo_ = value;
            }
            onChanged();
          } else {
            hostInfoBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <code>required .Request host_info = 1;</code>
         */
        public Builder clearHostInfo() {
          if (hostInfoBuilder_ == null) {
            hostInfo_ = Protocol.Request.getDefaultInstance();
            onChanged();
          } else {
            hostInfoBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
        /**
         * <code>required .Request host_info = 1;</code>
         */
        public Protocol.Request.Builder getHostInfoBuilder() {
          bitField0_ |= 0x00000001;
          onChanged();
          return getHostInfoFieldBuilder().getBuilder();
        }
        /**
         * <code>required .Request host_info = 1;</code>
         */
        public Protocol.RequestOrBuilder getHostInfoOrBuilder() {
          if (hostInfoBuilder_ != null) {
            return hostInfoBuilder_.getMessageOrBuilder();
          } else {
            return hostInfo_;
          }
        }
        /**
         * <code>required .Request host_info = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilder<
            Protocol.Request, Protocol.Request.Builder, Protocol.RequestOrBuilder> 
            getHostInfoFieldBuilder() {
          if (hostInfoBuilder_ == null) {
            hostInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                Protocol.Request, Protocol.Request.Builder, Protocol.RequestOrBuilder>(
                    hostInfo_,
                    getParentForChildren(),
                    isClean());
            hostInfo_ = null;
          }
          return hostInfoBuilder_;
        }
  
        // repeated .ChunkInfo chunk_info = 2;
        private java.util.List<Protocol.ChunkInfo> chunkInfo_ =
          java.util.Collections.emptyList();
        private void ensureChunkInfoIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            chunkInfo_ = new java.util.ArrayList<Protocol.ChunkInfo>(chunkInfo_);
            bitField0_ |= 0x00000002;
           }
        }
  
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.ChunkInfo, Protocol.ChunkInfo.Builder, Protocol.ChunkInfoOrBuilder> chunkInfoBuilder_;
  
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public java.util.List<Protocol.ChunkInfo> getChunkInfoList() {
          if (chunkInfoBuilder_ == null) {
            return java.util.Collections.unmodifiableList(chunkInfo_);
          } else {
            return chunkInfoBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public int getChunkInfoCount() {
          if (chunkInfoBuilder_ == null) {
            return chunkInfo_.size();
          } else {
            return chunkInfoBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public Protocol.ChunkInfo getChunkInfo(int index) {
          if (chunkInfoBuilder_ == null) {
            return chunkInfo_.get(index);
          } else {
            return chunkInfoBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public Builder setChunkInfo(
            int index, Protocol.ChunkInfo value) {
          if (chunkInfoBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureChunkInfoIsMutable();
            chunkInfo_.set(index, value);
            onChanged();
          } else {
            chunkInfoBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public Builder setChunkInfo(
            int index, Protocol.ChunkInfo.Builder builderForValue) {
          if (chunkInfoBuilder_ == null) {
            ensureChunkInfoIsMutable();
            chunkInfo_.set(index, builderForValue.build());
            onChanged();
          } else {
            chunkInfoBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public Builder addChunkInfo(Protocol.ChunkInfo value) {
          if (chunkInfoBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureChunkInfoIsMutable();
            chunkInfo_.add(value);
            onChanged();
          } else {
            chunkInfoBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public Builder addChunkInfo(
            int index, Protocol.ChunkInfo value) {
          if (chunkInfoBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureChunkInfoIsMutable();
            chunkInfo_.add(index, value);
            onChanged();
          } else {
            chunkInfoBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public Builder addChunkInfo(
            Protocol.ChunkInfo.Builder builderForValue) {
          if (chunkInfoBuilder_ == null) {
            ensureChunkInfoIsMutable();
            chunkInfo_.add(builderForValue.build());
            onChanged();
          } else {
            chunkInfoBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public Builder addChunkInfo(
            int index, Protocol.ChunkInfo.Builder builderForValue) {
          if (chunkInfoBuilder_ == null) {
            ensureChunkInfoIsMutable();
            chunkInfo_.add(index, builderForValue.build());
            onChanged();
          } else {
            chunkInfoBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public Builder addAllChunkInfo(
            java.lang.Iterable<? extends Protocol.ChunkInfo> values) {
          if (chunkInfoBuilder_ == null) {
            ensureChunkInfoIsMutable();
            super.addAll(values, chunkInfo_);
            onChanged();
          } else {
            chunkInfoBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public Builder clearChunkInfo() {
          if (chunkInfoBuilder_ == null) {
            chunkInfo_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
            onChanged();
          } else {
            chunkInfoBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public Builder removeChunkInfo(int index) {
          if (chunkInfoBuilder_ == null) {
            ensureChunkInfoIsMutable();
            chunkInfo_.remove(index);
            onChanged();
          } else {
            chunkInfoBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public Protocol.ChunkInfo.Builder getChunkInfoBuilder(
            int index) {
          return getChunkInfoFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public Protocol.ChunkInfoOrBuilder getChunkInfoOrBuilder(
            int index) {
          if (chunkInfoBuilder_ == null) {
            return chunkInfo_.get(index);  } else {
            return chunkInfoBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public java.util.List<? extends Protocol.ChunkInfoOrBuilder> 
             getChunkInfoOrBuilderList() {
          if (chunkInfoBuilder_ != null) {
            return chunkInfoBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(chunkInfo_);
          }
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public Protocol.ChunkInfo.Builder addChunkInfoBuilder() {
          return getChunkInfoFieldBuilder().addBuilder(
              Protocol.ChunkInfo.getDefaultInstance());
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public Protocol.ChunkInfo.Builder addChunkInfoBuilder(
            int index) {
          return getChunkInfoFieldBuilder().addBuilder(
              index, Protocol.ChunkInfo.getDefaultInstance());
        }
        /**
         * <code>repeated .ChunkInfo chunk_info = 2;</code>
         */
        public java.util.List<Protocol.ChunkInfo.Builder> 
             getChunkInfoBuilderList() {
          return getChunkInfoFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.ChunkInfo, Protocol.ChunkInfo.Builder, Protocol.ChunkInfoOrBuilder> 
            getChunkInfoFieldBuilder() {
          if (chunkInfoBuilder_ == null) {
            chunkInfoBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                Protocol.ChunkInfo, Protocol.ChunkInfo.Builder, Protocol.ChunkInfoOrBuilder>(
                    chunkInfo_,
                    ((bitField0_ & 0x00000002) == 0x00000002),
                    getParentForChildren(),
                    isClean());
            chunkInfo_ = null;
          }
          return chunkInfoBuilder_;
        }
  
        // required string storage_container_key = 3;
        private java.lang.Object storageContainerKey_ = "";
        /**
         * <code>required string storage_container_key = 3;</code>
         */
        public boolean hasStorageContainerKey() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>required string storage_container_key = 3;</code>
         */
        public java.lang.String getStorageContainerKey() {
          java.lang.Object ref = storageContainerKey_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            storageContainerKey_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string storage_container_key = 3;</code>
         */
        public com.google.protobuf.ByteString
            getStorageContainerKeyBytes() {
          java.lang.Object ref = storageContainerKey_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            storageContainerKey_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string storage_container_key = 3;</code>
         */
        public Builder setStorageContainerKey(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000004;
          storageContainerKey_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string storage_container_key = 3;</code>
         */
        public Builder clearStorageContainerKey() {
          bitField0_ = (bitField0_ & ~0x00000004);
          storageContainerKey_ = getDefaultInstance().getStorageContainerKey();
          onChanged();
          return this;
        }
        /**
         * <code>required string storage_container_key = 3;</code>
         */
        public Builder setStorageContainerKeyBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000004;
          storageContainerKey_ = value;
          onChanged();
          return this;
        }
  
        // required string storage_container_authorization_token = 4;
        private java.lang.Object storageContainerAuthorizationToken_ = "";
        /**
         * <code>required string storage_container_authorization_token = 4;</code>
         */
        public boolean hasStorageContainerAuthorizationToken() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>required string storage_container_authorization_token = 4;</code>
         */
        public java.lang.String getStorageContainerAuthorizationToken() {
          java.lang.Object ref = storageContainerAuthorizationToken_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            storageContainerAuthorizationToken_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string storage_container_authorization_token = 4;</code>
         */
        public com.google.protobuf.ByteString
            getStorageContainerAuthorizationTokenBytes() {
          java.lang.Object ref = storageContainerAuthorizationToken_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            storageContainerAuthorizationToken_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string storage_container_authorization_token = 4;</code>
         */
        public Builder setStorageContainerAuthorizationToken(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000008;
          storageContainerAuthorizationToken_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string storage_container_authorization_token = 4;</code>
         */
        public Builder clearStorageContainerAuthorizationToken() {
          bitField0_ = (bitField0_ & ~0x00000008);
          storageContainerAuthorizationToken_ = getDefaultInstance().getStorageContainerAuthorizationToken();
          onChanged();
          return this;
        }
        /**
         * <code>required string storage_container_authorization_token = 4;</code>
         */
        public Builder setStorageContainerAuthorizationTokenBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000008;
          storageContainerAuthorizationToken_ = value;
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:StorageHostChunkList)
      }
  
      static {
        defaultInstance = new StorageHostChunkList(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:StorageHostChunkList)
    }
  
    public interface ChunkInfoOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required bytes chunk_checksum = 1;
      /**
       * <code>required bytes chunk_checksum = 1;</code>
       */
      boolean hasChunkChecksum();
      /**
       * <code>required bytes chunk_checksum = 1;</code>
       */
      com.google.protobuf.ByteString getChunkChecksum();
  
      // optional bytes chunk_encryption_key = 2;
      /**
       * <code>optional bytes chunk_encryption_key = 2;</code>
       *
       * <pre>
       *optional EncryptionKey chunk_encryption_key = 2;
       * </pre>
       */
      boolean hasChunkEncryptionKey();
      /**
       * <code>optional bytes chunk_encryption_key = 2;</code>
       *
       * <pre>
       *optional EncryptionKey chunk_encryption_key = 2;
       * </pre>
       */
      com.google.protobuf.ByteString getChunkEncryptionKey();
  
      // required uint32 chunk_length = 3;
      /**
       * <code>required uint32 chunk_length = 3;</code>
       */
      boolean hasChunkLength();
      /**
       * <code>required uint32 chunk_length = 3;</code>
       */
      int getChunkLength();
    }
    /**
     * Protobuf type {@code ChunkInfo}
     */
    public static final class ChunkInfo extends
        com.google.protobuf.GeneratedMessage
        implements ChunkInfoOrBuilder {
      // Use ChunkInfo.newBuilder() to construct.
      private ChunkInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private ChunkInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final ChunkInfo defaultInstance;
      public static ChunkInfo getDefaultInstance() {
        return defaultInstance;
      }
  
      public ChunkInfo getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private ChunkInfo(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                chunkChecksum_ = input.readBytes();
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                chunkEncryptionKey_ = input.readBytes();
                break;
              }
              case 24: {
                bitField0_ |= 0x00000004;
                chunkLength_ = input.readUInt32();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_ChunkInfo_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_ChunkInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.ChunkInfo.class, Protocol.ChunkInfo.Builder.class);
      }
  
      public static com.google.protobuf.Parser<ChunkInfo> PARSER =
          new com.google.protobuf.AbstractParser<ChunkInfo>() {
        public ChunkInfo parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new ChunkInfo(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<ChunkInfo> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required bytes chunk_checksum = 1;
      public static final int CHUNK_CHECKSUM_FIELD_NUMBER = 1;
      private com.google.protobuf.ByteString chunkChecksum_;
      /**
       * <code>required bytes chunk_checksum = 1;</code>
       */
      public boolean hasChunkChecksum() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required bytes chunk_checksum = 1;</code>
       */
      public com.google.protobuf.ByteString getChunkChecksum() {
        return chunkChecksum_;
      }
  
      // optional bytes chunk_encryption_key = 2;
      public static final int CHUNK_ENCRYPTION_KEY_FIELD_NUMBER = 2;
      private com.google.protobuf.ByteString chunkEncryptionKey_;
      /**
       * <code>optional bytes chunk_encryption_key = 2;</code>
       *
       * <pre>
       *optional EncryptionKey chunk_encryption_key = 2;
       * </pre>
       */
      public boolean hasChunkEncryptionKey() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bytes chunk_encryption_key = 2;</code>
       *
       * <pre>
       *optional EncryptionKey chunk_encryption_key = 2;
       * </pre>
       */
      public com.google.protobuf.ByteString getChunkEncryptionKey() {
        return chunkEncryptionKey_;
      }
  
      // required uint32 chunk_length = 3;
      public static final int CHUNK_LENGTH_FIELD_NUMBER = 3;
      private int chunkLength_;
      /**
       * <code>required uint32 chunk_length = 3;</code>
       */
      public boolean hasChunkLength() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>required uint32 chunk_length = 3;</code>
       */
      public int getChunkLength() {
        return chunkLength_;
      }
  
      private void initFields() {
        chunkChecksum_ = com.google.protobuf.ByteString.EMPTY;
        chunkEncryptionKey_ = com.google.protobuf.ByteString.EMPTY;
        chunkLength_ = 0;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasChunkChecksum()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasChunkLength()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, chunkChecksum_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(2, chunkEncryptionKey_);
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeUInt32(3, chunkLength_);
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, chunkChecksum_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, chunkEncryptionKey_);
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeUInt32Size(3, chunkLength_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.ChunkInfo parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.ChunkInfo parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.ChunkInfo parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.ChunkInfo parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.ChunkInfo parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.ChunkInfo parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.ChunkInfo parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.ChunkInfo parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.ChunkInfo parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.ChunkInfo parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.ChunkInfo prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code ChunkInfo}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.ChunkInfoOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_ChunkInfo_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_ChunkInfo_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.ChunkInfo.class, Protocol.ChunkInfo.Builder.class);
        }
  
        // Construct using Protobuf.ChunkInfo.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          chunkChecksum_ = com.google.protobuf.ByteString.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          chunkEncryptionKey_ = com.google.protobuf.ByteString.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000002);
          chunkLength_ = 0;
          bitField0_ = (bitField0_ & ~0x00000004);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_ChunkInfo_descriptor;
        }
  
        public Protocol.ChunkInfo getDefaultInstanceForType() {
          return Protocol.ChunkInfo.getDefaultInstance();
        }
  
        public Protocol.ChunkInfo build() {
          Protocol.ChunkInfo result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.ChunkInfo buildPartial() {
          Protocol.ChunkInfo result = new Protocol.ChunkInfo(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.chunkChecksum_ = chunkChecksum_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.chunkEncryptionKey_ = chunkEncryptionKey_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000004;
          }
          result.chunkLength_ = chunkLength_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.ChunkInfo) {
            return mergeFrom((Protocol.ChunkInfo)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.ChunkInfo other) {
          if (other == Protocol.ChunkInfo.getDefaultInstance()) return this;
          if (other.hasChunkChecksum()) {
            setChunkChecksum(other.getChunkChecksum());
          }
          if (other.hasChunkEncryptionKey()) {
            setChunkEncryptionKey(other.getChunkEncryptionKey());
          }
          if (other.hasChunkLength()) {
            setChunkLength(other.getChunkLength());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasChunkChecksum()) {
            
            return false;
          }
          if (!hasChunkLength()) {
            
            return false;
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.ChunkInfo parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.ChunkInfo) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required bytes chunk_checksum = 1;
        private com.google.protobuf.ByteString chunkChecksum_ = com.google.protobuf.ByteString.EMPTY;
        /**
         * <code>required bytes chunk_checksum = 1;</code>
         */
        public boolean hasChunkChecksum() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required bytes chunk_checksum = 1;</code>
         */
        public com.google.protobuf.ByteString getChunkChecksum() {
          return chunkChecksum_;
        }
        /**
         * <code>required bytes chunk_checksum = 1;</code>
         */
        public Builder setChunkChecksum(com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          chunkChecksum_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required bytes chunk_checksum = 1;</code>
         */
        public Builder clearChunkChecksum() {
          bitField0_ = (bitField0_ & ~0x00000001);
          chunkChecksum_ = getDefaultInstance().getChunkChecksum();
          onChanged();
          return this;
        }
  
        // optional bytes chunk_encryption_key = 2;
        private com.google.protobuf.ByteString chunkEncryptionKey_ = com.google.protobuf.ByteString.EMPTY;
        /**
         * <code>optional bytes chunk_encryption_key = 2;</code>
         *
         * <pre>
         *optional EncryptionKey chunk_encryption_key = 2;
         * </pre>
         */
        public boolean hasChunkEncryptionKey() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional bytes chunk_encryption_key = 2;</code>
         *
         * <pre>
         *optional EncryptionKey chunk_encryption_key = 2;
         * </pre>
         */
        public com.google.protobuf.ByteString getChunkEncryptionKey() {
          return chunkEncryptionKey_;
        }
        /**
         * <code>optional bytes chunk_encryption_key = 2;</code>
         *
         * <pre>
         *optional EncryptionKey chunk_encryption_key = 2;
         * </pre>
         */
        public Builder setChunkEncryptionKey(com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          chunkEncryptionKey_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional bytes chunk_encryption_key = 2;</code>
         *
         * <pre>
         *optional EncryptionKey chunk_encryption_key = 2;
         * </pre>
         */
        public Builder clearChunkEncryptionKey() {
          bitField0_ = (bitField0_ & ~0x00000002);
          chunkEncryptionKey_ = getDefaultInstance().getChunkEncryptionKey();
          onChanged();
          return this;
        }
  
        // required uint32 chunk_length = 3;
        private int chunkLength_ ;
        /**
         * <code>required uint32 chunk_length = 3;</code>
         */
        public boolean hasChunkLength() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>required uint32 chunk_length = 3;</code>
         */
        public int getChunkLength() {
          return chunkLength_;
        }
        /**
         * <code>required uint32 chunk_length = 3;</code>
         */
        public Builder setChunkLength(int value) {
          bitField0_ |= 0x00000004;
          chunkLength_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required uint32 chunk_length = 3;</code>
         */
        public Builder clearChunkLength() {
          bitField0_ = (bitField0_ & ~0x00000004);
          chunkLength_ = 0;
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:ChunkInfo)
      }
  
      static {
        defaultInstance = new ChunkInfo(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:ChunkInfo)
    }
  
    public interface FileChecksumChunkReferencesOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required bytes file_checksum = 1;
      /**
       * <code>required bytes file_checksum = 1;</code>
       *
       * <pre>
       *First in header; Same as first in getFiles Response
       * </pre>
       */
      boolean hasFileChecksum();
      /**
       * <code>required bytes file_checksum = 1;</code>
       *
       * <pre>
       *First in header; Same as first in getFiles Response
       * </pre>
       */
      com.google.protobuf.ByteString getFileChecksum();
  
      // repeated .ChunkReference chunk_references = 2;
      /**
       * <code>repeated .ChunkReference chunk_references = 2;</code>
       */
      java.util.List<Protocol.ChunkReference> 
          getChunkReferencesList();
      /**
       * <code>repeated .ChunkReference chunk_references = 2;</code>
       */
      Protocol.ChunkReference getChunkReferences(int index);
      /**
       * <code>repeated .ChunkReference chunk_references = 2;</code>
       */
      int getChunkReferencesCount();
      /**
       * <code>repeated .ChunkReference chunk_references = 2;</code>
       */
      java.util.List<? extends Protocol.ChunkReferenceOrBuilder> 
          getChunkReferencesOrBuilderList();
      /**
       * <code>repeated .ChunkReference chunk_references = 2;</code>
       */
      Protocol.ChunkReferenceOrBuilder getChunkReferencesOrBuilder(
          int index);
    }
    /**
     * Protobuf type {@code FileChecksumChunkReferences}
     */
    public static final class FileChecksumChunkReferences extends
        com.google.protobuf.GeneratedMessage
        implements FileChecksumChunkReferencesOrBuilder {
      // Use FileChecksumChunkReferences.newBuilder() to construct.
      private FileChecksumChunkReferences(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private FileChecksumChunkReferences(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final FileChecksumChunkReferences defaultInstance;
      public static FileChecksumChunkReferences getDefaultInstance() {
        return defaultInstance;
      }
  
      public FileChecksumChunkReferences getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private FileChecksumChunkReferences(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                fileChecksum_ = input.readBytes();
                break;
              }
              case 18: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  chunkReferences_ = new java.util.ArrayList<Protocol.ChunkReference>();
                  mutable_bitField0_ |= 0x00000002;
                }
                chunkReferences_.add(input.readMessage(Protocol.ChunkReference.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.getMessage()).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
            chunkReferences_ = java.util.Collections.unmodifiableList(chunkReferences_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_FileChecksumChunkReferences_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_FileChecksumChunkReferences_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.FileChecksumChunkReferences.class, Protocol.FileChecksumChunkReferences.Builder.class);
      }
  
      public static com.google.protobuf.Parser<FileChecksumChunkReferences> PARSER =
          new com.google.protobuf.AbstractParser<FileChecksumChunkReferences>() {
        public FileChecksumChunkReferences parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new FileChecksumChunkReferences(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<FileChecksumChunkReferences> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required bytes file_checksum = 1;
      public static final int FILE_CHECKSUM_FIELD_NUMBER = 1;
      private com.google.protobuf.ByteString fileChecksum_;
      /**
       * <code>required bytes file_checksum = 1;</code>
       *
       * <pre>
       *First in header; Same as first in getFiles Response
       * </pre>
       */
      public boolean hasFileChecksum() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required bytes file_checksum = 1;</code>
       *
       * <pre>
       *First in header; Same as first in getFiles Response
       * </pre>
       */
      public com.google.protobuf.ByteString getFileChecksum() {
        return fileChecksum_;
      }
  
      // repeated .ChunkReference chunk_references = 2;
      public static final int CHUNK_REFERENCES_FIELD_NUMBER = 2;
      private java.util.List<Protocol.ChunkReference> chunkReferences_;
      /**
       * <code>repeated .ChunkReference chunk_references = 2;</code>
       */
      public java.util.List<Protocol.ChunkReference> getChunkReferencesList() {
        return chunkReferences_;
      }
      /**
       * <code>repeated .ChunkReference chunk_references = 2;</code>
       */
      public java.util.List<? extends Protocol.ChunkReferenceOrBuilder> 
          getChunkReferencesOrBuilderList() {
        return chunkReferences_;
      }
      /**
       * <code>repeated .ChunkReference chunk_references = 2;</code>
       */
      public int getChunkReferencesCount() {
        return chunkReferences_.size();
      }
      /**
       * <code>repeated .ChunkReference chunk_references = 2;</code>
       */
      public Protocol.ChunkReference getChunkReferences(int index) {
        return chunkReferences_.get(index);
      }
      /**
       * <code>repeated .ChunkReference chunk_references = 2;</code>
       */
      public Protocol.ChunkReferenceOrBuilder getChunkReferencesOrBuilder(
          int index) {
        return chunkReferences_.get(index);
      }
  
      private void initFields() {
        fileChecksum_ = com.google.protobuf.ByteString.EMPTY;
        chunkReferences_ = java.util.Collections.emptyList();
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasFileChecksum()) {
          memoizedIsInitialized = 0;
          return false;
        }
        for (int i = 0; i < getChunkReferencesCount(); i++) {
          if (!getChunkReferences(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, fileChecksum_);
        }
        for (int i = 0; i < chunkReferences_.size(); i++) {
          output.writeMessage(2, chunkReferences_.get(i));
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, fileChecksum_);
        }
        for (int i = 0; i < chunkReferences_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, chunkReferences_.get(i));
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.FileChecksumChunkReferences parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.FileChecksumChunkReferences parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.FileChecksumChunkReferences parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.FileChecksumChunkReferences parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.FileChecksumChunkReferences parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.FileChecksumChunkReferences parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.FileChecksumChunkReferences parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.FileChecksumChunkReferences parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.FileChecksumChunkReferences parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.FileChecksumChunkReferences parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.FileChecksumChunkReferences prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code FileChecksumChunkReferences}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.FileChecksumChunkReferencesOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_FileChecksumChunkReferences_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_FileChecksumChunkReferences_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.FileChecksumChunkReferences.class, Protocol.FileChecksumChunkReferences.Builder.class);
        }
  
        // Construct using Protobuf.FileChecksumChunkReferences.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getChunkReferencesFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          fileChecksum_ = com.google.protobuf.ByteString.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          if (chunkReferencesBuilder_ == null) {
            chunkReferences_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            chunkReferencesBuilder_.clear();
          }
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_FileChecksumChunkReferences_descriptor;
        }
  
        public Protocol.FileChecksumChunkReferences getDefaultInstanceForType() {
          return Protocol.FileChecksumChunkReferences.getDefaultInstance();
        }
  
        public Protocol.FileChecksumChunkReferences build() {
          Protocol.FileChecksumChunkReferences result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.FileChecksumChunkReferences buildPartial() {
          Protocol.FileChecksumChunkReferences result = new Protocol.FileChecksumChunkReferences(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.fileChecksum_ = fileChecksum_;
          if (chunkReferencesBuilder_ == null) {
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
              chunkReferences_ = java.util.Collections.unmodifiableList(chunkReferences_);
              bitField0_ = (bitField0_ & ~0x00000002);
            }
            result.chunkReferences_ = chunkReferences_;
          } else {
            result.chunkReferences_ = chunkReferencesBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.FileChecksumChunkReferences) {
            return mergeFrom((Protocol.FileChecksumChunkReferences)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.FileChecksumChunkReferences other) {
          if (other == Protocol.FileChecksumChunkReferences.getDefaultInstance()) return this;
          if (other.hasFileChecksum()) {
            setFileChecksum(other.getFileChecksum());
          }
          if (chunkReferencesBuilder_ == null) {
            if (!other.chunkReferences_.isEmpty()) {
              if (chunkReferences_.isEmpty()) {
                chunkReferences_ = other.chunkReferences_;
                bitField0_ = (bitField0_ & ~0x00000002);
              } else {
                ensureChunkReferencesIsMutable();
                chunkReferences_.addAll(other.chunkReferences_);
              }
              onChanged();
            }
          } else {
            if (!other.chunkReferences_.isEmpty()) {
              if (chunkReferencesBuilder_.isEmpty()) {
                chunkReferencesBuilder_.dispose();
                chunkReferencesBuilder_ = null;
                chunkReferences_ = other.chunkReferences_;
                bitField0_ = (bitField0_ & ~0x00000002);
                chunkReferencesBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getChunkReferencesFieldBuilder() : null;
              } else {
                chunkReferencesBuilder_.addAllMessages(other.chunkReferences_);
              }
            }
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasFileChecksum()) {
            
            return false;
          }
          for (int i = 0; i < getChunkReferencesCount(); i++) {
            if (!getChunkReferences(i).isInitialized()) {
              
              return false;
            }
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.FileChecksumChunkReferences parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.FileChecksumChunkReferences) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required bytes file_checksum = 1;
        private com.google.protobuf.ByteString fileChecksum_ = com.google.protobuf.ByteString.EMPTY;
        /**
         * <code>required bytes file_checksum = 1;</code>
         *
         * <pre>
         *First in header; Same as first in getFiles Response
         * </pre>
         */
        public boolean hasFileChecksum() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required bytes file_checksum = 1;</code>
         *
         * <pre>
         *First in header; Same as first in getFiles Response
         * </pre>
         */
        public com.google.protobuf.ByteString getFileChecksum() {
          return fileChecksum_;
        }
        /**
         * <code>required bytes file_checksum = 1;</code>
         *
         * <pre>
         *First in header; Same as first in getFiles Response
         * </pre>
         */
        public Builder setFileChecksum(com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          fileChecksum_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required bytes file_checksum = 1;</code>
         *
         * <pre>
         *First in header; Same as first in getFiles Response
         * </pre>
         */
        public Builder clearFileChecksum() {
          bitField0_ = (bitField0_ & ~0x00000001);
          fileChecksum_ = getDefaultInstance().getFileChecksum();
          onChanged();
          return this;
        }
  
        // repeated .ChunkReference chunk_references = 2;
        private java.util.List<Protocol.ChunkReference> chunkReferences_ =
          java.util.Collections.emptyList();
        private void ensureChunkReferencesIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            chunkReferences_ = new java.util.ArrayList<Protocol.ChunkReference>(chunkReferences_);
            bitField0_ |= 0x00000002;
           }
        }
  
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.ChunkReference, Protocol.ChunkReference.Builder, Protocol.ChunkReferenceOrBuilder> chunkReferencesBuilder_;
  
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public java.util.List<Protocol.ChunkReference> getChunkReferencesList() {
          if (chunkReferencesBuilder_ == null) {
            return java.util.Collections.unmodifiableList(chunkReferences_);
          } else {
            return chunkReferencesBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public int getChunkReferencesCount() {
          if (chunkReferencesBuilder_ == null) {
            return chunkReferences_.size();
          } else {
            return chunkReferencesBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public Protocol.ChunkReference getChunkReferences(int index) {
          if (chunkReferencesBuilder_ == null) {
            return chunkReferences_.get(index);
          } else {
            return chunkReferencesBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public Builder setChunkReferences(
            int index, Protocol.ChunkReference value) {
          if (chunkReferencesBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureChunkReferencesIsMutable();
            chunkReferences_.set(index, value);
            onChanged();
          } else {
            chunkReferencesBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public Builder setChunkReferences(
            int index, Protocol.ChunkReference.Builder builderForValue) {
          if (chunkReferencesBuilder_ == null) {
            ensureChunkReferencesIsMutable();
            chunkReferences_.set(index, builderForValue.build());
            onChanged();
          } else {
            chunkReferencesBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public Builder addChunkReferences(Protocol.ChunkReference value) {
          if (chunkReferencesBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureChunkReferencesIsMutable();
            chunkReferences_.add(value);
            onChanged();
          } else {
            chunkReferencesBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public Builder addChunkReferences(
            int index, Protocol.ChunkReference value) {
          if (chunkReferencesBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureChunkReferencesIsMutable();
            chunkReferences_.add(index, value);
            onChanged();
          } else {
            chunkReferencesBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public Builder addChunkReferences(
            Protocol.ChunkReference.Builder builderForValue) {
          if (chunkReferencesBuilder_ == null) {
            ensureChunkReferencesIsMutable();
            chunkReferences_.add(builderForValue.build());
            onChanged();
          } else {
            chunkReferencesBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public Builder addChunkReferences(
            int index, Protocol.ChunkReference.Builder builderForValue) {
          if (chunkReferencesBuilder_ == null) {
            ensureChunkReferencesIsMutable();
            chunkReferences_.add(index, builderForValue.build());
            onChanged();
          } else {
            chunkReferencesBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public Builder addAllChunkReferences(
            java.lang.Iterable<? extends Protocol.ChunkReference> values) {
          if (chunkReferencesBuilder_ == null) {
            ensureChunkReferencesIsMutable();
            super.addAll(values, chunkReferences_);
            onChanged();
          } else {
            chunkReferencesBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public Builder clearChunkReferences() {
          if (chunkReferencesBuilder_ == null) {
            chunkReferences_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
            onChanged();
          } else {
            chunkReferencesBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public Builder removeChunkReferences(int index) {
          if (chunkReferencesBuilder_ == null) {
            ensureChunkReferencesIsMutable();
            chunkReferences_.remove(index);
            onChanged();
          } else {
            chunkReferencesBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public Protocol.ChunkReference.Builder getChunkReferencesBuilder(
            int index) {
          return getChunkReferencesFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public Protocol.ChunkReferenceOrBuilder getChunkReferencesOrBuilder(
            int index) {
          if (chunkReferencesBuilder_ == null) {
            return chunkReferences_.get(index);  } else {
            return chunkReferencesBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public java.util.List<? extends Protocol.ChunkReferenceOrBuilder> 
             getChunkReferencesOrBuilderList() {
          if (chunkReferencesBuilder_ != null) {
            return chunkReferencesBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(chunkReferences_);
          }
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public Protocol.ChunkReference.Builder addChunkReferencesBuilder() {
          return getChunkReferencesFieldBuilder().addBuilder(
              Protocol.ChunkReference.getDefaultInstance());
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public Protocol.ChunkReference.Builder addChunkReferencesBuilder(
            int index) {
          return getChunkReferencesFieldBuilder().addBuilder(
              index, Protocol.ChunkReference.getDefaultInstance());
        }
        /**
         * <code>repeated .ChunkReference chunk_references = 2;</code>
         */
        public java.util.List<Protocol.ChunkReference.Builder> 
             getChunkReferencesBuilderList() {
          return getChunkReferencesFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.ChunkReference, Protocol.ChunkReference.Builder, Protocol.ChunkReferenceOrBuilder> 
            getChunkReferencesFieldBuilder() {
          if (chunkReferencesBuilder_ == null) {
            chunkReferencesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                Protocol.ChunkReference, Protocol.ChunkReference.Builder, Protocol.ChunkReferenceOrBuilder>(
                    chunkReferences_,
                    ((bitField0_ & 0x00000002) == 0x00000002),
                    getParentForChildren(),
                    isClean());
            chunkReferences_ = null;
          }
          return chunkReferencesBuilder_;
        }
  
        // @@protoc_insertion_point(builder_scope:FileChecksumChunkReferences)
      }
  
      static {
        defaultInstance = new FileChecksumChunkReferences(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:FileChecksumChunkReferences)
    }
  
    public interface ChunkReferenceOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required uint64 container_index = 1;
      /**
       * <code>required uint64 container_index = 1;</code>
       */
      boolean hasContainerIndex();
      /**
       * <code>required uint64 container_index = 1;</code>
       */
      long getContainerIndex();
  
      // required uint64 chunk_index = 2;
      /**
       * <code>required uint64 chunk_index = 2;</code>
       */
      boolean hasChunkIndex();
      /**
       * <code>required uint64 chunk_index = 2;</code>
       */
      long getChunkIndex();
    }
    /**
     * Protobuf type {@code ChunkReference}
     */
    public static final class ChunkReference extends
        com.google.protobuf.GeneratedMessage
        implements ChunkReferenceOrBuilder {
      // Use ChunkReference.newBuilder() to construct.
      private ChunkReference(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private ChunkReference(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final ChunkReference defaultInstance;
      public static ChunkReference getDefaultInstance() {
        return defaultInstance;
      }
  
      public ChunkReference getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private ChunkReference(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 8: {
                bitField0_ |= 0x00000001;
                containerIndex_ = input.readUInt64();
                break;
              }
              case 16: {
                bitField0_ |= 0x00000002;
                chunkIndex_ = input.readUInt64();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_ChunkReference_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_ChunkReference_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.ChunkReference.class, Protocol.ChunkReference.Builder.class);
      }
  
      public static com.google.protobuf.Parser<ChunkReference> PARSER =
          new com.google.protobuf.AbstractParser<ChunkReference>() {
        public ChunkReference parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new ChunkReference(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<ChunkReference> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required uint64 container_index = 1;
      public static final int CONTAINER_INDEX_FIELD_NUMBER = 1;
      private long containerIndex_;
      /**
       * <code>required uint64 container_index = 1;</code>
       */
      public boolean hasContainerIndex() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required uint64 container_index = 1;</code>
       */
      public long getContainerIndex() {
        return containerIndex_;
      }
  
      // required uint64 chunk_index = 2;
      public static final int CHUNK_INDEX_FIELD_NUMBER = 2;
      private long chunkIndex_;
      /**
       * <code>required uint64 chunk_index = 2;</code>
       */
      public boolean hasChunkIndex() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required uint64 chunk_index = 2;</code>
       */
      public long getChunkIndex() {
        return chunkIndex_;
      }
  
      private void initFields() {
        containerIndex_ = 0L;
        chunkIndex_ = 0L;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasContainerIndex()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasChunkIndex()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeUInt64(1, containerIndex_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeUInt64(2, chunkIndex_);
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeUInt64Size(1, containerIndex_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeUInt64Size(2, chunkIndex_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.ChunkReference parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.ChunkReference parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.ChunkReference parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.ChunkReference parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.ChunkReference parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.ChunkReference parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.ChunkReference parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.ChunkReference parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.ChunkReference parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.ChunkReference parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.ChunkReference prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code ChunkReference}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.ChunkReferenceOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_ChunkReference_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_ChunkReference_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.ChunkReference.class, Protocol.ChunkReference.Builder.class);
        }
  
        // Construct using Protobuf.ChunkReference.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          containerIndex_ = 0L;
          bitField0_ = (bitField0_ & ~0x00000001);
          chunkIndex_ = 0L;
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_ChunkReference_descriptor;
        }
  
        public Protocol.ChunkReference getDefaultInstanceForType() {
          return Protocol.ChunkReference.getDefaultInstance();
        }
  
        public Protocol.ChunkReference build() {
          Protocol.ChunkReference result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.ChunkReference buildPartial() {
          Protocol.ChunkReference result = new Protocol.ChunkReference(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.containerIndex_ = containerIndex_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.chunkIndex_ = chunkIndex_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.ChunkReference) {
            return mergeFrom((Protocol.ChunkReference)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.ChunkReference other) {
          if (other == Protocol.ChunkReference.getDefaultInstance()) return this;
          if (other.hasContainerIndex()) {
            setContainerIndex(other.getContainerIndex());
          }
          if (other.hasChunkIndex()) {
            setChunkIndex(other.getChunkIndex());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasContainerIndex()) {
            
            return false;
          }
          if (!hasChunkIndex()) {
            
            return false;
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.ChunkReference parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.ChunkReference) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required uint64 container_index = 1;
        private long containerIndex_ ;
        /**
         * <code>required uint64 container_index = 1;</code>
         */
        public boolean hasContainerIndex() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required uint64 container_index = 1;</code>
         */
        public long getContainerIndex() {
          return containerIndex_;
        }
        /**
         * <code>required uint64 container_index = 1;</code>
         */
        public Builder setContainerIndex(long value) {
          bitField0_ |= 0x00000001;
          containerIndex_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required uint64 container_index = 1;</code>
         */
        public Builder clearContainerIndex() {
          bitField0_ = (bitField0_ & ~0x00000001);
          containerIndex_ = 0L;
          onChanged();
          return this;
        }
  
        // required uint64 chunk_index = 2;
        private long chunkIndex_ ;
        /**
         * <code>required uint64 chunk_index = 2;</code>
         */
        public boolean hasChunkIndex() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>required uint64 chunk_index = 2;</code>
         */
        public long getChunkIndex() {
          return chunkIndex_;
        }
        /**
         * <code>required uint64 chunk_index = 2;</code>
         */
        public Builder setChunkIndex(long value) {
          bitField0_ |= 0x00000002;
          chunkIndex_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required uint64 chunk_index = 2;</code>
         */
        public Builder clearChunkIndex() {
          bitField0_ = (bitField0_ & ~0x00000002);
          chunkIndex_ = 0L;
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:ChunkReference)
      }
  
      static {
        defaultInstance = new ChunkReference(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:ChunkReference)
    }
  
    public interface RequestOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required string hostname = 1;
      /**
       * <code>required string hostname = 1;</code>
       */
      boolean hasHostname();
      /**
       * <code>required string hostname = 1;</code>
       */
      java.lang.String getHostname();
      /**
       * <code>required string hostname = 1;</code>
       */
      com.google.protobuf.ByteString
          getHostnameBytes();
  
      // required uint32 port = 2;
      /**
       * <code>required uint32 port = 2;</code>
       */
      boolean hasPort();
      /**
       * <code>required uint32 port = 2;</code>
       */
      int getPort();
  
      // required string method = 3;
      /**
       * <code>required string method = 3;</code>
       */
      boolean hasMethod();
      /**
       * <code>required string method = 3;</code>
       */
      java.lang.String getMethod();
      /**
       * <code>required string method = 3;</code>
       */
      com.google.protobuf.ByteString
          getMethodBytes();
  
      // required string uri = 4;
      /**
       * <code>required string uri = 4;</code>
       */
      boolean hasUri();
      /**
       * <code>required string uri = 4;</code>
       */
      java.lang.String getUri();
      /**
       * <code>required string uri = 4;</code>
       */
      com.google.protobuf.ByteString
          getUriBytes();
  
      // required string transport_protocol = 5;
      /**
       * <code>required string transport_protocol = 5;</code>
       *
       * <pre>
       *"HTTP"
       * </pre>
       */
      boolean hasTransportProtocol();
      /**
       * <code>required string transport_protocol = 5;</code>
       *
       * <pre>
       *"HTTP"
       * </pre>
       */
      java.lang.String getTransportProtocol();
      /**
       * <code>required string transport_protocol = 5;</code>
       *
       * <pre>
       *"HTTP"
       * </pre>
       */
      com.google.protobuf.ByteString
          getTransportProtocolBytes();
  
      // required string transport_protocol_version = 6;
      /**
       * <code>required string transport_protocol_version = 6;</code>
       *
       * <pre>
       *1.1
       * </pre>
       */
      boolean hasTransportProtocolVersion();
      /**
       * <code>required string transport_protocol_version = 6;</code>
       *
       * <pre>
       *1.1
       * </pre>
       */
      java.lang.String getTransportProtocolVersion();
      /**
       * <code>required string transport_protocol_version = 6;</code>
       *
       * <pre>
       *1.1
       * </pre>
       */
      com.google.protobuf.ByteString
          getTransportProtocolVersionBytes();
  
      // required string scheme = 7;
      /**
       * <code>required string scheme = 7;</code>
       *
       * <pre>
       *"http"
       * </pre>
       */
      boolean hasScheme();
      /**
       * <code>required string scheme = 7;</code>
       *
       * <pre>
       *"http"
       * </pre>
       */
      java.lang.String getScheme();
      /**
       * <code>required string scheme = 7;</code>
       *
       * <pre>
       *"http"
       * </pre>
       */
      com.google.protobuf.ByteString
          getSchemeBytes();
  
      // repeated .Header headers = 8;
      /**
       * <code>repeated .Header headers = 8;</code>
       */
      java.util.List<Protocol.Header> 
          getHeadersList();
      /**
       * <code>repeated .Header headers = 8;</code>
       */
      Protocol.Header getHeaders(int index);
      /**
       * <code>repeated .Header headers = 8;</code>
       */
      int getHeadersCount();
      /**
       * <code>repeated .Header headers = 8;</code>
       */
      java.util.List<? extends Protocol.HeaderOrBuilder> 
          getHeadersOrBuilderList();
      /**
       * <code>repeated .Header headers = 8;</code>
       */
      Protocol.HeaderOrBuilder getHeadersOrBuilder(
          int index);
  
      // optional string provider = 9;
      /**
       * <code>optional string provider = 9;</code>
       *
       * <pre>
       *s3_us_ore
       * </pre>
       */
      boolean hasProvider();
      /**
       * <code>optional string provider = 9;</code>
       *
       * <pre>
       *s3_us_ore
       * </pre>
       */
      java.lang.String getProvider();
      /**
       * <code>optional string provider = 9;</code>
       *
       * <pre>
       *s3_us_ore
       * </pre>
       */
      com.google.protobuf.ByteString
          getProviderBytes();
    }
    /**
     * Protobuf type {@code Request}
     *
     * <pre>
     *This is the response of autorizeGet
     * </pre>
     */
    public static final class Request extends
        com.google.protobuf.GeneratedMessage
        implements RequestOrBuilder {
      // Use Request.newBuilder() to construct.
      private Request(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Request(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final Request defaultInstance;
      public static Request getDefaultInstance() {
        return defaultInstance;
      }
  
      public Request getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Request(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                hostname_ = input.readBytes();
                break;
              }
              case 16: {
                bitField0_ |= 0x00000002;
                port_ = input.readUInt32();
                break;
              }
              case 26: {
                bitField0_ |= 0x00000004;
                method_ = input.readBytes();
                break;
              }
              case 34: {
                bitField0_ |= 0x00000008;
                uri_ = input.readBytes();
                break;
              }
              case 42: {
                bitField0_ |= 0x00000010;
                transportProtocol_ = input.readBytes();
                break;
              }
              case 50: {
                bitField0_ |= 0x00000020;
                transportProtocolVersion_ = input.readBytes();
                break;
              }
              case 58: {
                bitField0_ |= 0x00000040;
                scheme_ = input.readBytes();
                break;
              }
              case 66: {
                if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                  headers_ = new java.util.ArrayList<Protocol.Header>();
                  mutable_bitField0_ |= 0x00000080;
                }
                headers_.add(input.readMessage(Protocol.Header.PARSER, extensionRegistry));
                break;
              }
              case 74: {
                bitField0_ |= 0x00000080;
                provider_ = 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.getMessage()).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
            headers_ = java.util.Collections.unmodifiableList(headers_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_Request_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_Request_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.Request.class, Protocol.Request.Builder.class);
      }
  
      public static com.google.protobuf.Parser<Request> PARSER =
          new com.google.protobuf.AbstractParser<Request>() {
        public Request parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Request(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<Request> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required string hostname = 1;
      public static final int HOSTNAME_FIELD_NUMBER = 1;
      private java.lang.Object hostname_;
      /**
       * <code>required string hostname = 1;</code>
       */
      public boolean hasHostname() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required string hostname = 1;</code>
       */
      public java.lang.String getHostname() {
        java.lang.Object ref = hostname_;
        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();
          if (bs.isValidUtf8()) {
            hostname_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string hostname = 1;</code>
       */
      public com.google.protobuf.ByteString
          getHostnameBytes() {
        java.lang.Object ref = hostname_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          hostname_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required uint32 port = 2;
      public static final int PORT_FIELD_NUMBER = 2;
      private int port_;
      /**
       * <code>required uint32 port = 2;</code>
       */
      public boolean hasPort() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required uint32 port = 2;</code>
       */
      public int getPort() {
        return port_;
      }
  
      // required string method = 3;
      public static final int METHOD_FIELD_NUMBER = 3;
      private java.lang.Object method_;
      /**
       * <code>required string method = 3;</code>
       */
      public boolean hasMethod() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>required string method = 3;</code>
       */
      public java.lang.String getMethod() {
        java.lang.Object ref = method_;
        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();
          if (bs.isValidUtf8()) {
            method_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string method = 3;</code>
       */
      public com.google.protobuf.ByteString
          getMethodBytes() {
        java.lang.Object ref = method_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          method_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required string uri = 4;
      public static final int URI_FIELD_NUMBER = 4;
      private java.lang.Object uri_;
      /**
       * <code>required string uri = 4;</code>
       */
      public boolean hasUri() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>required string uri = 4;</code>
       */
      public java.lang.String getUri() {
        java.lang.Object ref = uri_;
        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();
          if (bs.isValidUtf8()) {
            uri_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string uri = 4;</code>
       */
      public com.google.protobuf.ByteString
          getUriBytes() {
        java.lang.Object ref = uri_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          uri_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required string transport_protocol = 5;
      public static final int TRANSPORT_PROTOCOL_FIELD_NUMBER = 5;
      private java.lang.Object transportProtocol_;
      /**
       * <code>required string transport_protocol = 5;</code>
       *
       * <pre>
       *"HTTP"
       * </pre>
       */
      public boolean hasTransportProtocol() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>required string transport_protocol = 5;</code>
       *
       * <pre>
       *"HTTP"
       * </pre>
       */
      public java.lang.String getTransportProtocol() {
        java.lang.Object ref = transportProtocol_;
        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();
          if (bs.isValidUtf8()) {
            transportProtocol_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string transport_protocol = 5;</code>
       *
       * <pre>
       *"HTTP"
       * </pre>
       */
      public com.google.protobuf.ByteString
          getTransportProtocolBytes() {
        java.lang.Object ref = transportProtocol_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          transportProtocol_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required string transport_protocol_version = 6;
      public static final int TRANSPORT_PROTOCOL_VERSION_FIELD_NUMBER = 6;
      private java.lang.Object transportProtocolVersion_;
      /**
       * <code>required string transport_protocol_version = 6;</code>
       *
       * <pre>
       *1.1
       * </pre>
       */
      public boolean hasTransportProtocolVersion() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>required string transport_protocol_version = 6;</code>
       *
       * <pre>
       *1.1
       * </pre>
       */
      public java.lang.String getTransportProtocolVersion() {
        java.lang.Object ref = transportProtocolVersion_;
        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();
          if (bs.isValidUtf8()) {
            transportProtocolVersion_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string transport_protocol_version = 6;</code>
       *
       * <pre>
       *1.1
       * </pre>
       */
      public com.google.protobuf.ByteString
          getTransportProtocolVersionBytes() {
        java.lang.Object ref = transportProtocolVersion_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          transportProtocolVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required string scheme = 7;
      public static final int SCHEME_FIELD_NUMBER = 7;
      private java.lang.Object scheme_;
      /**
       * <code>required string scheme = 7;</code>
       *
       * <pre>
       *"http"
       * </pre>
       */
      public boolean hasScheme() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>required string scheme = 7;</code>
       *
       * <pre>
       *"http"
       * </pre>
       */
      public java.lang.String getScheme() {
        java.lang.Object ref = scheme_;
        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();
          if (bs.isValidUtf8()) {
            scheme_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string scheme = 7;</code>
       *
       * <pre>
       *"http"
       * </pre>
       */
      public com.google.protobuf.ByteString
          getSchemeBytes() {
        java.lang.Object ref = scheme_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          scheme_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // repeated .Header headers = 8;
      public static final int HEADERS_FIELD_NUMBER = 8;
      private java.util.List<Protocol.Header> headers_;
      /**
       * <code>repeated .Header headers = 8;</code>
       */
      public java.util.List<Protocol.Header> getHeadersList() {
        return headers_;
      }
      /**
       * <code>repeated .Header headers = 8;</code>
       */
      public java.util.List<? extends Protocol.HeaderOrBuilder> 
          getHeadersOrBuilderList() {
        return headers_;
      }
      /**
       * <code>repeated .Header headers = 8;</code>
       */
      public int getHeadersCount() {
        return headers_.size();
      }
      /**
       * <code>repeated .Header headers = 8;</code>
       */
      public Protocol.Header getHeaders(int index) {
        return headers_.get(index);
      }
      /**
       * <code>repeated .Header headers = 8;</code>
       */
      public Protocol.HeaderOrBuilder getHeadersOrBuilder(
          int index) {
        return headers_.get(index);
      }
  
      // optional string provider = 9;
      public static final int PROVIDER_FIELD_NUMBER = 9;
      private java.lang.Object provider_;
      /**
       * <code>optional string provider = 9;</code>
       *
       * <pre>
       *s3_us_ore
       * </pre>
       */
      public boolean hasProvider() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string provider = 9;</code>
       *
       * <pre>
       *s3_us_ore
       * </pre>
       */
      public java.lang.String getProvider() {
        java.lang.Object ref = provider_;
        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();
          if (bs.isValidUtf8()) {
            provider_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string provider = 9;</code>
       *
       * <pre>
       *s3_us_ore
       * </pre>
       */
      public com.google.protobuf.ByteString
          getProviderBytes() {
        java.lang.Object ref = provider_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          provider_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      private void initFields() {
        hostname_ = "";
        port_ = 0;
        method_ = "";
        uri_ = "";
        transportProtocol_ = "";
        transportProtocolVersion_ = "";
        scheme_ = "";
        headers_ = java.util.Collections.emptyList();
        provider_ = "";
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasHostname()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasPort()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasMethod()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasUri()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasTransportProtocol()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasTransportProtocolVersion()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasScheme()) {
          memoizedIsInitialized = 0;
          return false;
        }
        for (int i = 0; i < getHeadersCount(); i++) {
          if (!getHeaders(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, getHostnameBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeUInt32(2, port_);
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeBytes(3, getMethodBytes());
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          output.writeBytes(4, getUriBytes());
        }
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          output.writeBytes(5, getTransportProtocolBytes());
        }
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          output.writeBytes(6, getTransportProtocolVersionBytes());
        }
        if (((bitField0_ & 0x00000040) == 0x00000040)) {
          output.writeBytes(7, getSchemeBytes());
        }
        for (int i = 0; i < headers_.size(); i++) {
          output.writeMessage(8, headers_.get(i));
        }
        if (((bitField0_ & 0x00000080) == 0x00000080)) {
          output.writeBytes(9, getProviderBytes());
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, getHostnameBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeUInt32Size(2, port_);
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(3, getMethodBytes());
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(4, getUriBytes());
        }
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(5, getTransportProtocolBytes());
        }
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(6, getTransportProtocolVersionBytes());
        }
        if (((bitField0_ & 0x00000040) == 0x00000040)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(7, getSchemeBytes());
        }
        for (int i = 0; i < headers_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(8, headers_.get(i));
        }
        if (((bitField0_ & 0x00000080) == 0x00000080)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(9, getProviderBytes());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.Request parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.Request parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.Request parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.Request parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.Request parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.Request parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.Request parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.Request parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.Request parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.Request parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.Request prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code Request}
       *
       * <pre>
       *This is the response of autorizeGet
       * </pre>
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.RequestOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_Request_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_Request_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.Request.class, Protocol.Request.Builder.class);
        }
  
        // Construct using Protobuf.Request.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getHeadersFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          hostname_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          port_ = 0;
          bitField0_ = (bitField0_ & ~0x00000002);
          method_ = "";
          bitField0_ = (bitField0_ & ~0x00000004);
          uri_ = "";
          bitField0_ = (bitField0_ & ~0x00000008);
          transportProtocol_ = "";
          bitField0_ = (bitField0_ & ~0x00000010);
          transportProtocolVersion_ = "";
          bitField0_ = (bitField0_ & ~0x00000020);
          scheme_ = "";
          bitField0_ = (bitField0_ & ~0x00000040);
          if (headersBuilder_ == null) {
            headers_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000080);
          } else {
            headersBuilder_.clear();
          }
          provider_ = "";
          bitField0_ = (bitField0_ & ~0x00000100);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_Request_descriptor;
        }
  
        public Protocol.Request getDefaultInstanceForType() {
          return Protocol.Request.getDefaultInstance();
        }
  
        public Protocol.Request build() {
          Protocol.Request result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.Request buildPartial() {
          Protocol.Request result = new Protocol.Request(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.hostname_ = hostname_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.port_ = port_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000004;
          }
          result.method_ = method_;
          if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
            to_bitField0_ |= 0x00000008;
          }
          result.uri_ = uri_;
          if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
            to_bitField0_ |= 0x00000010;
          }
          result.transportProtocol_ = transportProtocol_;
          if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
            to_bitField0_ |= 0x00000020;
          }
          result.transportProtocolVersion_ = transportProtocolVersion_;
          if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
            to_bitField0_ |= 0x00000040;
          }
          result.scheme_ = scheme_;
          if (headersBuilder_ == null) {
            if (((bitField0_ & 0x00000080) == 0x00000080)) {
              headers_ = java.util.Collections.unmodifiableList(headers_);
              bitField0_ = (bitField0_ & ~0x00000080);
            }
            result.headers_ = headers_;
          } else {
            result.headers_ = headersBuilder_.build();
          }
          if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
            to_bitField0_ |= 0x00000080;
          }
          result.provider_ = provider_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.Request) {
            return mergeFrom((Protocol.Request)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.Request other) {
          if (other == Protocol.Request.getDefaultInstance()) return this;
          if (other.hasHostname()) {
            bitField0_ |= 0x00000001;
            hostname_ = other.hostname_;
            onChanged();
          }
          if (other.hasPort()) {
            setPort(other.getPort());
          }
          if (other.hasMethod()) {
            bitField0_ |= 0x00000004;
            method_ = other.method_;
            onChanged();
          }
          if (other.hasUri()) {
            bitField0_ |= 0x00000008;
            uri_ = other.uri_;
            onChanged();
          }
          if (other.hasTransportProtocol()) {
            bitField0_ |= 0x00000010;
            transportProtocol_ = other.transportProtocol_;
            onChanged();
          }
          if (other.hasTransportProtocolVersion()) {
            bitField0_ |= 0x00000020;
            transportProtocolVersion_ = other.transportProtocolVersion_;
            onChanged();
          }
          if (other.hasScheme()) {
            bitField0_ |= 0x00000040;
            scheme_ = other.scheme_;
            onChanged();
          }
          if (headersBuilder_ == null) {
            if (!other.headers_.isEmpty()) {
              if (headers_.isEmpty()) {
                headers_ = other.headers_;
                bitField0_ = (bitField0_ & ~0x00000080);
              } else {
                ensureHeadersIsMutable();
                headers_.addAll(other.headers_);
              }
              onChanged();
            }
          } else {
            if (!other.headers_.isEmpty()) {
              if (headersBuilder_.isEmpty()) {
                headersBuilder_.dispose();
                headersBuilder_ = null;
                headers_ = other.headers_;
                bitField0_ = (bitField0_ & ~0x00000080);
                headersBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getHeadersFieldBuilder() : null;
              } else {
                headersBuilder_.addAllMessages(other.headers_);
              }
            }
          }
          if (other.hasProvider()) {
            bitField0_ |= 0x00000100;
            provider_ = other.provider_;
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasHostname()) {
            
            return false;
          }
          if (!hasPort()) {
            
            return false;
          }
          if (!hasMethod()) {
            
            return false;
          }
          if (!hasUri()) {
            
            return false;
          }
          if (!hasTransportProtocol()) {
            
            return false;
          }
          if (!hasTransportProtocolVersion()) {
            
            return false;
          }
          if (!hasScheme()) {
            
            return false;
          }
          for (int i = 0; i < getHeadersCount(); i++) {
            if (!getHeaders(i).isInitialized()) {
              
              return false;
            }
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.Request parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.Request) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required string hostname = 1;
        private java.lang.Object hostname_ = "";
        /**
         * <code>required string hostname = 1;</code>
         */
        public boolean hasHostname() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required string hostname = 1;</code>
         */
        public java.lang.String getHostname() {
          java.lang.Object ref = hostname_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            hostname_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string hostname = 1;</code>
         */
        public com.google.protobuf.ByteString
            getHostnameBytes() {
          java.lang.Object ref = hostname_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            hostname_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string hostname = 1;</code>
         */
        public Builder setHostname(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          hostname_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string hostname = 1;</code>
         */
        public Builder clearHostname() {
          bitField0_ = (bitField0_ & ~0x00000001);
          hostname_ = getDefaultInstance().getHostname();
          onChanged();
          return this;
        }
        /**
         * <code>required string hostname = 1;</code>
         */
        public Builder setHostnameBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          hostname_ = value;
          onChanged();
          return this;
        }
  
        // required uint32 port = 2;
        private int port_ ;
        /**
         * <code>required uint32 port = 2;</code>
         */
        public boolean hasPort() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>required uint32 port = 2;</code>
         */
        public int getPort() {
          return port_;
        }
        /**
         * <code>required uint32 port = 2;</code>
         */
        public Builder setPort(int value) {
          bitField0_ |= 0x00000002;
          port_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required uint32 port = 2;</code>
         */
        public Builder clearPort() {
          bitField0_ = (bitField0_ & ~0x00000002);
          port_ = 0;
          onChanged();
          return this;
        }
  
        // required string method = 3;
        private java.lang.Object method_ = "";
        /**
         * <code>required string method = 3;</code>
         */
        public boolean hasMethod() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>required string method = 3;</code>
         */
        public java.lang.String getMethod() {
          java.lang.Object ref = method_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            method_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string method = 3;</code>
         */
        public com.google.protobuf.ByteString
            getMethodBytes() {
          java.lang.Object ref = method_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            method_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string method = 3;</code>
         */
        public Builder setMethod(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000004;
          method_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string method = 3;</code>
         */
        public Builder clearMethod() {
          bitField0_ = (bitField0_ & ~0x00000004);
          method_ = getDefaultInstance().getMethod();
          onChanged();
          return this;
        }
        /**
         * <code>required string method = 3;</code>
         */
        public Builder setMethodBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000004;
          method_ = value;
          onChanged();
          return this;
        }
  
        // required string uri = 4;
        private java.lang.Object uri_ = "";
        /**
         * <code>required string uri = 4;</code>
         */
        public boolean hasUri() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>required string uri = 4;</code>
         */
        public java.lang.String getUri() {
          java.lang.Object ref = uri_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            uri_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string uri = 4;</code>
         */
        public com.google.protobuf.ByteString
            getUriBytes() {
          java.lang.Object ref = uri_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            uri_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string uri = 4;</code>
         */
        public Builder setUri(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000008;
          uri_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string uri = 4;</code>
         */
        public Builder clearUri() {
          bitField0_ = (bitField0_ & ~0x00000008);
          uri_ = getDefaultInstance().getUri();
          onChanged();
          return this;
        }
        /**
         * <code>required string uri = 4;</code>
         */
        public Builder setUriBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000008;
          uri_ = value;
          onChanged();
          return this;
        }
  
        // required string transport_protocol = 5;
        private java.lang.Object transportProtocol_ = "";
        /**
         * <code>required string transport_protocol = 5;</code>
         *
         * <pre>
         *"HTTP"
         * </pre>
         */
        public boolean hasTransportProtocol() {
          return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>required string transport_protocol = 5;</code>
         *
         * <pre>
         *"HTTP"
         * </pre>
         */
        public java.lang.String getTransportProtocol() {
          java.lang.Object ref = transportProtocol_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            transportProtocol_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string transport_protocol = 5;</code>
         *
         * <pre>
         *"HTTP"
         * </pre>
         */
        public com.google.protobuf.ByteString
            getTransportProtocolBytes() {
          java.lang.Object ref = transportProtocol_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            transportProtocol_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string transport_protocol = 5;</code>
         *
         * <pre>
         *"HTTP"
         * </pre>
         */
        public Builder setTransportProtocol(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000010;
          transportProtocol_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string transport_protocol = 5;</code>
         *
         * <pre>
         *"HTTP"
         * </pre>
         */
        public Builder clearTransportProtocol() {
          bitField0_ = (bitField0_ & ~0x00000010);
          transportProtocol_ = getDefaultInstance().getTransportProtocol();
          onChanged();
          return this;
        }
        /**
         * <code>required string transport_protocol = 5;</code>
         *
         * <pre>
         *"HTTP"
         * </pre>
         */
        public Builder setTransportProtocolBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000010;
          transportProtocol_ = value;
          onChanged();
          return this;
        }
  
        // required string transport_protocol_version = 6;
        private java.lang.Object transportProtocolVersion_ = "";
        /**
         * <code>required string transport_protocol_version = 6;</code>
         *
         * <pre>
         *1.1
         * </pre>
         */
        public boolean hasTransportProtocolVersion() {
          return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>required string transport_protocol_version = 6;</code>
         *
         * <pre>
         *1.1
         * </pre>
         */
        public java.lang.String getTransportProtocolVersion() {
          java.lang.Object ref = transportProtocolVersion_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            transportProtocolVersion_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string transport_protocol_version = 6;</code>
         *
         * <pre>
         *1.1
         * </pre>
         */
        public com.google.protobuf.ByteString
            getTransportProtocolVersionBytes() {
          java.lang.Object ref = transportProtocolVersion_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            transportProtocolVersion_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string transport_protocol_version = 6;</code>
         *
         * <pre>
         *1.1
         * </pre>
         */
        public Builder setTransportProtocolVersion(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000020;
          transportProtocolVersion_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string transport_protocol_version = 6;</code>
         *
         * <pre>
         *1.1
         * </pre>
         */
        public Builder clearTransportProtocolVersion() {
          bitField0_ = (bitField0_ & ~0x00000020);
          transportProtocolVersion_ = getDefaultInstance().getTransportProtocolVersion();
          onChanged();
          return this;
        }
        /**
         * <code>required string transport_protocol_version = 6;</code>
         *
         * <pre>
         *1.1
         * </pre>
         */
        public Builder setTransportProtocolVersionBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000020;
          transportProtocolVersion_ = value;
          onChanged();
          return this;
        }
  
        // required string scheme = 7;
        private java.lang.Object scheme_ = "";
        /**
         * <code>required string scheme = 7;</code>
         *
         * <pre>
         *"http"
         * </pre>
         */
        public boolean hasScheme() {
          return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>required string scheme = 7;</code>
         *
         * <pre>
         *"http"
         * </pre>
         */
        public java.lang.String getScheme() {
          java.lang.Object ref = scheme_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            scheme_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string scheme = 7;</code>
         *
         * <pre>
         *"http"
         * </pre>
         */
        public com.google.protobuf.ByteString
            getSchemeBytes() {
          java.lang.Object ref = scheme_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            scheme_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string scheme = 7;</code>
         *
         * <pre>
         *"http"
         * </pre>
         */
        public Builder setScheme(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000040;
          scheme_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string scheme = 7;</code>
         *
         * <pre>
         *"http"
         * </pre>
         */
        public Builder clearScheme() {
          bitField0_ = (bitField0_ & ~0x00000040);
          scheme_ = getDefaultInstance().getScheme();
          onChanged();
          return this;
        }
        /**
         * <code>required string scheme = 7;</code>
         *
         * <pre>
         *"http"
         * </pre>
         */
        public Builder setSchemeBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000040;
          scheme_ = value;
          onChanged();
          return this;
        }
  
        // repeated .Header headers = 8;
        private java.util.List<Protocol.Header> headers_ =
          java.util.Collections.emptyList();
        private void ensureHeadersIsMutable() {
          if (!((bitField0_ & 0x00000080) == 0x00000080)) {
            headers_ = new java.util.ArrayList<Protocol.Header>(headers_);
            bitField0_ |= 0x00000080;
           }
        }
  
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.Header, Protocol.Header.Builder, Protocol.HeaderOrBuilder> headersBuilder_;
  
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public java.util.List<Protocol.Header> getHeadersList() {
          if (headersBuilder_ == null) {
            return java.util.Collections.unmodifiableList(headers_);
          } else {
            return headersBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public int getHeadersCount() {
          if (headersBuilder_ == null) {
            return headers_.size();
          } else {
            return headersBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public Protocol.Header getHeaders(int index) {
          if (headersBuilder_ == null) {
            return headers_.get(index);
          } else {
            return headersBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public Builder setHeaders(
            int index, Protocol.Header value) {
          if (headersBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureHeadersIsMutable();
            headers_.set(index, value);
            onChanged();
          } else {
            headersBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public Builder setHeaders(
            int index, Protocol.Header.Builder builderForValue) {
          if (headersBuilder_ == null) {
            ensureHeadersIsMutable();
            headers_.set(index, builderForValue.build());
            onChanged();
          } else {
            headersBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public Builder addHeaders(Protocol.Header value) {
          if (headersBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureHeadersIsMutable();
            headers_.add(value);
            onChanged();
          } else {
            headersBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public Builder addHeaders(
            int index, Protocol.Header value) {
          if (headersBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureHeadersIsMutable();
            headers_.add(index, value);
            onChanged();
          } else {
            headersBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public Builder addHeaders(
            Protocol.Header.Builder builderForValue) {
          if (headersBuilder_ == null) {
            ensureHeadersIsMutable();
            headers_.add(builderForValue.build());
            onChanged();
          } else {
            headersBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public Builder addHeaders(
            int index, Protocol.Header.Builder builderForValue) {
          if (headersBuilder_ == null) {
            ensureHeadersIsMutable();
            headers_.add(index, builderForValue.build());
            onChanged();
          } else {
            headersBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public Builder addAllHeaders(
            java.lang.Iterable<? extends Protocol.Header> values) {
          if (headersBuilder_ == null) {
            ensureHeadersIsMutable();
            super.addAll(values, headers_);
            onChanged();
          } else {
            headersBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public Builder clearHeaders() {
          if (headersBuilder_ == null) {
            headers_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000080);
            onChanged();
          } else {
            headersBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public Builder removeHeaders(int index) {
          if (headersBuilder_ == null) {
            ensureHeadersIsMutable();
            headers_.remove(index);
            onChanged();
          } else {
            headersBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public Protocol.Header.Builder getHeadersBuilder(
            int index) {
          return getHeadersFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public Protocol.HeaderOrBuilder getHeadersOrBuilder(
            int index) {
          if (headersBuilder_ == null) {
            return headers_.get(index);  } else {
            return headersBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public java.util.List<? extends Protocol.HeaderOrBuilder> 
             getHeadersOrBuilderList() {
          if (headersBuilder_ != null) {
            return headersBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(headers_);
          }
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public Protocol.Header.Builder addHeadersBuilder() {
          return getHeadersFieldBuilder().addBuilder(
              Protocol.Header.getDefaultInstance());
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public Protocol.Header.Builder addHeadersBuilder(
            int index) {
          return getHeadersFieldBuilder().addBuilder(
              index, Protocol.Header.getDefaultInstance());
        }
        /**
         * <code>repeated .Header headers = 8;</code>
         */
        public java.util.List<Protocol.Header.Builder> 
             getHeadersBuilderList() {
          return getHeadersFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.Header, Protocol.Header.Builder, Protocol.HeaderOrBuilder> 
            getHeadersFieldBuilder() {
          if (headersBuilder_ == null) {
            headersBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                Protocol.Header, Protocol.Header.Builder, Protocol.HeaderOrBuilder>(
                    headers_,
                    ((bitField0_ & 0x00000080) == 0x00000080),
                    getParentForChildren(),
                    isClean());
            headers_ = null;
          }
          return headersBuilder_;
        }
  
        // optional string provider = 9;
        private java.lang.Object provider_ = "";
        /**
         * <code>optional string provider = 9;</code>
         *
         * <pre>
         *s3_us_ore
         * </pre>
         */
        public boolean hasProvider() {
          return ((bitField0_ & 0x00000100) == 0x00000100);
        }
        /**
         * <code>optional string provider = 9;</code>
         *
         * <pre>
         *s3_us_ore
         * </pre>
         */
        public java.lang.String getProvider() {
          java.lang.Object ref = provider_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            provider_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string provider = 9;</code>
         *
         * <pre>
         *s3_us_ore
         * </pre>
         */
        public com.google.protobuf.ByteString
            getProviderBytes() {
          java.lang.Object ref = provider_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            provider_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string provider = 9;</code>
         *
         * <pre>
         *s3_us_ore
         * </pre>
         */
        public Builder setProvider(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000100;
          provider_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string provider = 9;</code>
         *
         * <pre>
         *s3_us_ore
         * </pre>
         */
        public Builder clearProvider() {
          bitField0_ = (bitField0_ & ~0x00000100);
          provider_ = getDefaultInstance().getProvider();
          onChanged();
          return this;
        }
        /**
         * <code>optional string provider = 9;</code>
         *
         * <pre>
         *s3_us_ore
         * </pre>
         */
        public Builder setProviderBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000100;
          provider_ = value;
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:Request)
      }
  
      static {
        defaultInstance = new Request(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:Request)
    }
  
    public interface FileAttributeOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required string name = 1;
      /**
       * <code>required string name = 1;</code>
       */
      boolean hasName();
      /**
       * <code>required string name = 1;</code>
       */
      java.lang.String getName();
      /**
       * <code>required string name = 1;</code>
       */
      com.google.protobuf.ByteString
          getNameBytes();
  
      // required bytes value = 2;
      /**
       * <code>required bytes value = 2;</code>
       */
      boolean hasValue();
      /**
       * <code>required bytes value = 2;</code>
       */
      com.google.protobuf.ByteString getValue();
    }
    /**
     * Protobuf type {@code FileAttribute}
     */
    public static final class FileAttribute extends
        com.google.protobuf.GeneratedMessage
        implements FileAttributeOrBuilder {
      // Use FileAttribute.newBuilder() to construct.
      private FileAttribute(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private FileAttribute(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final FileAttribute defaultInstance;
      public static FileAttribute getDefaultInstance() {
        return defaultInstance;
      }
  
      public FileAttribute getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private FileAttribute(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                name_ = input.readBytes();
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                value_ = 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.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_FileAttribute_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_FileAttribute_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.FileAttribute.class, Protocol.FileAttribute.Builder.class);
      }
  
      public static com.google.protobuf.Parser<FileAttribute> PARSER =
          new com.google.protobuf.AbstractParser<FileAttribute>() {
        public FileAttribute parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new FileAttribute(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<FileAttribute> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required string name = 1;
      public static final int NAME_FIELD_NUMBER = 1;
      private java.lang.Object name_;
      /**
       * <code>required string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required bytes value = 2;
      public static final int VALUE_FIELD_NUMBER = 2;
      private com.google.protobuf.ByteString value_;
      /**
       * <code>required bytes value = 2;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required bytes value = 2;</code>
       */
      public com.google.protobuf.ByteString getValue() {
        return value_;
      }
  
      private void initFields() {
        name_ = "";
        value_ = com.google.protobuf.ByteString.EMPTY;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasName()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasValue()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, getNameBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(2, value_);
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, getNameBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, value_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.FileAttribute parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.FileAttribute parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.FileAttribute parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.FileAttribute parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.FileAttribute parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.FileAttribute parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.FileAttribute parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.FileAttribute parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.FileAttribute parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.FileAttribute parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.FileAttribute prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code FileAttribute}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.FileAttributeOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_FileAttribute_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_FileAttribute_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.FileAttribute.class, Protocol.FileAttribute.Builder.class);
        }
  
        // Construct using Protobuf.FileAttribute.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          name_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          value_ = com.google.protobuf.ByteString.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_FileAttribute_descriptor;
        }
  
        public Protocol.FileAttribute getDefaultInstanceForType() {
          return Protocol.FileAttribute.getDefaultInstance();
        }
  
        public Protocol.FileAttribute build() {
          Protocol.FileAttribute result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.FileAttribute buildPartial() {
          Protocol.FileAttribute result = new Protocol.FileAttribute(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.name_ = name_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.value_ = value_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.FileAttribute) {
            return mergeFrom((Protocol.FileAttribute)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.FileAttribute other) {
          if (other == Protocol.FileAttribute.getDefaultInstance()) return this;
          if (other.hasName()) {
            bitField0_ |= 0x00000001;
            name_ = other.name_;
            onChanged();
          }
          if (other.hasValue()) {
            setValue(other.getValue());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasName()) {
            
            return false;
          }
          if (!hasValue()) {
            
            return false;
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.FileAttribute parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.FileAttribute) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required string name = 1;
        private java.lang.Object name_ = "";
        /**
         * <code>required string name = 1;</code>
         */
        public boolean hasName() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required string name = 1;</code>
         */
        public java.lang.String getName() {
          java.lang.Object ref = name_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            name_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string name = 1;</code>
         */
        public com.google.protobuf.ByteString
            getNameBytes() {
          java.lang.Object ref = name_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            name_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string name = 1;</code>
         */
        public Builder setName(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          name_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string name = 1;</code>
         */
        public Builder clearName() {
          bitField0_ = (bitField0_ & ~0x00000001);
          name_ = getDefaultInstance().getName();
          onChanged();
          return this;
        }
        /**
         * <code>required string name = 1;</code>
         */
        public Builder setNameBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          name_ = value;
          onChanged();
          return this;
        }
  
        // required bytes value = 2;
        private com.google.protobuf.ByteString value_ = com.google.protobuf.ByteString.EMPTY;
        /**
         * <code>required bytes value = 2;</code>
         */
        public boolean hasValue() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>required bytes value = 2;</code>
         */
        public com.google.protobuf.ByteString getValue() {
          return value_;
        }
        /**
         * <code>required bytes value = 2;</code>
         */
        public Builder setValue(com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          value_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required bytes value = 2;</code>
         */
        public Builder clearValue() {
          bitField0_ = (bitField0_ & ~0x00000002);
          value_ = getDefaultInstance().getValue();
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:FileAttribute)
      }
  
      static {
        defaultInstance = new FileAttribute(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:FileAttribute)
    }
  
    public interface FileInfoOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // optional int32 unknown1 = 1;
      /**
       * <code>optional int32 unknown1 = 1;</code>
       */
      boolean hasUnknown1();
      /**
       * <code>optional int32 unknown1 = 1;</code>
       */
      int getUnknown1();
  
      // optional string unknown2 = 2;
      /**
       * <code>optional string unknown2 = 2;</code>
       */
      boolean hasUnknown2();
      /**
       * <code>optional string unknown2 = 2;</code>
       */
      java.lang.String getUnknown2();
      /**
       * <code>optional string unknown2 = 2;</code>
       */
      com.google.protobuf.ByteString
          getUnknown2Bytes();
  
      // optional bytes unknown3 = 3;
      /**
       * <code>optional bytes unknown3 = 3;</code>
       */
      boolean hasUnknown3();
      /**
       * <code>optional bytes unknown3 = 3;</code>
       */
      com.google.protobuf.ByteString getUnknown3();
  
      // required int32 unknown4 = 4;
      /**
       * <code>required int32 unknown4 = 4;</code>
       */
      boolean hasUnknown4();
      /**
       * <code>required int32 unknown4 = 4;</code>
       */
      int getUnknown4();
  
      // required int32 unknown5 = 5;
      /**
       * <code>required int32 unknown5 = 5;</code>
       */
      boolean hasUnknown5();
      /**
       * <code>required int32 unknown5 = 5;</code>
       */
      int getUnknown5();
  
      // required int32 user = 6;
      /**
       * <code>required int32 user = 6;</code>
       */
      boolean hasUser();
      /**
       * <code>required int32 user = 6;</code>
       */
      int getUser();
  
      // required int32 group = 7;
      /**
       * <code>required int32 group = 7;</code>
       */
      boolean hasGroup();
      /**
       * <code>required int32 group = 7;</code>
       */
      int getGroup();
  
      // required int64 mtime = 8;
      /**
       * <code>required int64 mtime = 8;</code>
       */
      boolean hasMtime();
      /**
       * <code>required int64 mtime = 8;</code>
       */
      long getMtime();
  
      // required int64 atime = 9;
      /**
       * <code>required int64 atime = 9;</code>
       */
      boolean hasAtime();
      /**
       * <code>required int64 atime = 9;</code>
       */
      long getAtime();
  
      // required int64 ctime = 10;
      /**
       * <code>required int64 ctime = 10;</code>
       */
      boolean hasCtime();
      /**
       * <code>required int64 ctime = 10;</code>
       */
      long getCtime();
  
      // required int32 protection = 12;
      /**
       * <code>required int32 protection = 12;</code>
       */
      boolean hasProtection();
      /**
       * <code>required int32 protection = 12;</code>
       */
      int getProtection();
  
      // repeated .FileAttribute attributes = 13;
      /**
       * <code>repeated .FileAttribute attributes = 13;</code>
       */
      java.util.List<Protocol.FileAttribute> 
          getAttributesList();
      /**
       * <code>repeated .FileAttribute attributes = 13;</code>
       */
      Protocol.FileAttribute getAttributes(int index);
      /**
       * <code>repeated .FileAttribute attributes = 13;</code>
       */
      int getAttributesCount();
      /**
       * <code>repeated .FileAttribute attributes = 13;</code>
       */
      java.util.List<? extends Protocol.FileAttributeOrBuilder> 
          getAttributesOrBuilderList();
      /**
       * <code>repeated .FileAttribute attributes = 13;</code>
       */
      Protocol.FileAttributeOrBuilder getAttributesOrBuilder(
          int index);
  
      // optional int32 unknown6 = 14;
      /**
       * <code>optional int32 unknown6 = 14;</code>
       */
      boolean hasUnknown6();
      /**
       * <code>optional int32 unknown6 = 14;</code>
       */
      int getUnknown6();
  
      // optional int32 unknown7 = 15;
      /**
       * <code>optional int32 unknown7 = 15;</code>
       */
      boolean hasUnknown7();
      /**
       * <code>optional int32 unknown7 = 15;</code>
       */
      int getUnknown7();
    }
    /**
     * Protobuf type {@code FileInfo}
     */
    public static final class FileInfo extends
        com.google.protobuf.GeneratedMessage
        implements FileInfoOrBuilder {
      // Use FileInfo.newBuilder() to construct.
      private FileInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private FileInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final FileInfo defaultInstance;
      public static FileInfo getDefaultInstance() {
        return defaultInstance;
      }
  
      public FileInfo getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private FileInfo(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 8: {
                bitField0_ |= 0x00000001;
                unknown1_ = input.readInt32();
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                unknown2_ = input.readBytes();
                break;
              }
              case 26: {
                bitField0_ |= 0x00000004;
                unknown3_ = input.readBytes();
                break;
              }
              case 32: {
                bitField0_ |= 0x00000008;
                unknown4_ = input.readInt32();
                break;
              }
              case 40: {
                bitField0_ |= 0x00000010;
                unknown5_ = input.readInt32();
                break;
              }
              case 48: {
                bitField0_ |= 0x00000020;
                user_ = input.readInt32();
                break;
              }
              case 56: {
                bitField0_ |= 0x00000040;
                group_ = input.readInt32();
                break;
              }
              case 64: {
                bitField0_ |= 0x00000080;
                mtime_ = input.readInt64();
                break;
              }
              case 72: {
                bitField0_ |= 0x00000100;
                atime_ = input.readInt64();
                break;
              }
              case 80: {
                bitField0_ |= 0x00000200;
                ctime_ = input.readInt64();
                break;
              }
              case 96: {
                bitField0_ |= 0x00000400;
                protection_ = input.readInt32();
                break;
              }
              case 106: {
                if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
                  attributes_ = new java.util.ArrayList<Protocol.FileAttribute>();
                  mutable_bitField0_ |= 0x00000800;
                }
                attributes_.add(input.readMessage(Protocol.FileAttribute.PARSER, extensionRegistry));
                break;
              }
              case 112: {
                bitField0_ |= 0x00000800;
                unknown6_ = input.readInt32();
                break;
              }
              case 120: {
                bitField0_ |= 0x00001000;
                unknown7_ = 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.getMessage()).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
            attributes_ = java.util.Collections.unmodifiableList(attributes_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_FileInfo_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_FileInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.FileInfo.class, Protocol.FileInfo.Builder.class);
      }
  
      public static com.google.protobuf.Parser<FileInfo> PARSER =
          new com.google.protobuf.AbstractParser<FileInfo>() {
        public FileInfo parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new FileInfo(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<FileInfo> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // optional int32 unknown1 = 1;
      public static final int UNKNOWN1_FIELD_NUMBER = 1;
      private int unknown1_;
      /**
       * <code>optional int32 unknown1 = 1;</code>
       */
      public boolean hasUnknown1() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 unknown1 = 1;</code>
       */
      public int getUnknown1() {
        return unknown1_;
      }
  
      // optional string unknown2 = 2;
      public static final int UNKNOWN2_FIELD_NUMBER = 2;
      private java.lang.Object unknown2_;
      /**
       * <code>optional string unknown2 = 2;</code>
       */
      public boolean hasUnknown2() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string unknown2 = 2;</code>
       */
      public java.lang.String getUnknown2() {
        java.lang.Object ref = unknown2_;
        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();
          if (bs.isValidUtf8()) {
            unknown2_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string unknown2 = 2;</code>
       */
      public com.google.protobuf.ByteString
          getUnknown2Bytes() {
        java.lang.Object ref = unknown2_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          unknown2_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // optional bytes unknown3 = 3;
      public static final int UNKNOWN3_FIELD_NUMBER = 3;
      private com.google.protobuf.ByteString unknown3_;
      /**
       * <code>optional bytes unknown3 = 3;</code>
       */
      public boolean hasUnknown3() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bytes unknown3 = 3;</code>
       */
      public com.google.protobuf.ByteString getUnknown3() {
        return unknown3_;
      }
  
      // required int32 unknown4 = 4;
      public static final int UNKNOWN4_FIELD_NUMBER = 4;
      private int unknown4_;
      /**
       * <code>required int32 unknown4 = 4;</code>
       */
      public boolean hasUnknown4() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>required int32 unknown4 = 4;</code>
       */
      public int getUnknown4() {
        return unknown4_;
      }
  
      // required int32 unknown5 = 5;
      public static final int UNKNOWN5_FIELD_NUMBER = 5;
      private int unknown5_;
      /**
       * <code>required int32 unknown5 = 5;</code>
       */
      public boolean hasUnknown5() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>required int32 unknown5 = 5;</code>
       */
      public int getUnknown5() {
        return unknown5_;
      }
  
      // required int32 user = 6;
      public static final int USER_FIELD_NUMBER = 6;
      private int user_;
      /**
       * <code>required int32 user = 6;</code>
       */
      public boolean hasUser() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>required int32 user = 6;</code>
       */
      public int getUser() {
        return user_;
      }
  
      // required int32 group = 7;
      public static final int GROUP_FIELD_NUMBER = 7;
      private int group_;
      /**
       * <code>required int32 group = 7;</code>
       */
      public boolean hasGroup() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>required int32 group = 7;</code>
       */
      public int getGroup() {
        return group_;
      }
  
      // required int64 mtime = 8;
      public static final int MTIME_FIELD_NUMBER = 8;
      private long mtime_;
      /**
       * <code>required int64 mtime = 8;</code>
       */
      public boolean hasMtime() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>required int64 mtime = 8;</code>
       */
      public long getMtime() {
        return mtime_;
      }
  
      // required int64 atime = 9;
      public static final int ATIME_FIELD_NUMBER = 9;
      private long atime_;
      /**
       * <code>required int64 atime = 9;</code>
       */
      public boolean hasAtime() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>required int64 atime = 9;</code>
       */
      public long getAtime() {
        return atime_;
      }
  
      // required int64 ctime = 10;
      public static final int CTIME_FIELD_NUMBER = 10;
      private long ctime_;
      /**
       * <code>required int64 ctime = 10;</code>
       */
      public boolean hasCtime() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>required int64 ctime = 10;</code>
       */
      public long getCtime() {
        return ctime_;
      }
  
      // required int32 protection = 12;
      public static final int PROTECTION_FIELD_NUMBER = 12;
      private int protection_;
      /**
       * <code>required int32 protection = 12;</code>
       */
      public boolean hasProtection() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>required int32 protection = 12;</code>
       */
      public int getProtection() {
        return protection_;
      }
  
      // repeated .FileAttribute attributes = 13;
      public static final int ATTRIBUTES_FIELD_NUMBER = 13;
      private java.util.List<Protocol.FileAttribute> attributes_;
      /**
       * <code>repeated .FileAttribute attributes = 13;</code>
       */
      public java.util.List<Protocol.FileAttribute> getAttributesList() {
        return attributes_;
      }
      /**
       * <code>repeated .FileAttribute attributes = 13;</code>
       */
      public java.util.List<? extends Protocol.FileAttributeOrBuilder> 
          getAttributesOrBuilderList() {
        return attributes_;
      }
      /**
       * <code>repeated .FileAttribute attributes = 13;</code>
       */
      public int getAttributesCount() {
        return attributes_.size();
      }
      /**
       * <code>repeated .FileAttribute attributes = 13;</code>
       */
      public Protocol.FileAttribute getAttributes(int index) {
        return attributes_.get(index);
      }
      /**
       * <code>repeated .FileAttribute attributes = 13;</code>
       */
      public Protocol.FileAttributeOrBuilder getAttributesOrBuilder(
          int index) {
        return attributes_.get(index);
      }
  
      // optional int32 unknown6 = 14;
      public static final int UNKNOWN6_FIELD_NUMBER = 14;
      private int unknown6_;
      /**
       * <code>optional int32 unknown6 = 14;</code>
       */
      public boolean hasUnknown6() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional int32 unknown6 = 14;</code>
       */
      public int getUnknown6() {
        return unknown6_;
      }
  
      // optional int32 unknown7 = 15;
      public static final int UNKNOWN7_FIELD_NUMBER = 15;
      private int unknown7_;
      /**
       * <code>optional int32 unknown7 = 15;</code>
       */
      public boolean hasUnknown7() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional int32 unknown7 = 15;</code>
       */
      public int getUnknown7() {
        return unknown7_;
      }
  
      private void initFields() {
        unknown1_ = 0;
        unknown2_ = "";
        unknown3_ = com.google.protobuf.ByteString.EMPTY;
        unknown4_ = 0;
        unknown5_ = 0;
        user_ = 0;
        group_ = 0;
        mtime_ = 0L;
        atime_ = 0L;
        ctime_ = 0L;
        protection_ = 0;
        attributes_ = java.util.Collections.emptyList();
        unknown6_ = 0;
        unknown7_ = 0;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasUnknown4()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasUnknown5()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasUser()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasGroup()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasMtime()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasAtime()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasCtime()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasProtection()) {
          memoizedIsInitialized = 0;
          return false;
        }
        for (int i = 0; i < getAttributesCount(); i++) {
          if (!getAttributes(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeInt32(1, unknown1_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(2, getUnknown2Bytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeBytes(3, unknown3_);
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          output.writeInt32(4, unknown4_);
        }
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          output.writeInt32(5, unknown5_);
        }
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          output.writeInt32(6, user_);
        }
        if (((bitField0_ & 0x00000040) == 0x00000040)) {
          output.writeInt32(7, group_);
        }
        if (((bitField0_ & 0x00000080) == 0x00000080)) {
          output.writeInt64(8, mtime_);
        }
        if (((bitField0_ & 0x00000100) == 0x00000100)) {
          output.writeInt64(9, atime_);
        }
        if (((bitField0_ & 0x00000200) == 0x00000200)) {
          output.writeInt64(10, ctime_);
        }
        if (((bitField0_ & 0x00000400) == 0x00000400)) {
          output.writeInt32(12, protection_);
        }
        for (int i = 0; i < attributes_.size(); i++) {
          output.writeMessage(13, attributes_.get(i));
        }
        if (((bitField0_ & 0x00000800) == 0x00000800)) {
          output.writeInt32(14, unknown6_);
        }
        if (((bitField0_ & 0x00001000) == 0x00001000)) {
          output.writeInt32(15, unknown7_);
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(1, unknown1_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, getUnknown2Bytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(3, unknown3_);
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(4, unknown4_);
        }
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(5, unknown5_);
        }
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(6, user_);
        }
        if (((bitField0_ & 0x00000040) == 0x00000040)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(7, group_);
        }
        if (((bitField0_ & 0x00000080) == 0x00000080)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt64Size(8, mtime_);
        }
        if (((bitField0_ & 0x00000100) == 0x00000100)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt64Size(9, atime_);
        }
        if (((bitField0_ & 0x00000200) == 0x00000200)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt64Size(10, ctime_);
        }
        if (((bitField0_ & 0x00000400) == 0x00000400)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(12, protection_);
        }
        for (int i = 0; i < attributes_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(13, attributes_.get(i));
        }
        if (((bitField0_ & 0x00000800) == 0x00000800)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(14, unknown6_);
        }
        if (((bitField0_ & 0x00001000) == 0x00001000)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(15, unknown7_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.FileInfo parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.FileInfo parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.FileInfo parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.FileInfo parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.FileInfo parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.FileInfo parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.FileInfo parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.FileInfo parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.FileInfo parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.FileInfo parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.FileInfo prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code FileInfo}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.FileInfoOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_FileInfo_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_FileInfo_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.FileInfo.class, Protocol.FileInfo.Builder.class);
        }
  
        // Construct using Protobuf.FileInfo.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getAttributesFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          unknown1_ = 0;
          bitField0_ = (bitField0_ & ~0x00000001);
          unknown2_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          unknown3_ = com.google.protobuf.ByteString.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000004);
          unknown4_ = 0;
          bitField0_ = (bitField0_ & ~0x00000008);
          unknown5_ = 0;
          bitField0_ = (bitField0_ & ~0x00000010);
          user_ = 0;
          bitField0_ = (bitField0_ & ~0x00000020);
          group_ = 0;
          bitField0_ = (bitField0_ & ~0x00000040);
          mtime_ = 0L;
          bitField0_ = (bitField0_ & ~0x00000080);
          atime_ = 0L;
          bitField0_ = (bitField0_ & ~0x00000100);
          ctime_ = 0L;
          bitField0_ = (bitField0_ & ~0x00000200);
          protection_ = 0;
          bitField0_ = (bitField0_ & ~0x00000400);
          if (attributesBuilder_ == null) {
            attributes_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000800);
          } else {
            attributesBuilder_.clear();
          }
          unknown6_ = 0;
          bitField0_ = (bitField0_ & ~0x00001000);
          unknown7_ = 0;
          bitField0_ = (bitField0_ & ~0x00002000);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_FileInfo_descriptor;
        }
  
        public Protocol.FileInfo getDefaultInstanceForType() {
          return Protocol.FileInfo.getDefaultInstance();
        }
  
        public Protocol.FileInfo build() {
          Protocol.FileInfo result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.FileInfo buildPartial() {
          Protocol.FileInfo result = new Protocol.FileInfo(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.unknown1_ = unknown1_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.unknown2_ = unknown2_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000004;
          }
          result.unknown3_ = unknown3_;
          if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
            to_bitField0_ |= 0x00000008;
          }
          result.unknown4_ = unknown4_;
          if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
            to_bitField0_ |= 0x00000010;
          }
          result.unknown5_ = unknown5_;
          if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
            to_bitField0_ |= 0x00000020;
          }
          result.user_ = user_;
          if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
            to_bitField0_ |= 0x00000040;
          }
          result.group_ = group_;
          if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
            to_bitField0_ |= 0x00000080;
          }
          result.mtime_ = mtime_;
          if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
            to_bitField0_ |= 0x00000100;
          }
          result.atime_ = atime_;
          if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
            to_bitField0_ |= 0x00000200;
          }
          result.ctime_ = ctime_;
          if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
            to_bitField0_ |= 0x00000400;
          }
          result.protection_ = protection_;
          if (attributesBuilder_ == null) {
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
              attributes_ = java.util.Collections.unmodifiableList(attributes_);
              bitField0_ = (bitField0_ & ~0x00000800);
            }
            result.attributes_ = attributes_;
          } else {
            result.attributes_ = attributesBuilder_.build();
          }
          if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
            to_bitField0_ |= 0x00000800;
          }
          result.unknown6_ = unknown6_;
          if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
            to_bitField0_ |= 0x00001000;
          }
          result.unknown7_ = unknown7_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.FileInfo) {
            return mergeFrom((Protocol.FileInfo)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.FileInfo other) {
          if (other == Protocol.FileInfo.getDefaultInstance()) return this;
          if (other.hasUnknown1()) {
            setUnknown1(other.getUnknown1());
          }
          if (other.hasUnknown2()) {
            bitField0_ |= 0x00000002;
            unknown2_ = other.unknown2_;
            onChanged();
          }
          if (other.hasUnknown3()) {
            setUnknown3(other.getUnknown3());
          }
          if (other.hasUnknown4()) {
            setUnknown4(other.getUnknown4());
          }
          if (other.hasUnknown5()) {
            setUnknown5(other.getUnknown5());
          }
          if (other.hasUser()) {
            setUser(other.getUser());
          }
          if (other.hasGroup()) {
            setGroup(other.getGroup());
          }
          if (other.hasMtime()) {
            setMtime(other.getMtime());
          }
          if (other.hasAtime()) {
            setAtime(other.getAtime());
          }
          if (other.hasCtime()) {
            setCtime(other.getCtime());
          }
          if (other.hasProtection()) {
            setProtection(other.getProtection());
          }
          if (attributesBuilder_ == null) {
            if (!other.attributes_.isEmpty()) {
              if (attributes_.isEmpty()) {
                attributes_ = other.attributes_;
                bitField0_ = (bitField0_ & ~0x00000800);
              } else {
                ensureAttributesIsMutable();
                attributes_.addAll(other.attributes_);
              }
              onChanged();
            }
          } else {
            if (!other.attributes_.isEmpty()) {
              if (attributesBuilder_.isEmpty()) {
                attributesBuilder_.dispose();
                attributesBuilder_ = null;
                attributes_ = other.attributes_;
                bitField0_ = (bitField0_ & ~0x00000800);
                attributesBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getAttributesFieldBuilder() : null;
              } else {
                attributesBuilder_.addAllMessages(other.attributes_);
              }
            }
          }
          if (other.hasUnknown6()) {
            setUnknown6(other.getUnknown6());
          }
          if (other.hasUnknown7()) {
            setUnknown7(other.getUnknown7());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasUnknown4()) {
            
            return false;
          }
          if (!hasUnknown5()) {
            
            return false;
          }
          if (!hasUser()) {
            
            return false;
          }
          if (!hasGroup()) {
            
            return false;
          }
          if (!hasMtime()) {
            
            return false;
          }
          if (!hasAtime()) {
            
            return false;
          }
          if (!hasCtime()) {
            
            return false;
          }
          if (!hasProtection()) {
            
            return false;
          }
          for (int i = 0; i < getAttributesCount(); i++) {
            if (!getAttributes(i).isInitialized()) {
              
              return false;
            }
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.FileInfo parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.FileInfo) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // optional int32 unknown1 = 1;
        private int unknown1_ ;
        /**
         * <code>optional int32 unknown1 = 1;</code>
         */
        public boolean hasUnknown1() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional int32 unknown1 = 1;</code>
         */
        public int getUnknown1() {
          return unknown1_;
        }
        /**
         * <code>optional int32 unknown1 = 1;</code>
         */
        public Builder setUnknown1(int value) {
          bitField0_ |= 0x00000001;
          unknown1_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional int32 unknown1 = 1;</code>
         */
        public Builder clearUnknown1() {
          bitField0_ = (bitField0_ & ~0x00000001);
          unknown1_ = 0;
          onChanged();
          return this;
        }
  
        // optional string unknown2 = 2;
        private java.lang.Object unknown2_ = "";
        /**
         * <code>optional string unknown2 = 2;</code>
         */
        public boolean hasUnknown2() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional string unknown2 = 2;</code>
         */
        public java.lang.String getUnknown2() {
          java.lang.Object ref = unknown2_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            unknown2_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string unknown2 = 2;</code>
         */
        public com.google.protobuf.ByteString
            getUnknown2Bytes() {
          java.lang.Object ref = unknown2_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            unknown2_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string unknown2 = 2;</code>
         */
        public Builder setUnknown2(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          unknown2_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string unknown2 = 2;</code>
         */
        public Builder clearUnknown2() {
          bitField0_ = (bitField0_ & ~0x00000002);
          unknown2_ = getDefaultInstance().getUnknown2();
          onChanged();
          return this;
        }
        /**
         * <code>optional string unknown2 = 2;</code>
         */
        public Builder setUnknown2Bytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          unknown2_ = value;
          onChanged();
          return this;
        }
  
        // optional bytes unknown3 = 3;
        private com.google.protobuf.ByteString unknown3_ = com.google.protobuf.ByteString.EMPTY;
        /**
         * <code>optional bytes unknown3 = 3;</code>
         */
        public boolean hasUnknown3() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional bytes unknown3 = 3;</code>
         */
        public com.google.protobuf.ByteString getUnknown3() {
          return unknown3_;
        }
        /**
         * <code>optional bytes unknown3 = 3;</code>
         */
        public Builder setUnknown3(com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000004;
          unknown3_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional bytes unknown3 = 3;</code>
         */
        public Builder clearUnknown3() {
          bitField0_ = (bitField0_ & ~0x00000004);
          unknown3_ = getDefaultInstance().getUnknown3();
          onChanged();
          return this;
        }
  
        // required int32 unknown4 = 4;
        private int unknown4_ ;
        /**
         * <code>required int32 unknown4 = 4;</code>
         */
        public boolean hasUnknown4() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>required int32 unknown4 = 4;</code>
         */
        public int getUnknown4() {
          return unknown4_;
        }
        /**
         * <code>required int32 unknown4 = 4;</code>
         */
        public Builder setUnknown4(int value) {
          bitField0_ |= 0x00000008;
          unknown4_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int32 unknown4 = 4;</code>
         */
        public Builder clearUnknown4() {
          bitField0_ = (bitField0_ & ~0x00000008);
          unknown4_ = 0;
          onChanged();
          return this;
        }
  
        // required int32 unknown5 = 5;
        private int unknown5_ ;
        /**
         * <code>required int32 unknown5 = 5;</code>
         */
        public boolean hasUnknown5() {
          return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>required int32 unknown5 = 5;</code>
         */
        public int getUnknown5() {
          return unknown5_;
        }
        /**
         * <code>required int32 unknown5 = 5;</code>
         */
        public Builder setUnknown5(int value) {
          bitField0_ |= 0x00000010;
          unknown5_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int32 unknown5 = 5;</code>
         */
        public Builder clearUnknown5() {
          bitField0_ = (bitField0_ & ~0x00000010);
          unknown5_ = 0;
          onChanged();
          return this;
        }
  
        // required int32 user = 6;
        private int user_ ;
        /**
         * <code>required int32 user = 6;</code>
         */
        public boolean hasUser() {
          return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>required int32 user = 6;</code>
         */
        public int getUser() {
          return user_;
        }
        /**
         * <code>required int32 user = 6;</code>
         */
        public Builder setUser(int value) {
          bitField0_ |= 0x00000020;
          user_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int32 user = 6;</code>
         */
        public Builder clearUser() {
          bitField0_ = (bitField0_ & ~0x00000020);
          user_ = 0;
          onChanged();
          return this;
        }
  
        // required int32 group = 7;
        private int group_ ;
        /**
         * <code>required int32 group = 7;</code>
         */
        public boolean hasGroup() {
          return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>required int32 group = 7;</code>
         */
        public int getGroup() {
          return group_;
        }
        /**
         * <code>required int32 group = 7;</code>
         */
        public Builder setGroup(int value) {
          bitField0_ |= 0x00000040;
          group_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int32 group = 7;</code>
         */
        public Builder clearGroup() {
          bitField0_ = (bitField0_ & ~0x00000040);
          group_ = 0;
          onChanged();
          return this;
        }
  
        // required int64 mtime = 8;
        private long mtime_ ;
        /**
         * <code>required int64 mtime = 8;</code>
         */
        public boolean hasMtime() {
          return ((bitField0_ & 0x00000080) == 0x00000080);
        }
        /**
         * <code>required int64 mtime = 8;</code>
         */
        public long getMtime() {
          return mtime_;
        }
        /**
         * <code>required int64 mtime = 8;</code>
         */
        public Builder setMtime(long value) {
          bitField0_ |= 0x00000080;
          mtime_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int64 mtime = 8;</code>
         */
        public Builder clearMtime() {
          bitField0_ = (bitField0_ & ~0x00000080);
          mtime_ = 0L;
          onChanged();
          return this;
        }
  
        // required int64 atime = 9;
        private long atime_ ;
        /**
         * <code>required int64 atime = 9;</code>
         */
        public boolean hasAtime() {
          return ((bitField0_ & 0x00000100) == 0x00000100);
        }
        /**
         * <code>required int64 atime = 9;</code>
         */
        public long getAtime() {
          return atime_;
        }
        /**
         * <code>required int64 atime = 9;</code>
         */
        public Builder setAtime(long value) {
          bitField0_ |= 0x00000100;
          atime_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int64 atime = 9;</code>
         */
        public Builder clearAtime() {
          bitField0_ = (bitField0_ & ~0x00000100);
          atime_ = 0L;
          onChanged();
          return this;
        }
  
        // required int64 ctime = 10;
        private long ctime_ ;
        /**
         * <code>required int64 ctime = 10;</code>
         */
        public boolean hasCtime() {
          return ((bitField0_ & 0x00000200) == 0x00000200);
        }
        /**
         * <code>required int64 ctime = 10;</code>
         */
        public long getCtime() {
          return ctime_;
        }
        /**
         * <code>required int64 ctime = 10;</code>
         */
        public Builder setCtime(long value) {
          bitField0_ |= 0x00000200;
          ctime_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int64 ctime = 10;</code>
         */
        public Builder clearCtime() {
          bitField0_ = (bitField0_ & ~0x00000200);
          ctime_ = 0L;
          onChanged();
          return this;
        }
  
        // required int32 protection = 12;
        private int protection_ ;
        /**
         * <code>required int32 protection = 12;</code>
         */
        public boolean hasProtection() {
          return ((bitField0_ & 0x00000400) == 0x00000400);
        }
        /**
         * <code>required int32 protection = 12;</code>
         */
        public int getProtection() {
          return protection_;
        }
        /**
         * <code>required int32 protection = 12;</code>
         */
        public Builder setProtection(int value) {
          bitField0_ |= 0x00000400;
          protection_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int32 protection = 12;</code>
         */
        public Builder clearProtection() {
          bitField0_ = (bitField0_ & ~0x00000400);
          protection_ = 0;
          onChanged();
          return this;
        }
  
        // repeated .FileAttribute attributes = 13;
        private java.util.List<Protocol.FileAttribute> attributes_ =
          java.util.Collections.emptyList();
        private void ensureAttributesIsMutable() {
          if (!((bitField0_ & 0x00000800) == 0x00000800)) {
            attributes_ = new java.util.ArrayList<Protocol.FileAttribute>(attributes_);
            bitField0_ |= 0x00000800;
           }
        }
  
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.FileAttribute, Protocol.FileAttribute.Builder, Protocol.FileAttributeOrBuilder> attributesBuilder_;
  
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public java.util.List<Protocol.FileAttribute> getAttributesList() {
          if (attributesBuilder_ == null) {
            return java.util.Collections.unmodifiableList(attributes_);
          } else {
            return attributesBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public int getAttributesCount() {
          if (attributesBuilder_ == null) {
            return attributes_.size();
          } else {
            return attributesBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public Protocol.FileAttribute getAttributes(int index) {
          if (attributesBuilder_ == null) {
            return attributes_.get(index);
          } else {
            return attributesBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public Builder setAttributes(
            int index, Protocol.FileAttribute value) {
          if (attributesBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureAttributesIsMutable();
            attributes_.set(index, value);
            onChanged();
          } else {
            attributesBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public Builder setAttributes(
            int index, Protocol.FileAttribute.Builder builderForValue) {
          if (attributesBuilder_ == null) {
            ensureAttributesIsMutable();
            attributes_.set(index, builderForValue.build());
            onChanged();
          } else {
            attributesBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public Builder addAttributes(Protocol.FileAttribute value) {
          if (attributesBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureAttributesIsMutable();
            attributes_.add(value);
            onChanged();
          } else {
            attributesBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public Builder addAttributes(
            int index, Protocol.FileAttribute value) {
          if (attributesBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureAttributesIsMutable();
            attributes_.add(index, value);
            onChanged();
          } else {
            attributesBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public Builder addAttributes(
            Protocol.FileAttribute.Builder builderForValue) {
          if (attributesBuilder_ == null) {
            ensureAttributesIsMutable();
            attributes_.add(builderForValue.build());
            onChanged();
          } else {
            attributesBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public Builder addAttributes(
            int index, Protocol.FileAttribute.Builder builderForValue) {
          if (attributesBuilder_ == null) {
            ensureAttributesIsMutable();
            attributes_.add(index, builderForValue.build());
            onChanged();
          } else {
            attributesBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public Builder addAllAttributes(
            java.lang.Iterable<? extends Protocol.FileAttribute> values) {
          if (attributesBuilder_ == null) {
            ensureAttributesIsMutable();
            super.addAll(values, attributes_);
            onChanged();
          } else {
            attributesBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public Builder clearAttributes() {
          if (attributesBuilder_ == null) {
            attributes_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000800);
            onChanged();
          } else {
            attributesBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public Builder removeAttributes(int index) {
          if (attributesBuilder_ == null) {
            ensureAttributesIsMutable();
            attributes_.remove(index);
            onChanged();
          } else {
            attributesBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public Protocol.FileAttribute.Builder getAttributesBuilder(
            int index) {
          return getAttributesFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public Protocol.FileAttributeOrBuilder getAttributesOrBuilder(
            int index) {
          if (attributesBuilder_ == null) {
            return attributes_.get(index);  } else {
            return attributesBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public java.util.List<? extends Protocol.FileAttributeOrBuilder> 
             getAttributesOrBuilderList() {
          if (attributesBuilder_ != null) {
            return attributesBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(attributes_);
          }
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public Protocol.FileAttribute.Builder addAttributesBuilder() {
          return getAttributesFieldBuilder().addBuilder(
              Protocol.FileAttribute.getDefaultInstance());
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public Protocol.FileAttribute.Builder addAttributesBuilder(
            int index) {
          return getAttributesFieldBuilder().addBuilder(
              index, Protocol.FileAttribute.getDefaultInstance());
        }
        /**
         * <code>repeated .FileAttribute attributes = 13;</code>
         */
        public java.util.List<Protocol.FileAttribute.Builder> 
             getAttributesBuilderList() {
          return getAttributesFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            Protocol.FileAttribute, Protocol.FileAttribute.Builder, Protocol.FileAttributeOrBuilder> 
            getAttributesFieldBuilder() {
          if (attributesBuilder_ == null) {
            attributesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                Protocol.FileAttribute, Protocol.FileAttribute.Builder, Protocol.FileAttributeOrBuilder>(
                    attributes_,
                    ((bitField0_ & 0x00000800) == 0x00000800),
                    getParentForChildren(),
                    isClean());
            attributes_ = null;
          }
          return attributesBuilder_;
        }
  
        // optional int32 unknown6 = 14;
        private int unknown6_ ;
        /**
         * <code>optional int32 unknown6 = 14;</code>
         */
        public boolean hasUnknown6() {
          return ((bitField0_ & 0x00001000) == 0x00001000);
        }
        /**
         * <code>optional int32 unknown6 = 14;</code>
         */
        public int getUnknown6() {
          return unknown6_;
        }
        /**
         * <code>optional int32 unknown6 = 14;</code>
         */
        public Builder setUnknown6(int value) {
          bitField0_ |= 0x00001000;
          unknown6_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional int32 unknown6 = 14;</code>
         */
        public Builder clearUnknown6() {
          bitField0_ = (bitField0_ & ~0x00001000);
          unknown6_ = 0;
          onChanged();
          return this;
        }
  
        // optional int32 unknown7 = 15;
        private int unknown7_ ;
        /**
         * <code>optional int32 unknown7 = 15;</code>
         */
        public boolean hasUnknown7() {
          return ((bitField0_ & 0x00002000) == 0x00002000);
        }
        /**
         * <code>optional int32 unknown7 = 15;</code>
         */
        public int getUnknown7() {
          return unknown7_;
        }
        /**
         * <code>optional int32 unknown7 = 15;</code>
         */
        public Builder setUnknown7(int value) {
          bitField0_ |= 0x00002000;
          unknown7_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional int32 unknown7 = 15;</code>
         */
        public Builder clearUnknown7() {
          bitField0_ = (bitField0_ & ~0x00002000);
          unknown7_ = 0;
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:FileInfo)
      }
  
      static {
        defaultInstance = new FileInfo(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:FileInfo)
    }
  
    public interface FileOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required bytes fileName = 1;
      /**
       * <code>required bytes fileName = 1;</code>
       */
      boolean hasFileName();
      /**
       * <code>required bytes fileName = 1;</code>
       */
      com.google.protobuf.ByteString getFileName();
  
      // required string domain = 2;
      /**
       * <code>required string domain = 2;</code>
       */
      boolean hasDomain();
      /**
       * <code>required string domain = 2;</code>
       */
      java.lang.String getDomain();
      /**
       * <code>required string domain = 2;</code>
       */
      com.google.protobuf.ByteString
          getDomainBytes();
  
      // required string path = 3;
      /**
       * <code>required string path = 3;</code>
       */
      boolean hasPath();
      /**
       * <code>required string path = 3;</code>
       */
      java.lang.String getPath();
      /**
       * <code>required string path = 3;</code>
       */
      com.google.protobuf.ByteString
          getPathBytes();
  
      // optional bytes altFileName = 4;
      /**
       * <code>optional bytes altFileName = 4;</code>
       */
      boolean hasAltFileName();
      /**
       * <code>optional bytes altFileName = 4;</code>
       */
      com.google.protobuf.ByteString getAltFileName();
  
      // required int32 fileSize = 5;
      /**
       * <code>required int32 fileSize = 5;</code>
       */
      boolean hasFileSize();
      /**
       * <code>required int32 fileSize = 5;</code>
       */
      int getFileSize();
  
      // optional .FileInfo info = 6;
      /**
       * <code>optional .FileInfo info = 6;</code>
       */
      boolean hasInfo();
      /**
       * <code>optional .FileInfo info = 6;</code>
       */
      Protocol.FileInfo getInfo();
      /**
       * <code>optional .FileInfo info = 6;</code>
       */
      Protocol.FileInfoOrBuilder getInfoOrBuilder();
  
      // required int64 date = 7;
      /**
       * <code>required int64 date = 7;</code>
       */
      boolean hasDate();
      /**
       * <code>required int64 date = 7;</code>
       */
      long getDate();
  
      // required bool bool = 9;
      /**
       * <code>required bool bool = 9;</code>
       */
      boolean hasBool();
      /**
       * <code>required bool bool = 9;</code>
       */
      boolean getBool();
    }
    /**
     * Protobuf type {@code File}
     */
    public static final class File extends
        com.google.protobuf.GeneratedMessage
        implements FileOrBuilder {
      // Use File.newBuilder() to construct.
      private File(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private File(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final File defaultInstance;
      public static File getDefaultInstance() {
        return defaultInstance;
      }
  
      public File getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private File(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                fileName_ = input.readBytes();
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                domain_ = input.readBytes();
                break;
              }
              case 26: {
                bitField0_ |= 0x00000004;
                path_ = input.readBytes();
                break;
              }
              case 34: {
                bitField0_ |= 0x00000008;
                altFileName_ = input.readBytes();
                break;
              }
              case 40: {
                bitField0_ |= 0x00000010;
                fileSize_ = input.readInt32();
                break;
              }
              case 50: {
                Protocol.FileInfo.Builder subBuilder = null;
                if (((bitField0_ & 0x00000020) == 0x00000020)) {
                  subBuilder = info_.toBuilder();
                }
                info_ = input.readMessage(Protocol.FileInfo.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(info_);
                  info_ = subBuilder.buildPartial();
                }
                bitField0_ |= 0x00000020;
                break;
              }
              case 56: {
                bitField0_ |= 0x00000040;
                date_ = input.readInt64();
                break;
              }
              case 72: {
                bitField0_ |= 0x00000080;
                bool_ = 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.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_File_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_File_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.File.class, Protocol.File.Builder.class);
      }
  
      public static com.google.protobuf.Parser<File> PARSER =
          new com.google.protobuf.AbstractParser<File>() {
        public File parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new File(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<File> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required bytes fileName = 1;
      public static final int FILENAME_FIELD_NUMBER = 1;
      private com.google.protobuf.ByteString fileName_;
      /**
       * <code>required bytes fileName = 1;</code>
       */
      public boolean hasFileName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required bytes fileName = 1;</code>
       */
      public com.google.protobuf.ByteString getFileName() {
        return fileName_;
      }
  
      // required string domain = 2;
      public static final int DOMAIN_FIELD_NUMBER = 2;
      private java.lang.Object domain_;
      /**
       * <code>required string domain = 2;</code>
       */
      public boolean hasDomain() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required string domain = 2;</code>
       */
      public java.lang.String getDomain() {
        java.lang.Object ref = domain_;
        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();
          if (bs.isValidUtf8()) {
            domain_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string domain = 2;</code>
       */
      public com.google.protobuf.ByteString
          getDomainBytes() {
        java.lang.Object ref = domain_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          domain_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required string path = 3;
      public static final int PATH_FIELD_NUMBER = 3;
      private java.lang.Object path_;
      /**
       * <code>required string path = 3;</code>
       */
      public boolean hasPath() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>required string path = 3;</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();
          if (bs.isValidUtf8()) {
            path_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string path = 3;</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;
        }
      }
  
      // optional bytes altFileName = 4;
      public static final int ALTFILENAME_FIELD_NUMBER = 4;
      private com.google.protobuf.ByteString altFileName_;
      /**
       * <code>optional bytes altFileName = 4;</code>
       */
      public boolean hasAltFileName() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional bytes altFileName = 4;</code>
       */
      public com.google.protobuf.ByteString getAltFileName() {
        return altFileName_;
      }
  
      // required int32 fileSize = 5;
      public static final int FILESIZE_FIELD_NUMBER = 5;
      private int fileSize_;
      /**
       * <code>required int32 fileSize = 5;</code>
       */
      public boolean hasFileSize() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>required int32 fileSize = 5;</code>
       */
      public int getFileSize() {
        return fileSize_;
      }
  
      // optional .FileInfo info = 6;
      public static final int INFO_FIELD_NUMBER = 6;
      private Protocol.FileInfo info_;
      /**
       * <code>optional .FileInfo info = 6;</code>
       */
      public boolean hasInfo() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional .FileInfo info = 6;</code>
       */
      public Protocol.FileInfo getInfo() {
        return info_;
      }
      /**
       * <code>optional .FileInfo info = 6;</code>
       */
      public Protocol.FileInfoOrBuilder getInfoOrBuilder() {
        return info_;
      }
  
      // required int64 date = 7;
      public static final int DATE_FIELD_NUMBER = 7;
      private long date_;
      /**
       * <code>required int64 date = 7;</code>
       */
      public boolean hasDate() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>required int64 date = 7;</code>
       */
      public long getDate() {
        return date_;
      }
  
      // required bool bool = 9;
      public static final int BOOL_FIELD_NUMBER = 9;
      private boolean bool_;
      /**
       * <code>required bool bool = 9;</code>
       */
      public boolean hasBool() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>required bool bool = 9;</code>
       */
      public boolean getBool() {
        return bool_;
      }
  
      private void initFields() {
        fileName_ = com.google.protobuf.ByteString.EMPTY;
        domain_ = "";
        path_ = "";
        altFileName_ = com.google.protobuf.ByteString.EMPTY;
        fileSize_ = 0;
        info_ = Protocol.FileInfo.getDefaultInstance();
        date_ = 0L;
        bool_ = false;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasFileName()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasDomain()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasPath()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasFileSize()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasDate()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasBool()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (hasInfo()) {
          if (!getInfo().isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, fileName_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(2, getDomainBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeBytes(3, getPathBytes());
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          output.writeBytes(4, altFileName_);
        }
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          output.writeInt32(5, fileSize_);
        }
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          output.writeMessage(6, info_);
        }
        if (((bitField0_ & 0x00000040) == 0x00000040)) {
          output.writeInt64(7, date_);
        }
        if (((bitField0_ & 0x00000080) == 0x00000080)) {
          output.writeBool(9, bool_);
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, fileName_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, getDomainBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(3, getPathBytes());
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(4, altFileName_);
        }
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(5, fileSize_);
        }
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(6, info_);
        }
        if (((bitField0_ & 0x00000040) == 0x00000040)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt64Size(7, date_);
        }
        if (((bitField0_ & 0x00000080) == 0x00000080)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBoolSize(9, bool_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.File parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.File parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.File parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.File parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.File parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.File parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.File parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.File parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.File parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.File parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.File prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code File}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.FileOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_File_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_File_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.File.class, Protocol.File.Builder.class);
        }
  
        // Construct using Protobuf.File.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getInfoFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          fileName_ = com.google.protobuf.ByteString.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          domain_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          path_ = "";
          bitField0_ = (bitField0_ & ~0x00000004);
          altFileName_ = com.google.protobuf.ByteString.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000008);
          fileSize_ = 0;
          bitField0_ = (bitField0_ & ~0x00000010);
          if (infoBuilder_ == null) {
            info_ = Protocol.FileInfo.getDefaultInstance();
          } else {
            infoBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000020);
          date_ = 0L;
          bitField0_ = (bitField0_ & ~0x00000040);
          bool_ = false;
          bitField0_ = (bitField0_ & ~0x00000080);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_File_descriptor;
        }
  
        public Protocol.File getDefaultInstanceForType() {
          return Protocol.File.getDefaultInstance();
        }
  
        public Protocol.File build() {
          Protocol.File result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.File buildPartial() {
          Protocol.File result = new Protocol.File(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.fileName_ = fileName_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.domain_ = domain_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000004;
          }
          result.path_ = path_;
          if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
            to_bitField0_ |= 0x00000008;
          }
          result.altFileName_ = altFileName_;
          if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
            to_bitField0_ |= 0x00000010;
          }
          result.fileSize_ = fileSize_;
          if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
            to_bitField0_ |= 0x00000020;
          }
          if (infoBuilder_ == null) {
            result.info_ = info_;
          } else {
            result.info_ = infoBuilder_.build();
          }
          if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
            to_bitField0_ |= 0x00000040;
          }
          result.date_ = date_;
          if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
            to_bitField0_ |= 0x00000080;
          }
          result.bool_ = bool_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.File) {
            return mergeFrom((Protocol.File)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.File other) {
          if (other == Protocol.File.getDefaultInstance()) return this;
          if (other.hasFileName()) {
            setFileName(other.getFileName());
          }
          if (other.hasDomain()) {
            bitField0_ |= 0x00000002;
            domain_ = other.domain_;
            onChanged();
          }
          if (other.hasPath()) {
            bitField0_ |= 0x00000004;
            path_ = other.path_;
            onChanged();
          }
          if (other.hasAltFileName()) {
            setAltFileName(other.getAltFileName());
          }
          if (other.hasFileSize()) {
            setFileSize(other.getFileSize());
          }
          if (other.hasInfo()) {
            mergeInfo(other.getInfo());
          }
          if (other.hasDate()) {
            setDate(other.getDate());
          }
          if (other.hasBool()) {
            setBool(other.getBool());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasFileName()) {
            
            return false;
          }
          if (!hasDomain()) {
            
            return false;
          }
          if (!hasPath()) {
            
            return false;
          }
          if (!hasFileSize()) {
            
            return false;
          }
          if (!hasDate()) {
            
            return false;
          }
          if (!hasBool()) {
            
            return false;
          }
          if (hasInfo()) {
            if (!getInfo().isInitialized()) {
              
              return false;
            }
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.File parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.File) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required bytes fileName = 1;
        private com.google.protobuf.ByteString fileName_ = com.google.protobuf.ByteString.EMPTY;
        /**
         * <code>required bytes fileName = 1;</code>
         */
        public boolean hasFileName() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required bytes fileName = 1;</code>
         */
        public com.google.protobuf.ByteString getFileName() {
          return fileName_;
        }
        /**
         * <code>required bytes fileName = 1;</code>
         */
        public Builder setFileName(com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          fileName_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required bytes fileName = 1;</code>
         */
        public Builder clearFileName() {
          bitField0_ = (bitField0_ & ~0x00000001);
          fileName_ = getDefaultInstance().getFileName();
          onChanged();
          return this;
        }
  
        // required string domain = 2;
        private java.lang.Object domain_ = "";
        /**
         * <code>required string domain = 2;</code>
         */
        public boolean hasDomain() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>required string domain = 2;</code>
         */
        public java.lang.String getDomain() {
          java.lang.Object ref = domain_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            domain_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string domain = 2;</code>
         */
        public com.google.protobuf.ByteString
            getDomainBytes() {
          java.lang.Object ref = domain_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            domain_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string domain = 2;</code>
         */
        public Builder setDomain(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          domain_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string domain = 2;</code>
         */
        public Builder clearDomain() {
          bitField0_ = (bitField0_ & ~0x00000002);
          domain_ = getDefaultInstance().getDomain();
          onChanged();
          return this;
        }
        /**
         * <code>required string domain = 2;</code>
         */
        public Builder setDomainBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          domain_ = value;
          onChanged();
          return this;
        }
  
        // required string path = 3;
        private java.lang.Object path_ = "";
        /**
         * <code>required string path = 3;</code>
         */
        public boolean hasPath() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>required string path = 3;</code>
         */
        public java.lang.String getPath() {
          java.lang.Object ref = path_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            path_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string path = 3;</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>required string path = 3;</code>
         */
        public Builder setPath(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000004;
          path_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string path = 3;</code>
         */
        public Builder clearPath() {
          bitField0_ = (bitField0_ & ~0x00000004);
          path_ = getDefaultInstance().getPath();
          onChanged();
          return this;
        }
        /**
         * <code>required string path = 3;</code>
         */
        public Builder setPathBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000004;
          path_ = value;
          onChanged();
          return this;
        }
  
        // optional bytes altFileName = 4;
        private com.google.protobuf.ByteString altFileName_ = com.google.protobuf.ByteString.EMPTY;
        /**
         * <code>optional bytes altFileName = 4;</code>
         */
        public boolean hasAltFileName() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional bytes altFileName = 4;</code>
         */
        public com.google.protobuf.ByteString getAltFileName() {
          return altFileName_;
        }
        /**
         * <code>optional bytes altFileName = 4;</code>
         */
        public Builder setAltFileName(com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000008;
          altFileName_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional bytes altFileName = 4;</code>
         */
        public Builder clearAltFileName() {
          bitField0_ = (bitField0_ & ~0x00000008);
          altFileName_ = getDefaultInstance().getAltFileName();
          onChanged();
          return this;
        }
  
        // required int32 fileSize = 5;
        private int fileSize_ ;
        /**
         * <code>required int32 fileSize = 5;</code>
         */
        public boolean hasFileSize() {
          return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>required int32 fileSize = 5;</code>
         */
        public int getFileSize() {
          return fileSize_;
        }
        /**
         * <code>required int32 fileSize = 5;</code>
         */
        public Builder setFileSize(int value) {
          bitField0_ |= 0x00000010;
          fileSize_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int32 fileSize = 5;</code>
         */
        public Builder clearFileSize() {
          bitField0_ = (bitField0_ & ~0x00000010);
          fileSize_ = 0;
          onChanged();
          return this;
        }
  
        // optional .FileInfo info = 6;
        private Protocol.FileInfo info_ = Protocol.FileInfo.getDefaultInstance();
        private com.google.protobuf.SingleFieldBuilder<
            Protocol.FileInfo, Protocol.FileInfo.Builder, Protocol.FileInfoOrBuilder> infoBuilder_;
        /**
         * <code>optional .FileInfo info = 6;</code>
         */
        public boolean hasInfo() {
          return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional .FileInfo info = 6;</code>
         */
        public Protocol.FileInfo getInfo() {
          if (infoBuilder_ == null) {
            return info_;
          } else {
            return infoBuilder_.getMessage();
          }
        }
        /**
         * <code>optional .FileInfo info = 6;</code>
         */
        public Builder setInfo(Protocol.FileInfo value) {
          if (infoBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            info_ = value;
            onChanged();
          } else {
            infoBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000020;
          return this;
        }
        /**
         * <code>optional .FileInfo info = 6;</code>
         */
        public Builder setInfo(
            Protocol.FileInfo.Builder builderForValue) {
          if (infoBuilder_ == null) {
            info_ = builderForValue.build();
            onChanged();
          } else {
            infoBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000020;
          return this;
        }
        /**
         * <code>optional .FileInfo info = 6;</code>
         */
        public Builder mergeInfo(Protocol.FileInfo value) {
          if (infoBuilder_ == null) {
            if (((bitField0_ & 0x00000020) == 0x00000020) &&
                info_ != Protocol.FileInfo.getDefaultInstance()) {
              info_ =
                Protocol.FileInfo.newBuilder(info_).mergeFrom(value).buildPartial();
            } else {
              info_ = value;
            }
            onChanged();
          } else {
            infoBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000020;
          return this;
        }
        /**
         * <code>optional .FileInfo info = 6;</code>
         */
        public Builder clearInfo() {
          if (infoBuilder_ == null) {
            info_ = Protocol.FileInfo.getDefaultInstance();
            onChanged();
          } else {
            infoBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000020);
          return this;
        }
        /**
         * <code>optional .FileInfo info = 6;</code>
         */
        public Protocol.FileInfo.Builder getInfoBuilder() {
          bitField0_ |= 0x00000020;
          onChanged();
          return getInfoFieldBuilder().getBuilder();
        }
        /**
         * <code>optional .FileInfo info = 6;</code>
         */
        public Protocol.FileInfoOrBuilder getInfoOrBuilder() {
          if (infoBuilder_ != null) {
            return infoBuilder_.getMessageOrBuilder();
          } else {
            return info_;
          }
        }
        /**
         * <code>optional .FileInfo info = 6;</code>
         */
        private com.google.protobuf.SingleFieldBuilder<
            Protocol.FileInfo, Protocol.FileInfo.Builder, Protocol.FileInfoOrBuilder> 
            getInfoFieldBuilder() {
          if (infoBuilder_ == null) {
            infoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                Protocol.FileInfo, Protocol.FileInfo.Builder, Protocol.FileInfoOrBuilder>(
                    info_,
                    getParentForChildren(),
                    isClean());
            info_ = null;
          }
          return infoBuilder_;
        }
  
        // required int64 date = 7;
        private long date_ ;
        /**
         * <code>required int64 date = 7;</code>
         */
        public boolean hasDate() {
          return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>required int64 date = 7;</code>
         */
        public long getDate() {
          return date_;
        }
        /**
         * <code>required int64 date = 7;</code>
         */
        public Builder setDate(long value) {
          bitField0_ |= 0x00000040;
          date_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required int64 date = 7;</code>
         */
        public Builder clearDate() {
          bitField0_ = (bitField0_ & ~0x00000040);
          date_ = 0L;
          onChanged();
          return this;
        }
  
        // required bool bool = 9;
        private boolean bool_ ;
        /**
         * <code>required bool bool = 9;</code>
         */
        public boolean hasBool() {
          return ((bitField0_ & 0x00000080) == 0x00000080);
        }
        /**
         * <code>required bool bool = 9;</code>
         */
        public boolean getBool() {
          return bool_;
        }
        /**
         * <code>required bool bool = 9;</code>
         */
        public Builder setBool(boolean value) {
          bitField0_ |= 0x00000080;
          bool_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required bool bool = 9;</code>
         */
        public Builder clearBool() {
          bitField0_ = (bitField0_ & ~0x00000080);
          bool_ = false;
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:File)
      }
  
      static {
        defaultInstance = new File(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:File)
    }
  
    public interface HeaderOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
  
      // required string key = 1;
      /**
       * <code>required string key = 1;</code>
       */
      boolean hasKey();
      /**
       * <code>required string key = 1;</code>
       */
      java.lang.String getKey();
      /**
       * <code>required string key = 1;</code>
       */
      com.google.protobuf.ByteString
          getKeyBytes();
  
      // required string value = 2;
      /**
       * <code>required string value = 2;</code>
       */
      boolean hasValue();
      /**
       * <code>required string value = 2;</code>
       */
      java.lang.String getValue();
      /**
       * <code>required string value = 2;</code>
       */
      com.google.protobuf.ByteString
          getValueBytes();
    }
    /**
     * Protobuf type {@code Header}
     *
     * <pre>
     *This is a header to be used when downloading chunks
     * </pre>
     */
    public static final class Header extends
        com.google.protobuf.GeneratedMessage
        implements HeaderOrBuilder {
      // Use Header.newBuilder() to construct.
      private Header(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Header(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
  
      private static final Header defaultInstance;
      public static Header getDefaultInstance() {
        return defaultInstance;
      }
  
      public Header getDefaultInstanceForType() {
        return defaultInstance;
      }
  
      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Header(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                key_ = input.readBytes();
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                value_ = 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.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Protocol.internal_static_Header_descriptor;
      }
  
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Protocol.internal_static_Header_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Protocol.Header.class, Protocol.Header.Builder.class);
      }
  
      public static com.google.protobuf.Parser<Header> PARSER =
          new com.google.protobuf.AbstractParser<Header>() {
        public Header parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Header(input, extensionRegistry);
        }
      };
  
      @java.lang.Override
      public com.google.protobuf.Parser<Header> getParserForType() {
        return PARSER;
      }
  
      private int bitField0_;
      // required string key = 1;
      public static final int KEY_FIELD_NUMBER = 1;
      private java.lang.Object key_;
      /**
       * <code>required string key = 1;</code>
       */
      public boolean hasKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required string key = 1;</code>
       */
      public java.lang.String getKey() {
        java.lang.Object ref = key_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            key_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string key = 1;</code>
       */
      public com.google.protobuf.ByteString
          getKeyBytes() {
        java.lang.Object ref = key_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          key_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
  
      // required string value = 2;
      public static final int VALUE_FIELD_NUMBER = 2;
      private java.lang.Object value_;
      /**
       * <code>required string value = 2;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required 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();
          if (bs.isValidUtf8()) {
            value_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required 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 void initFields() {
        key_ = "";
        value_ = "";
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
  
        if (!hasKey()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasValue()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }
  
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, getKeyBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(2, getValueBytes());
        }
        getUnknownFields().writeTo(output);
      }
  
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
  
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, getKeyBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(2, getValueBytes());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
  
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
  
      public static Protocol.Header parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.Header parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.Header parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static Protocol.Header parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static Protocol.Header parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.Header parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static Protocol.Header parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static Protocol.Header parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static Protocol.Header parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static Protocol.Header parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
  
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(Protocol.Header prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
  
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code Header}
       *
       * <pre>
       *This is a header to be used when downloading chunks
       * </pre>
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements Protocol.HeaderOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return Protocol.internal_static_Header_descriptor;
        }
  
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return Protocol.internal_static_Header_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  Protocol.Header.class, Protocol.Header.Builder.class);
        }
  
        // Construct using Protobuf.Header.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
  
        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }
  
        public Builder clear() {
          super.clear();
          key_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          value_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }
  
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
  
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return Protocol.internal_static_Header_descriptor;
        }
  
        public Protocol.Header getDefaultInstanceForType() {
          return Protocol.Header.getDefaultInstance();
        }
  
        public Protocol.Header build() {
          Protocol.Header result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
  
        public Protocol.Header buildPartial() {
          Protocol.Header result = new Protocol.Header(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.key_ = key_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.value_ = value_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
  
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof Protocol.Header) {
            return mergeFrom((Protocol.Header)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
  
        public Builder mergeFrom(Protocol.Header other) {
          if (other == Protocol.Header.getDefaultInstance()) return this;
          if (other.hasKey()) {
            bitField0_ |= 0x00000001;
            key_ = other.key_;
            onChanged();
          }
          if (other.hasValue()) {
            bitField0_ |= 0x00000002;
            value_ = other.value_;
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
  
        public final boolean isInitialized() {
          if (!hasKey()) {
            
            return false;
          }
          if (!hasValue()) {
            
            return false;
          }
          return true;
        }
  
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          Protocol.Header parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (Protocol.Header) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;
  
        // required string key = 1;
        private java.lang.Object key_ = "";
        /**
         * <code>required string key = 1;</code>
         */
        public boolean hasKey() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required string key = 1;</code>
         */
        public java.lang.String getKey() {
          java.lang.Object ref = key_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            key_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string key = 1;</code>
         */
        public com.google.protobuf.ByteString
            getKeyBytes() {
          java.lang.Object ref = key_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            key_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string key = 1;</code>
         */
        public Builder setKey(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          key_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string key = 1;</code>
         */
        public Builder clearKey() {
          bitField0_ = (bitField0_ & ~0x00000001);
          key_ = getDefaultInstance().getKey();
          onChanged();
          return this;
        }
        /**
         * <code>required string key = 1;</code>
         */
        public Builder setKeyBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          key_ = value;
          onChanged();
          return this;
        }
  
        // required string value = 2;
        private java.lang.Object value_ = "";
        /**
         * <code>required string value = 2;</code>
         */
        public boolean hasValue() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>required string value = 2;</code>
         */
        public java.lang.String getValue() {
          java.lang.Object ref = value_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            value_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required 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>required string value = 2;</code>
         */
        public Builder setValue(
            java.lang.String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          value_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string value = 2;</code>
         */
        public Builder clearValue() {
          bitField0_ = (bitField0_ & ~0x00000002);
          value_ = getDefaultInstance().getValue();
          onChanged();
          return this;
        }
        /**
         * <code>required string value = 2;</code>
         */
        public Builder setValueBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          value_ = value;
          onChanged();
          return this;
        }
  
        // @@protoc_insertion_point(builder_scope:Header)
      }
  
      static {
        defaultInstance = new Header(true);
        defaultInstance.initFields();
      }
  
      // @@protoc_insertion_point(class_scope:Header)
    }
  
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_DeviceUdids_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_DeviceUdids_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_Device_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_Device_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_Backup_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_Backup_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_BackupInfo_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_BackupInfo_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_DeviceInfo_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_DeviceInfo_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_Keys_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_Keys_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_Key_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_Key_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_GetFiles_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_GetFiles_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_FileAuth_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_FileAuth_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_AuthChunk_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_AuthChunk_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_AuthorizeGet_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_AuthorizeGet_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_FileChecksumStorageHostChunkLists_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_FileChecksumStorageHostChunkLists_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_StorageHostChunkList_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_StorageHostChunkList_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_ChunkInfo_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_ChunkInfo_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_FileChecksumChunkReferences_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_FileChecksumChunkReferences_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_ChunkReference_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_ChunkReference_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_Request_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_Request_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_FileAttribute_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_FileAttribute_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_FileInfo_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_FileInfo_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_File_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_File_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_Header_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_Header_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\016protobuf.proto\"@\n\013DeviceUdids\022\014\n\004psid\030" +
        "\001 \002(\t\022\r\n\005udids\030\002 \003(\014\022\024\n\014usuallyFalse\030\003 \001" +
        "(\010\"l\n\006Device\022\014\n\004udid\030\001 \002(\014\022\020\n\010fullSize\030\002" +
        " \002(\003\022\027\n\006backup\030\003 \003(\0132\007.Backup\022\033\n\006device\030" +
        "\004 \002(\0132\013.DeviceInfo\022\014\n\004time\030\005 \002(\003\"c\n\006Back" +
        "up\022\022\n\nsnapshotID\030\001 \002(\005\022\014\n\004size\030\002 \002(\003\022\r\n\005" +
        "time1\030\003 \002(\003\022\031\n\004info\030\005 \002(\0132\013.BackupInfo\022\r" +
        "\n\005time2\030\006 \002(\003\"\202\001\n\nBackupInfo\022\014\n\004name\030\001 \002" +
        "(\t\022\020\n\010firmware\030\002 \002(\t\022\r\n\005build\030\003 \002(\t\022\022\n\nu" +
        "sually2_1\030\004 \002(\005\022\013\n\003idk\030\005 \002(\014\022\022\n\nusually2",
        "_2\030\006 \002(\005\022\020\n\010usually1\030\007 \002(\005\"\200\001\n\nDeviceInf" +
        "o\022\021\n\tshortName\030\001 \002(\t\022\020\n\010realName\030\002 \002(\t\022\016" +
        "\n\006serial\030\003 \002(\t\022\r\n\005color\030\004 \002(\t\022\r\n\005model\030\005" +
        " \002(\t\022\022\n\nprettyName\030\006 \002(\t\022\013\n\003idk\030\007 \001(\t\"\034\n" +
        "\004Keys\022\024\n\006keySet\030\001 \003(\0132\004.Key\"\"\n\003Key\022\r\n\005in" +
        "dex\030\001 \002(\005\022\014\n\004data\030\002 \002(\t\"\030\n\010GetFiles\022\014\n\004h" +
        "ash\030\001 \002(\014\"$\n\010FileAuth\022\030\n\004main\030\001 \003(\0132\n.Au" +
        "thChunk\"0\n\tAuthChunk\022\020\n\010checksum\030\001 \002(\014\022\021" +
        "\n\tauthToken\030\002 \002(\t\"S\n\014AuthorizeGet\0220\n\004dat" +
        "a\030\001 \002(\0132\".FileChecksumStorageHostChunkLi",
        "sts\022\021\n\tverbosity\030\004 \002(\005\"\237\001\n!FileChecksumS" +
        "torageHostChunkLists\0226\n\027storage_host_chu" +
        "nk_list\030\001 \003(\0132\025.StorageHostChunkList\022B\n\034" +
        "file_checksum_chunk_ref_list\030\002 \003(\0132\034.Fil" +
        "eChecksumChunkReferences\"\241\001\n\024StorageHost" +
        "ChunkList\022\033\n\thost_info\030\001 \002(\0132\010.Request\022\036" +
        "\n\nchunk_info\030\002 \003(\0132\n.ChunkInfo\022\035\n\025storag" +
        "e_container_key\030\003 \002(\t\022-\n%storage_contain" +
        "er_authorization_token\030\004 \002(\t\"W\n\tChunkInf" +
        "o\022\026\n\016chunk_checksum\030\001 \002(\014\022\034\n\024chunk_encry",
        "ption_key\030\002 \001(\014\022\024\n\014chunk_length\030\003 \002(\r\"_\n" +
        "\033FileChecksumChunkReferences\022\025\n\rfile_che" +
        "cksum\030\001 \002(\014\022)\n\020chunk_references\030\002 \003(\0132\017." +
        "ChunkReference\">\n\016ChunkReference\022\027\n\017cont" +
        "ainer_index\030\001 \002(\004\022\023\n\013chunk_index\030\002 \002(\004\"\302" +
        "\001\n\007Request\022\020\n\010hostname\030\001 \002(\t\022\014\n\004port\030\002 \002" +
        "(\r\022\016\n\006method\030\003 \002(\t\022\013\n\003uri\030\004 \002(\t\022\032\n\022trans" +
        "port_protocol\030\005 \002(\t\022\"\n\032transport_protoco" +
        "l_version\030\006 \002(\t\022\016\n\006scheme\030\007 \002(\t\022\030\n\007heade" +
        "rs\030\010 \003(\0132\007.Header\022\020\n\010provider\030\t \001(\t\",\n\rF",
        "ileAttribute\022\014\n\004name\030\001 \002(\t\022\r\n\005value\030\002 \002(" +
        "\014\"\212\002\n\010FileInfo\022\020\n\010unknown1\030\001 \001(\005\022\020\n\010unkn" +
        "own2\030\002 \001(\t\022\020\n\010unknown3\030\003 \001(\014\022\020\n\010unknown4" +
        "\030\004 \002(\005\022\020\n\010unknown5\030\005 \002(\005\022\014\n\004user\030\006 \002(\005\022\r" +
        "\n\005group\030\007 \002(\005\022\r\n\005mtime\030\010 \002(\003\022\r\n\005atime\030\t " +
        "\002(\003\022\r\n\005ctime\030\n \002(\003\022\022\n\nprotection\030\014 \002(\005\022\"" +
        "\n\nattributes\030\r \003(\0132\016.FileAttribute\022\020\n\010un" +
        "known6\030\016 \001(\005\022\020\n\010unknown7\030\017 \001(\005\"\222\001\n\004File\022" +
        "\020\n\010fileName\030\001 \002(\014\022\016\n\006domain\030\002 \002(\t\022\014\n\004pat" +
        "h\030\003 \002(\t\022\023\n\013altFileName\030\004 \001(\014\022\020\n\010fileSize",
        "\030\005 \002(\005\022\027\n\004info\030\006 \001(\0132\t.FileInfo\022\014\n\004date\030" +
        "\007 \002(\003\022\014\n\004bool\030\t \002(\010\"$\n\006Header\022\013\n\003key\030\001 \002" +
        "(\t\022\r\n\005value\030\002 \002(\t"
      };
      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;
            internal_static_DeviceUdids_descriptor =
              getDescriptor().getMessageTypes().get(0);
            internal_static_DeviceUdids_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_DeviceUdids_descriptor,
                new java.lang.String[] { "Psid", "Udids", "UsuallyFalse", });
            internal_static_Device_descriptor =
              getDescriptor().getMessageTypes().get(1);
            internal_static_Device_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_Device_descriptor,
                new java.lang.String[] { "Udid", "FullSize", "Backup", "Device", "Time", });
            internal_static_Backup_descriptor =
              getDescriptor().getMessageTypes().get(2);
            internal_static_Backup_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_Backup_descriptor,
                new java.lang.String[] { "SnapshotID", "Size", "Time1", "Info", "Time2", });
            internal_static_BackupInfo_descriptor =
              getDescriptor().getMessageTypes().get(3);
            internal_static_BackupInfo_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_BackupInfo_descriptor,
                new java.lang.String[] { "Name", "Firmware", "Build", "Usually21", "Idk", "Usually22", "Usually1", });
            internal_static_DeviceInfo_descriptor =
              getDescriptor().getMessageTypes().get(4);
            internal_static_DeviceInfo_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_DeviceInfo_descriptor,
                new java.lang.String[] { "ShortName", "RealName", "Serial", "Color", "Model", "PrettyName", "Idk", });
            internal_static_Keys_descriptor =
              getDescriptor().getMessageTypes().get(5);
            internal_static_Keys_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_Keys_descriptor,
                new java.lang.String[] { "KeySet", });
            internal_static_Key_descriptor =
              getDescriptor().getMessageTypes().get(6);
            internal_static_Key_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_Key_descriptor,
                new java.lang.String[] { "Index", "Data", });
            internal_static_GetFiles_descriptor =
              getDescriptor().getMessageTypes().get(7);
            internal_static_GetFiles_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_GetFiles_descriptor,
                new java.lang.String[] { "Hash", });
            internal_static_FileAuth_descriptor =
              getDescriptor().getMessageTypes().get(8);
            internal_static_FileAuth_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_FileAuth_descriptor,
                new java.lang.String[] { "Main", });
            internal_static_AuthChunk_descriptor =
              getDescriptor().getMessageTypes().get(9);
            internal_static_AuthChunk_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_AuthChunk_descriptor,
                new java.lang.String[] { "Checksum", "AuthToken", });
            internal_static_AuthorizeGet_descriptor =
              getDescriptor().getMessageTypes().get(10);
            internal_static_AuthorizeGet_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_AuthorizeGet_descriptor,
                new java.lang.String[] { "Data", "Verbosity", });
            internal_static_FileChecksumStorageHostChunkLists_descriptor =
              getDescriptor().getMessageTypes().get(11);
            internal_static_FileChecksumStorageHostChunkLists_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_FileChecksumStorageHostChunkLists_descriptor,
                new java.lang.String[] { "StorageHostChunkList", "FileChecksumChunkRefList", });
            internal_static_StorageHostChunkList_descriptor =
              getDescriptor().getMessageTypes().get(12);
            internal_static_StorageHostChunkList_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_StorageHostChunkList_descriptor,
                new java.lang.String[] { "HostInfo", "ChunkInfo", "StorageContainerKey", "StorageContainerAuthorizationToken", });
            internal_static_ChunkInfo_descriptor =
              getDescriptor().getMessageTypes().get(13);
            internal_static_ChunkInfo_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_ChunkInfo_descriptor,
                new java.lang.String[] { "ChunkChecksum", "ChunkEncryptionKey", "ChunkLength", });
            internal_static_FileChecksumChunkReferences_descriptor =
              getDescriptor().getMessageTypes().get(14);
            internal_static_FileChecksumChunkReferences_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_FileChecksumChunkReferences_descriptor,
                new java.lang.String[] { "FileChecksum", "ChunkReferences", });
            internal_static_ChunkReference_descriptor =
              getDescriptor().getMessageTypes().get(15);
            internal_static_ChunkReference_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_ChunkReference_descriptor,
                new java.lang.String[] { "ContainerIndex", "ChunkIndex", });
            internal_static_Request_descriptor =
              getDescriptor().getMessageTypes().get(16);
            internal_static_Request_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_Request_descriptor,
                new java.lang.String[] { "Hostname", "Port", "Method", "Uri", "TransportProtocol", "TransportProtocolVersion", "Scheme", "Headers", "Provider", });
            internal_static_FileAttribute_descriptor =
              getDescriptor().getMessageTypes().get(17);
            internal_static_FileAttribute_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_FileAttribute_descriptor,
                new java.lang.String[] { "Name", "Value", });
            internal_static_FileInfo_descriptor =
              getDescriptor().getMessageTypes().get(18);
            internal_static_FileInfo_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_FileInfo_descriptor,
                new java.lang.String[] { "Unknown1", "Unknown2", "Unknown3", "Unknown4", "Unknown5", "User", "Group", "Mtime", "Atime", "Ctime", "Protection", "Attributes", "Unknown6", "Unknown7", });
            internal_static_File_descriptor =
              getDescriptor().getMessageTypes().get(19);
            internal_static_File_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_File_descriptor,
                new java.lang.String[] { "FileName", "Domain", "Path", "AltFileName", "FileSize", "Info", "Date", "Bool", });
            internal_static_Header_descriptor =
              getDescriptor().getMessageTypes().get(20);
            internal_static_Header_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_Header_descriptor,
                new java.lang.String[] { "Key", "Value", });
            return null;
          }
        };
      com.google.protobuf.Descriptors.FileDescriptor
        .internalBuildGeneratedFileFrom(descriptorData,
          new com.google.protobuf.Descriptors.FileDescriptor[] {
          }, assigner);
    }
  
    // @@protoc_insertion_point(outer_class_scope)
  }
  