content: // Generated by the protocol buffer compiler.  DO NOT EDIT!
  // source: Comparator.proto
  
  package com.alibaba.wasp.protobuf.generated;
  
  public final class ComparatorProtos {
    private ComparatorProtos() {}
    public static void registerAllExtensions(
        com.google.protobuf.ExtensionRegistry registry) {
    }
    public interface ComparatorOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
      
      // required string name = 1;
      boolean hasName();
      String getName();
      
      // optional bytes serializedComparator = 2;
      boolean hasSerializedComparator();
      com.google.protobuf.ByteString getSerializedComparator();
    }
    public static final class Comparator extends
        com.google.protobuf.GeneratedMessage
        implements ComparatorOrBuilder {
      // Use Comparator.newBuilder() to construct.
      private Comparator(Builder builder) {
        super(builder);
      }
      private Comparator(boolean noInit) {}
      
      private static final Comparator defaultInstance;
      public static Comparator getDefaultInstance() {
        return defaultInstance;
      }
      
      public Comparator getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_Comparator_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_Comparator_fieldAccessorTable;
      }
      
      private int bitField0_;
      // required string name = 1;
      public static final int NAME_FIELD_NUMBER = 1;
      private java.lang.Object name_;
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public String getName() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          return (String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (com.google.protobuf.Internal.isValidUtf8(bs)) {
            name_ = s;
          }
          return s;
        }
      }
      private com.google.protobuf.ByteString getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8((String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      
      // optional bytes serializedComparator = 2;
      public static final int SERIALIZEDCOMPARATOR_FIELD_NUMBER = 2;
      private com.google.protobuf.ByteString serializedComparator_;
      public boolean hasSerializedComparator() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public com.google.protobuf.ByteString getSerializedComparator() {
        return serializedComparator_;
      }
      
      private void initFields() {
        name_ = "";
        serializedComparator_ = 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;
        }
        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, serializedComparator_);
        }
        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, serializedComparator_);
        }
        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();
      }
      
      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator)) {
          return super.equals(obj);
        }
        com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator other = (com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator) obj;
        
        boolean result = true;
        result = result && (hasName() == other.hasName());
        if (hasName()) {
          result = result && getName()
              .equals(other.getName());
        }
        result = result && (hasSerializedComparator() == other.hasSerializedComparator());
        if (hasSerializedComparator()) {
          result = result && getSerializedComparator()
              .equals(other.getSerializedComparator());
        }
        result = result &&
            getUnknownFields().equals(other.getUnknownFields());
        return result;
      }
      
      @java.lang.Override
      public int hashCode() {
        int hash = 41;
        hash = (19 * hash) + getDescriptorForType().hashCode();
        if (hasName()) {
          hash = (37 * hash) + NAME_FIELD_NUMBER;
          hash = (53 * hash) + getName().hashCode();
        }
        if (hasSerializedComparator()) {
          hash = (37 * hash) + SERIALIZEDCOMPARATOR_FIELD_NUMBER;
          hash = (53 * hash) + getSerializedComparator().hashCode();
        }
        hash = (29 * hash) + getUnknownFields().hashCode();
        return hash;
      }
      
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator 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;
      }
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.alibaba.wasp.protobuf.generated.ComparatorProtos.ComparatorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_Comparator_descriptor;
        }
        
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_Comparator_fieldAccessorTable;
        }
        
        // Construct using com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
        
        private Builder(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);
          serializedComparator_ = 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 com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator.getDescriptor();
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator getDefaultInstanceForType() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator.getDefaultInstance();
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator build() {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
        
        private com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return result;
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator buildPartial() {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator result = new com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator(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.serializedComparator_ = serializedComparator_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
        
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator) {
            return mergeFrom((com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator other) {
          if (other == com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator.getDefaultInstance()) return this;
          if (other.hasName()) {
            setName(other.getName());
          }
          if (other.hasSerializedComparator()) {
            setSerializedComparator(other.getSerializedComparator());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        public final boolean isInitialized() {
          if (!hasName()) {
            
            return false;
          }
          return true;
        }
        
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  onChanged();
                  return this;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                name_ = input.readBytes();
                break;
              }
              case 18: {
                bitField0_ |= 0x00000002;
                serializedComparator_ = input.readBytes();
                break;
              }
            }
          }
        }
        
        private int bitField0_;
        
        // required string name = 1;
        private java.lang.Object name_ = "";
        public boolean hasName() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        public String getName() {
          java.lang.Object ref = name_;
          if (!(ref instanceof String)) {
            String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
            name_ = s;
            return s;
          } else {
            return (String) ref;
          }
        }
        public Builder setName(String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          name_ = value;
          onChanged();
          return this;
        }
        public Builder clearName() {
          bitField0_ = (bitField0_ & ~0x00000001);
          name_ = getDefaultInstance().getName();
          onChanged();
          return this;
        }
        void setName(com.google.protobuf.ByteString value) {
          bitField0_ |= 0x00000001;
          name_ = value;
          onChanged();
        }
        
        // optional bytes serializedComparator = 2;
        private com.google.protobuf.ByteString serializedComparator_ = com.google.protobuf.ByteString.EMPTY;
        public boolean hasSerializedComparator() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        public com.google.protobuf.ByteString getSerializedComparator() {
          return serializedComparator_;
        }
        public Builder setSerializedComparator(com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000002;
          serializedComparator_ = value;
          onChanged();
          return this;
        }
        public Builder clearSerializedComparator() {
          bitField0_ = (bitField0_ & ~0x00000002);
          serializedComparator_ = getDefaultInstance().getSerializedComparator();
          onChanged();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:Comparator)
      }
      
      static {
        defaultInstance = new Comparator(true);
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:Comparator)
    }
    
    public interface ByteArrayComparableOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
      
      // optional bytes value = 1;
      boolean hasValue();
      com.google.protobuf.ByteString getValue();
    }
    public static final class ByteArrayComparable extends
        com.google.protobuf.GeneratedMessage
        implements ByteArrayComparableOrBuilder {
      // Use ByteArrayComparable.newBuilder() to construct.
      private ByteArrayComparable(Builder builder) {
        super(builder);
      }
      private ByteArrayComparable(boolean noInit) {}
      
      private static final ByteArrayComparable defaultInstance;
      public static ByteArrayComparable getDefaultInstance() {
        return defaultInstance;
      }
      
      public ByteArrayComparable getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_ByteArrayComparable_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_ByteArrayComparable_fieldAccessorTable;
      }
      
      private int bitField0_;
      // optional bytes value = 1;
      public static final int VALUE_FIELD_NUMBER = 1;
      private com.google.protobuf.ByteString value_;
      public boolean hasValue() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public com.google.protobuf.ByteString getValue() {
        return value_;
      }
      
      private void initFields() {
        value_ = com.google.protobuf.ByteString.EMPTY;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
        
        memoizedIsInitialized = 1;
        return true;
      }
      
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, 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, 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();
      }
      
      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable)) {
          return super.equals(obj);
        }
        com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable other = (com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable) obj;
        
        boolean result = true;
        result = result && (hasValue() == other.hasValue());
        if (hasValue()) {
          result = result && getValue()
              .equals(other.getValue());
        }
        result = result &&
            getUnknownFields().equals(other.getUnknownFields());
        return result;
      }
      
      @java.lang.Override
      public int hashCode() {
        int hash = 41;
        hash = (19 * hash) + getDescriptorForType().hashCode();
        if (hasValue()) {
          hash = (37 * hash) + VALUE_FIELD_NUMBER;
          hash = (53 * hash) + getValue().hashCode();
        }
        hash = (29 * hash) + getUnknownFields().hashCode();
        return hash;
      }
      
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable 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;
      }
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_ByteArrayComparable_descriptor;
        }
        
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_ByteArrayComparable_fieldAccessorTable;
        }
        
        // Construct using com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
        
        private Builder(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();
          value_ = 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 com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDescriptor();
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable getDefaultInstanceForType() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance();
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable build() {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
        
        private com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return result;
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable buildPartial() {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable result = new com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.value_ = value_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
        
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable) {
            return mergeFrom((com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable other) {
          if (other == com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance()) return this;
          if (other.hasValue()) {
            setValue(other.getValue());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        public final boolean isInitialized() {
          return true;
        }
        
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  onChanged();
                  return this;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                value_ = input.readBytes();
                break;
              }
            }
          }
        }
        
        private int bitField0_;
        
        // optional bytes value = 1;
        private com.google.protobuf.ByteString value_ = com.google.protobuf.ByteString.EMPTY;
        public boolean hasValue() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        public com.google.protobuf.ByteString getValue() {
          return value_;
        }
        public Builder setValue(com.google.protobuf.ByteString value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          value_ = value;
          onChanged();
          return this;
        }
        public Builder clearValue() {
          bitField0_ = (bitField0_ & ~0x00000001);
          value_ = getDefaultInstance().getValue();
          onChanged();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:ByteArrayComparable)
      }
      
      static {
        defaultInstance = new ByteArrayComparable(true);
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:ByteArrayComparable)
    }
    
    public interface BinaryComparatorOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
      
      // required .ByteArrayComparable comparable = 1;
      boolean hasComparable();
      com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable getComparable();
      com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder getComparableOrBuilder();
    }
    public static final class BinaryComparator extends
        com.google.protobuf.GeneratedMessage
        implements BinaryComparatorOrBuilder {
      // Use BinaryComparator.newBuilder() to construct.
      private BinaryComparator(Builder builder) {
        super(builder);
      }
      private BinaryComparator(boolean noInit) {}
      
      private static final BinaryComparator defaultInstance;
      public static BinaryComparator getDefaultInstance() {
        return defaultInstance;
      }
      
      public BinaryComparator getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_BinaryComparator_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_BinaryComparator_fieldAccessorTable;
      }
      
      private int bitField0_;
      // required .ByteArrayComparable comparable = 1;
      public static final int COMPARABLE_FIELD_NUMBER = 1;
      private com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable comparable_;
      public boolean hasComparable() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable getComparable() {
        return comparable_;
      }
      public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder getComparableOrBuilder() {
        return comparable_;
      }
      
      private void initFields() {
        comparable_ = com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance();
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
        
        if (!hasComparable()) {
          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, comparable_);
        }
        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, comparable_);
        }
        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();
      }
      
      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator)) {
          return super.equals(obj);
        }
        com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator other = (com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator) obj;
        
        boolean result = true;
        result = result && (hasComparable() == other.hasComparable());
        if (hasComparable()) {
          result = result && getComparable()
              .equals(other.getComparable());
        }
        result = result &&
            getUnknownFields().equals(other.getUnknownFields());
        return result;
      }
      
      @java.lang.Override
      public int hashCode() {
        int hash = 41;
        hash = (19 * hash) + getDescriptorForType().hashCode();
        if (hasComparable()) {
          hash = (37 * hash) + COMPARABLE_FIELD_NUMBER;
          hash = (53 * hash) + getComparable().hashCode();
        }
        hash = (29 * hash) + getUnknownFields().hashCode();
        return hash;
      }
      
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator 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;
      }
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparatorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_BinaryComparator_descriptor;
        }
        
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_BinaryComparator_fieldAccessorTable;
        }
        
        // Construct using com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
        
        private Builder(BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getComparableFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }
        
        public Builder clear() {
          super.clear();
          if (comparableBuilder_ == null) {
            comparable_ = com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance();
          } else {
            comparableBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
        
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
        
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator.getDescriptor();
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator getDefaultInstanceForType() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator.getDefaultInstance();
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator build() {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
        
        private com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return result;
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator buildPartial() {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator result = new com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          if (comparableBuilder_ == null) {
            result.comparable_ = comparable_;
          } else {
            result.comparable_ = comparableBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
        
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator) {
            return mergeFrom((com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator other) {
          if (other == com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator.getDefaultInstance()) return this;
          if (other.hasComparable()) {
            mergeComparable(other.getComparable());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        public final boolean isInitialized() {
          if (!hasComparable()) {
            
            return false;
          }
          return true;
        }
        
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  onChanged();
                  return this;
                }
                break;
              }
              case 10: {
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder subBuilder = com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.newBuilder();
                if (hasComparable()) {
                  subBuilder.mergeFrom(getComparable());
                }
                input.readMessage(subBuilder, extensionRegistry);
                setComparable(subBuilder.buildPartial());
                break;
              }
            }
          }
        }
        
        private int bitField0_;
        
        // required .ByteArrayComparable comparable = 1;
        private com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable comparable_ = com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance();
        private com.google.protobuf.SingleFieldBuilder<
            com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder> comparableBuilder_;
        public boolean hasComparable() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable getComparable() {
          if (comparableBuilder_ == null) {
            return comparable_;
          } else {
            return comparableBuilder_.getMessage();
          }
        }
        public Builder setComparable(com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable value) {
          if (comparableBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            comparable_ = value;
            onChanged();
          } else {
            comparableBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        public Builder setComparable(
            com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder builderForValue) {
          if (comparableBuilder_ == null) {
            comparable_ = builderForValue.build();
            onChanged();
          } else {
            comparableBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        public Builder mergeComparable(com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable value) {
          if (comparableBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001) &&
                comparable_ != com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance()) {
              comparable_ =
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.newBuilder(comparable_).mergeFrom(value).buildPartial();
            } else {
              comparable_ = value;
            }
            onChanged();
          } else {
            comparableBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        public Builder clearComparable() {
          if (comparableBuilder_ == null) {
            comparable_ = com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance();
            onChanged();
          } else {
            comparableBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder getComparableBuilder() {
          bitField0_ |= 0x00000001;
          onChanged();
          return getComparableFieldBuilder().getBuilder();
        }
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder getComparableOrBuilder() {
          if (comparableBuilder_ != null) {
            return comparableBuilder_.getMessageOrBuilder();
          } else {
            return comparable_;
          }
        }
        private com.google.protobuf.SingleFieldBuilder<
            com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder> 
            getComparableFieldBuilder() {
          if (comparableBuilder_ == null) {
            comparableBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder>(
                    comparable_,
                    getParentForChildren(),
                    isClean());
            comparable_ = null;
          }
          return comparableBuilder_;
        }
        
        // @@protoc_insertion_point(builder_scope:BinaryComparator)
      }
      
      static {
        defaultInstance = new BinaryComparator(true);
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:BinaryComparator)
    }
    
    public interface BinaryPrefixComparatorOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
      
      // required .ByteArrayComparable comparable = 1;
      boolean hasComparable();
      com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable getComparable();
      com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder getComparableOrBuilder();
    }
    public static final class BinaryPrefixComparator extends
        com.google.protobuf.GeneratedMessage
        implements BinaryPrefixComparatorOrBuilder {
      // Use BinaryPrefixComparator.newBuilder() to construct.
      private BinaryPrefixComparator(Builder builder) {
        super(builder);
      }
      private BinaryPrefixComparator(boolean noInit) {}
      
      private static final BinaryPrefixComparator defaultInstance;
      public static BinaryPrefixComparator getDefaultInstance() {
        return defaultInstance;
      }
      
      public BinaryPrefixComparator getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_BinaryPrefixComparator_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_BinaryPrefixComparator_fieldAccessorTable;
      }
      
      private int bitField0_;
      // required .ByteArrayComparable comparable = 1;
      public static final int COMPARABLE_FIELD_NUMBER = 1;
      private com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable comparable_;
      public boolean hasComparable() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable getComparable() {
        return comparable_;
      }
      public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder getComparableOrBuilder() {
        return comparable_;
      }
      
      private void initFields() {
        comparable_ = com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance();
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
        
        if (!hasComparable()) {
          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, comparable_);
        }
        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, comparable_);
        }
        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();
      }
      
      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator)) {
          return super.equals(obj);
        }
        com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator other = (com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator) obj;
        
        boolean result = true;
        result = result && (hasComparable() == other.hasComparable());
        if (hasComparable()) {
          result = result && getComparable()
              .equals(other.getComparable());
        }
        result = result &&
            getUnknownFields().equals(other.getUnknownFields());
        return result;
      }
      
      @java.lang.Override
      public int hashCode() {
        int hash = 41;
        hash = (19 * hash) + getDescriptorForType().hashCode();
        if (hasComparable()) {
          hash = (37 * hash) + COMPARABLE_FIELD_NUMBER;
          hash = (53 * hash) + getComparable().hashCode();
        }
        hash = (29 * hash) + getUnknownFields().hashCode();
        return hash;
      }
      
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator 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;
      }
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparatorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_BinaryPrefixComparator_descriptor;
        }
        
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_BinaryPrefixComparator_fieldAccessorTable;
        }
        
        // Construct using com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
        
        private Builder(BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getComparableFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }
        
        public Builder clear() {
          super.clear();
          if (comparableBuilder_ == null) {
            comparable_ = com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance();
          } else {
            comparableBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
        
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
        
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator.getDescriptor();
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator getDefaultInstanceForType() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator.getDefaultInstance();
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator build() {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
        
        private com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return result;
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator buildPartial() {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator result = new com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          if (comparableBuilder_ == null) {
            result.comparable_ = comparable_;
          } else {
            result.comparable_ = comparableBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
        
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator) {
            return mergeFrom((com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator other) {
          if (other == com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator.getDefaultInstance()) return this;
          if (other.hasComparable()) {
            mergeComparable(other.getComparable());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        public final boolean isInitialized() {
          if (!hasComparable()) {
            
            return false;
          }
          return true;
        }
        
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  onChanged();
                  return this;
                }
                break;
              }
              case 10: {
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder subBuilder = com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.newBuilder();
                if (hasComparable()) {
                  subBuilder.mergeFrom(getComparable());
                }
                input.readMessage(subBuilder, extensionRegistry);
                setComparable(subBuilder.buildPartial());
                break;
              }
            }
          }
        }
        
        private int bitField0_;
        
        // required .ByteArrayComparable comparable = 1;
        private com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable comparable_ = com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance();
        private com.google.protobuf.SingleFieldBuilder<
            com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder> comparableBuilder_;
        public boolean hasComparable() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable getComparable() {
          if (comparableBuilder_ == null) {
            return comparable_;
          } else {
            return comparableBuilder_.getMessage();
          }
        }
        public Builder setComparable(com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable value) {
          if (comparableBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            comparable_ = value;
            onChanged();
          } else {
            comparableBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        public Builder setComparable(
            com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder builderForValue) {
          if (comparableBuilder_ == null) {
            comparable_ = builderForValue.build();
            onChanged();
          } else {
            comparableBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        public Builder mergeComparable(com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable value) {
          if (comparableBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001) &&
                comparable_ != com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance()) {
              comparable_ =
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.newBuilder(comparable_).mergeFrom(value).buildPartial();
            } else {
              comparable_ = value;
            }
            onChanged();
          } else {
            comparableBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        public Builder clearComparable() {
          if (comparableBuilder_ == null) {
            comparable_ = com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance();
            onChanged();
          } else {
            comparableBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder getComparableBuilder() {
          bitField0_ |= 0x00000001;
          onChanged();
          return getComparableFieldBuilder().getBuilder();
        }
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder getComparableOrBuilder() {
          if (comparableBuilder_ != null) {
            return comparableBuilder_.getMessageOrBuilder();
          } else {
            return comparable_;
          }
        }
        private com.google.protobuf.SingleFieldBuilder<
            com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder> 
            getComparableFieldBuilder() {
          if (comparableBuilder_ == null) {
            comparableBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder>(
                    comparable_,
                    getParentForChildren(),
                    isClean());
            comparable_ = null;
          }
          return comparableBuilder_;
        }
        
        // @@protoc_insertion_point(builder_scope:BinaryPrefixComparator)
      }
      
      static {
        defaultInstance = new BinaryPrefixComparator(true);
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:BinaryPrefixComparator)
    }
    
    public interface BitComparatorOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
      
      // required .ByteArrayComparable comparable = 1;
      boolean hasComparable();
      com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable getComparable();
      com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder getComparableOrBuilder();
      
      // required .BitComparator.BitwiseOp bitwiseOp = 2;
      boolean hasBitwiseOp();
      com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.BitwiseOp getBitwiseOp();
    }
    public static final class BitComparator extends
        com.google.protobuf.GeneratedMessage
        implements BitComparatorOrBuilder {
      // Use BitComparator.newBuilder() to construct.
      private BitComparator(Builder builder) {
        super(builder);
      }
      private BitComparator(boolean noInit) {}
      
      private static final BitComparator defaultInstance;
      public static BitComparator getDefaultInstance() {
        return defaultInstance;
      }
      
      public BitComparator getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_BitComparator_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_BitComparator_fieldAccessorTable;
      }
      
      public enum BitwiseOp
          implements com.google.protobuf.ProtocolMessageEnum {
        AND(0, 1),
        OR(1, 2),
        XOR(2, 3),
        ;
        
        public static final int AND_VALUE = 1;
        public static final int OR_VALUE = 2;
        public static final int XOR_VALUE = 3;
        
        
        public final int getNumber() { return value; }
        
        public static BitwiseOp valueOf(int value) {
          switch (value) {
            case 1: return AND;
            case 2: return OR;
            case 3: return XOR;
            default: return null;
          }
        }
        
        public static com.google.protobuf.Internal.EnumLiteMap<BitwiseOp>
            internalGetValueMap() {
          return internalValueMap;
        }
        private static com.google.protobuf.Internal.EnumLiteMap<BitwiseOp>
            internalValueMap =
              new com.google.protobuf.Internal.EnumLiteMap<BitwiseOp>() {
                public BitwiseOp findValueByNumber(int number) {
                  return BitwiseOp.valueOf(number);
                }
              };
        
        public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
          return getDescriptor().getValues().get(index);
        }
        public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
          return getDescriptor();
        }
        public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.getDescriptor().getEnumTypes().get(0);
        }
        
        private static final BitwiseOp[] VALUES = {
          AND, OR, XOR, 
        };
        
        public static BitwiseOp valueOf(
            com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
          if (desc.getType() != getDescriptor()) {
            throw new java.lang.IllegalArgumentException(
              "EnumValueDescriptor is not for this type.");
          }
          return VALUES[desc.getIndex()];
        }
        
        private final int index;
        private final int value;
        
        private BitwiseOp(int index, int value) {
          this.index = index;
          this.value = value;
        }
        
        // @@protoc_insertion_point(enum_scope:BitComparator.BitwiseOp)
      }
      
      private int bitField0_;
      // required .ByteArrayComparable comparable = 1;
      public static final int COMPARABLE_FIELD_NUMBER = 1;
      private com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable comparable_;
      public boolean hasComparable() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable getComparable() {
        return comparable_;
      }
      public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder getComparableOrBuilder() {
        return comparable_;
      }
      
      // required .BitComparator.BitwiseOp bitwiseOp = 2;
      public static final int BITWISEOP_FIELD_NUMBER = 2;
      private com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.BitwiseOp bitwiseOp_;
      public boolean hasBitwiseOp() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.BitwiseOp getBitwiseOp() {
        return bitwiseOp_;
      }
      
      private void initFields() {
        comparable_ = com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance();
        bitwiseOp_ = com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.BitwiseOp.AND;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
        
        if (!hasComparable()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasBitwiseOp()) {
          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, comparable_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeEnum(2, bitwiseOp_.getNumber());
        }
        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, comparable_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeEnumSize(2, bitwiseOp_.getNumber());
        }
        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();
      }
      
      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator)) {
          return super.equals(obj);
        }
        com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator other = (com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator) obj;
        
        boolean result = true;
        result = result && (hasComparable() == other.hasComparable());
        if (hasComparable()) {
          result = result && getComparable()
              .equals(other.getComparable());
        }
        result = result && (hasBitwiseOp() == other.hasBitwiseOp());
        if (hasBitwiseOp()) {
          result = result &&
              (getBitwiseOp() == other.getBitwiseOp());
        }
        result = result &&
            getUnknownFields().equals(other.getUnknownFields());
        return result;
      }
      
      @java.lang.Override
      public int hashCode() {
        int hash = 41;
        hash = (19 * hash) + getDescriptorForType().hashCode();
        if (hasComparable()) {
          hash = (37 * hash) + COMPARABLE_FIELD_NUMBER;
          hash = (53 * hash) + getComparable().hashCode();
        }
        if (hasBitwiseOp()) {
          hash = (37 * hash) + BITWISEOP_FIELD_NUMBER;
          hash = (53 * hash) + hashEnum(getBitwiseOp());
        }
        hash = (29 * hash) + getUnknownFields().hashCode();
        return hash;
      }
      
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator 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;
      }
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparatorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_BitComparator_descriptor;
        }
        
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_BitComparator_fieldAccessorTable;
        }
        
        // Construct using com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
        
        private Builder(BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getComparableFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }
        
        public Builder clear() {
          super.clear();
          if (comparableBuilder_ == null) {
            comparable_ = com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance();
          } else {
            comparableBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          bitwiseOp_ = com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.BitwiseOp.AND;
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }
        
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
        
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.getDescriptor();
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator getDefaultInstanceForType() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.getDefaultInstance();
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator build() {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
        
        private com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return result;
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator buildPartial() {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator result = new com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          if (comparableBuilder_ == null) {
            result.comparable_ = comparable_;
          } else {
            result.comparable_ = comparableBuilder_.build();
          }
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.bitwiseOp_ = bitwiseOp_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
        
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator) {
            return mergeFrom((com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator other) {
          if (other == com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.getDefaultInstance()) return this;
          if (other.hasComparable()) {
            mergeComparable(other.getComparable());
          }
          if (other.hasBitwiseOp()) {
            setBitwiseOp(other.getBitwiseOp());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        public final boolean isInitialized() {
          if (!hasComparable()) {
            
            return false;
          }
          if (!hasBitwiseOp()) {
            
            return false;
          }
          return true;
        }
        
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  onChanged();
                  return this;
                }
                break;
              }
              case 10: {
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder subBuilder = com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.newBuilder();
                if (hasComparable()) {
                  subBuilder.mergeFrom(getComparable());
                }
                input.readMessage(subBuilder, extensionRegistry);
                setComparable(subBuilder.buildPartial());
                break;
              }
              case 16: {
                int rawValue = input.readEnum();
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.BitwiseOp value = com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.BitwiseOp.valueOf(rawValue);
                if (value == null) {
                  unknownFields.mergeVarintField(2, rawValue);
                } else {
                  bitField0_ |= 0x00000002;
                  bitwiseOp_ = value;
                }
                break;
              }
            }
          }
        }
        
        private int bitField0_;
        
        // required .ByteArrayComparable comparable = 1;
        private com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable comparable_ = com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance();
        private com.google.protobuf.SingleFieldBuilder<
            com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder> comparableBuilder_;
        public boolean hasComparable() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable getComparable() {
          if (comparableBuilder_ == null) {
            return comparable_;
          } else {
            return comparableBuilder_.getMessage();
          }
        }
        public Builder setComparable(com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable value) {
          if (comparableBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            comparable_ = value;
            onChanged();
          } else {
            comparableBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        public Builder setComparable(
            com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder builderForValue) {
          if (comparableBuilder_ == null) {
            comparable_ = builderForValue.build();
            onChanged();
          } else {
            comparableBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        public Builder mergeComparable(com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable value) {
          if (comparableBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001) &&
                comparable_ != com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance()) {
              comparable_ =
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.newBuilder(comparable_).mergeFrom(value).buildPartial();
            } else {
              comparable_ = value;
            }
            onChanged();
          } else {
            comparableBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        public Builder clearComparable() {
          if (comparableBuilder_ == null) {
            comparable_ = com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.getDefaultInstance();
            onChanged();
          } else {
            comparableBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder getComparableBuilder() {
          bitField0_ |= 0x00000001;
          onChanged();
          return getComparableFieldBuilder().getBuilder();
        }
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder getComparableOrBuilder() {
          if (comparableBuilder_ != null) {
            return comparableBuilder_.getMessageOrBuilder();
          } else {
            return comparable_;
          }
        }
        private com.google.protobuf.SingleFieldBuilder<
            com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder> 
            getComparableFieldBuilder() {
          if (comparableBuilder_ == null) {
            comparableBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder, com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparableOrBuilder>(
                    comparable_,
                    getParentForChildren(),
                    isClean());
            comparable_ = null;
          }
          return comparableBuilder_;
        }
        
        // required .BitComparator.BitwiseOp bitwiseOp = 2;
        private com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.BitwiseOp bitwiseOp_ = com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.BitwiseOp.AND;
        public boolean hasBitwiseOp() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.BitwiseOp getBitwiseOp() {
          return bitwiseOp_;
        }
        public Builder setBitwiseOp(com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.BitwiseOp value) {
          if (value == null) {
            throw new NullPointerException();
          }
          bitField0_ |= 0x00000002;
          bitwiseOp_ = value;
          onChanged();
          return this;
        }
        public Builder clearBitwiseOp() {
          bitField0_ = (bitField0_ & ~0x00000002);
          bitwiseOp_ = com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.BitwiseOp.AND;
          onChanged();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:BitComparator)
      }
      
      static {
        defaultInstance = new BitComparator(true);
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:BitComparator)
    }
    
    public interface NullComparatorOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
    }
    public static final class NullComparator extends
        com.google.protobuf.GeneratedMessage
        implements NullComparatorOrBuilder {
      // Use NullComparator.newBuilder() to construct.
      private NullComparator(Builder builder) {
        super(builder);
      }
      private NullComparator(boolean noInit) {}
      
      private static final NullComparator defaultInstance;
      public static NullComparator getDefaultInstance() {
        return defaultInstance;
      }
      
      public NullComparator getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_NullComparator_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_NullComparator_fieldAccessorTable;
      }
      
      private void initFields() {
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
        
        memoizedIsInitialized = 1;
        return true;
      }
      
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        getUnknownFields().writeTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        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();
      }
      
      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator)) {
          return super.equals(obj);
        }
        com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator other = (com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator) obj;
        
        boolean result = true;
        result = result &&
            getUnknownFields().equals(other.getUnknownFields());
        return result;
      }
      
      @java.lang.Override
      public int hashCode() {
        int hash = 41;
        hash = (19 * hash) + getDescriptorForType().hashCode();
        hash = (29 * hash) + getUnknownFields().hashCode();
        return hash;
      }
      
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator 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;
      }
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparatorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_NullComparator_descriptor;
        }
        
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_NullComparator_fieldAccessorTable;
        }
        
        // Construct using com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
        
        private Builder(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();
          return this;
        }
        
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
        
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator.getDescriptor();
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator getDefaultInstanceForType() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator.getDefaultInstance();
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator build() {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
        
        private com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return result;
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator buildPartial() {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator result = new com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator(this);
          onBuilt();
          return result;
        }
        
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator) {
            return mergeFrom((com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator other) {
          if (other == com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator.getDefaultInstance()) return this;
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        public final boolean isInitialized() {
          return true;
        }
        
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  onChanged();
                  return this;
                }
                break;
              }
            }
          }
        }
        
        
        // @@protoc_insertion_point(builder_scope:NullComparator)
      }
      
      static {
        defaultInstance = new NullComparator(true);
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:NullComparator)
    }
    
    public interface RegexStringComparatorOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
      
      // required string pattern = 1;
      boolean hasPattern();
      String getPattern();
      
      // required int32 patternFlags = 2;
      boolean hasPatternFlags();
      int getPatternFlags();
      
      // required string charset = 3;
      boolean hasCharset();
      String getCharset();
    }
    public static final class RegexStringComparator extends
        com.google.protobuf.GeneratedMessage
        implements RegexStringComparatorOrBuilder {
      // Use RegexStringComparator.newBuilder() to construct.
      private RegexStringComparator(Builder builder) {
        super(builder);
      }
      private RegexStringComparator(boolean noInit) {}
      
      private static final RegexStringComparator defaultInstance;
      public static RegexStringComparator getDefaultInstance() {
        return defaultInstance;
      }
      
      public RegexStringComparator getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_RegexStringComparator_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_RegexStringComparator_fieldAccessorTable;
      }
      
      private int bitField0_;
      // required string pattern = 1;
      public static final int PATTERN_FIELD_NUMBER = 1;
      private java.lang.Object pattern_;
      public boolean hasPattern() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public String getPattern() {
        java.lang.Object ref = pattern_;
        if (ref instanceof String) {
          return (String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (com.google.protobuf.Internal.isValidUtf8(bs)) {
            pattern_ = s;
          }
          return s;
        }
      }
      private com.google.protobuf.ByteString getPatternBytes() {
        java.lang.Object ref = pattern_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8((String) ref);
          pattern_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      
      // required int32 patternFlags = 2;
      public static final int PATTERNFLAGS_FIELD_NUMBER = 2;
      private int patternFlags_;
      public boolean hasPatternFlags() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public int getPatternFlags() {
        return patternFlags_;
      }
      
      // required string charset = 3;
      public static final int CHARSET_FIELD_NUMBER = 3;
      private java.lang.Object charset_;
      public boolean hasCharset() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public String getCharset() {
        java.lang.Object ref = charset_;
        if (ref instanceof String) {
          return (String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (com.google.protobuf.Internal.isValidUtf8(bs)) {
            charset_ = s;
          }
          return s;
        }
      }
      private com.google.protobuf.ByteString getCharsetBytes() {
        java.lang.Object ref = charset_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8((String) ref);
          charset_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      
      private void initFields() {
        pattern_ = "";
        patternFlags_ = 0;
        charset_ = "";
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
        
        if (!hasPattern()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasPatternFlags()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasCharset()) {
          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, getPatternBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeInt32(2, patternFlags_);
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeBytes(3, getCharsetBytes());
        }
        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, getPatternBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(2, patternFlags_);
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(3, getCharsetBytes());
        }
        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();
      }
      
      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator)) {
          return super.equals(obj);
        }
        com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator other = (com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator) obj;
        
        boolean result = true;
        result = result && (hasPattern() == other.hasPattern());
        if (hasPattern()) {
          result = result && getPattern()
              .equals(other.getPattern());
        }
        result = result && (hasPatternFlags() == other.hasPatternFlags());
        if (hasPatternFlags()) {
          result = result && (getPatternFlags()
              == other.getPatternFlags());
        }
        result = result && (hasCharset() == other.hasCharset());
        if (hasCharset()) {
          result = result && getCharset()
              .equals(other.getCharset());
        }
        result = result &&
            getUnknownFields().equals(other.getUnknownFields());
        return result;
      }
      
      @java.lang.Override
      public int hashCode() {
        int hash = 41;
        hash = (19 * hash) + getDescriptorForType().hashCode();
        if (hasPattern()) {
          hash = (37 * hash) + PATTERN_FIELD_NUMBER;
          hash = (53 * hash) + getPattern().hashCode();
        }
        if (hasPatternFlags()) {
          hash = (37 * hash) + PATTERNFLAGS_FIELD_NUMBER;
          hash = (53 * hash) + getPatternFlags();
        }
        if (hasCharset()) {
          hash = (37 * hash) + CHARSET_FIELD_NUMBER;
          hash = (53 * hash) + getCharset().hashCode();
        }
        hash = (29 * hash) + getUnknownFields().hashCode();
        return hash;
      }
      
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator 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;
      }
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparatorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_RegexStringComparator_descriptor;
        }
        
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_RegexStringComparator_fieldAccessorTable;
        }
        
        // Construct using com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
        
        private Builder(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();
          pattern_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          patternFlags_ = 0;
          bitField0_ = (bitField0_ & ~0x00000002);
          charset_ = "";
          bitField0_ = (bitField0_ & ~0x00000004);
          return this;
        }
        
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
        
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator.getDescriptor();
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator getDefaultInstanceForType() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator.getDefaultInstance();
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator build() {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
        
        private com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return result;
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator buildPartial() {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator result = new com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.pattern_ = pattern_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.patternFlags_ = patternFlags_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000004;
          }
          result.charset_ = charset_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
        
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator) {
            return mergeFrom((com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator other) {
          if (other == com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator.getDefaultInstance()) return this;
          if (other.hasPattern()) {
            setPattern(other.getPattern());
          }
          if (other.hasPatternFlags()) {
            setPatternFlags(other.getPatternFlags());
          }
          if (other.hasCharset()) {
            setCharset(other.getCharset());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        public final boolean isInitialized() {
          if (!hasPattern()) {
            
            return false;
          }
          if (!hasPatternFlags()) {
            
            return false;
          }
          if (!hasCharset()) {
            
            return false;
          }
          return true;
        }
        
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  onChanged();
                  return this;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                pattern_ = input.readBytes();
                break;
              }
              case 16: {
                bitField0_ |= 0x00000002;
                patternFlags_ = input.readInt32();
                break;
              }
              case 26: {
                bitField0_ |= 0x00000004;
                charset_ = input.readBytes();
                break;
              }
            }
          }
        }
        
        private int bitField0_;
        
        // required string pattern = 1;
        private java.lang.Object pattern_ = "";
        public boolean hasPattern() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        public String getPattern() {
          java.lang.Object ref = pattern_;
          if (!(ref instanceof String)) {
            String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
            pattern_ = s;
            return s;
          } else {
            return (String) ref;
          }
        }
        public Builder setPattern(String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          pattern_ = value;
          onChanged();
          return this;
        }
        public Builder clearPattern() {
          bitField0_ = (bitField0_ & ~0x00000001);
          pattern_ = getDefaultInstance().getPattern();
          onChanged();
          return this;
        }
        void setPattern(com.google.protobuf.ByteString value) {
          bitField0_ |= 0x00000001;
          pattern_ = value;
          onChanged();
        }
        
        // required int32 patternFlags = 2;
        private int patternFlags_ ;
        public boolean hasPatternFlags() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        public int getPatternFlags() {
          return patternFlags_;
        }
        public Builder setPatternFlags(int value) {
          bitField0_ |= 0x00000002;
          patternFlags_ = value;
          onChanged();
          return this;
        }
        public Builder clearPatternFlags() {
          bitField0_ = (bitField0_ & ~0x00000002);
          patternFlags_ = 0;
          onChanged();
          return this;
        }
        
        // required string charset = 3;
        private java.lang.Object charset_ = "";
        public boolean hasCharset() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        public String getCharset() {
          java.lang.Object ref = charset_;
          if (!(ref instanceof String)) {
            String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
            charset_ = s;
            return s;
          } else {
            return (String) ref;
          }
        }
        public Builder setCharset(String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000004;
          charset_ = value;
          onChanged();
          return this;
        }
        public Builder clearCharset() {
          bitField0_ = (bitField0_ & ~0x00000004);
          charset_ = getDefaultInstance().getCharset();
          onChanged();
          return this;
        }
        void setCharset(com.google.protobuf.ByteString value) {
          bitField0_ |= 0x00000004;
          charset_ = value;
          onChanged();
        }
        
        // @@protoc_insertion_point(builder_scope:RegexStringComparator)
      }
      
      static {
        defaultInstance = new RegexStringComparator(true);
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:RegexStringComparator)
    }
    
    public interface SubstringComparatorOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
      
      // required string substr = 1;
      boolean hasSubstr();
      String getSubstr();
    }
    public static final class SubstringComparator extends
        com.google.protobuf.GeneratedMessage
        implements SubstringComparatorOrBuilder {
      // Use SubstringComparator.newBuilder() to construct.
      private SubstringComparator(Builder builder) {
        super(builder);
      }
      private SubstringComparator(boolean noInit) {}
      
      private static final SubstringComparator defaultInstance;
      public static SubstringComparator getDefaultInstance() {
        return defaultInstance;
      }
      
      public SubstringComparator getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_SubstringComparator_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_SubstringComparator_fieldAccessorTable;
      }
      
      private int bitField0_;
      // required string substr = 1;
      public static final int SUBSTR_FIELD_NUMBER = 1;
      private java.lang.Object substr_;
      public boolean hasSubstr() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public String getSubstr() {
        java.lang.Object ref = substr_;
        if (ref instanceof String) {
          return (String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (com.google.protobuf.Internal.isValidUtf8(bs)) {
            substr_ = s;
          }
          return s;
        }
      }
      private com.google.protobuf.ByteString getSubstrBytes() {
        java.lang.Object ref = substr_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8((String) ref);
          substr_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      
      private void initFields() {
        substr_ = "";
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
        
        if (!hasSubstr()) {
          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, getSubstrBytes());
        }
        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, getSubstrBytes());
        }
        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();
      }
      
      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator)) {
          return super.equals(obj);
        }
        com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator other = (com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator) obj;
        
        boolean result = true;
        result = result && (hasSubstr() == other.hasSubstr());
        if (hasSubstr()) {
          result = result && getSubstr()
              .equals(other.getSubstr());
        }
        result = result &&
            getUnknownFields().equals(other.getUnknownFields());
        return result;
      }
      
      @java.lang.Override
      public int hashCode() {
        int hash = 41;
        hash = (19 * hash) + getDescriptorForType().hashCode();
        if (hasSubstr()) {
          hash = (37 * hash) + SUBSTR_FIELD_NUMBER;
          hash = (53 * hash) + getSubstr().hashCode();
        }
        hash = (29 * hash) + getUnknownFields().hashCode();
        return hash;
      }
      
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator 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;
      }
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparatorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_SubstringComparator_descriptor;
        }
        
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.internal_static_SubstringComparator_fieldAccessorTable;
        }
        
        // Construct using com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
        
        private Builder(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();
          substr_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
        
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
        
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator.getDescriptor();
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator getDefaultInstanceForType() {
          return com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator.getDefaultInstance();
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator build() {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
        
        private com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return result;
        }
        
        public com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator buildPartial() {
          com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator result = new com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.substr_ = substr_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
        
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator) {
            return mergeFrom((com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator other) {
          if (other == com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator.getDefaultInstance()) return this;
          if (other.hasSubstr()) {
            setSubstr(other.getSubstr());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        public final boolean isInitialized() {
          if (!hasSubstr()) {
            
            return false;
          }
          return true;
        }
        
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  onChanged();
                  return this;
                }
                break;
              }
              case 10: {
                bitField0_ |= 0x00000001;
                substr_ = input.readBytes();
                break;
              }
            }
          }
        }
        
        private int bitField0_;
        
        // required string substr = 1;
        private java.lang.Object substr_ = "";
        public boolean hasSubstr() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        public String getSubstr() {
          java.lang.Object ref = substr_;
          if (!(ref instanceof String)) {
            String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
            substr_ = s;
            return s;
          } else {
            return (String) ref;
          }
        }
        public Builder setSubstr(String value) {
          if (value == null) {
      throw new NullPointerException();
    }
    bitField0_ |= 0x00000001;
          substr_ = value;
          onChanged();
          return this;
        }
        public Builder clearSubstr() {
          bitField0_ = (bitField0_ & ~0x00000001);
          substr_ = getDefaultInstance().getSubstr();
          onChanged();
          return this;
        }
        void setSubstr(com.google.protobuf.ByteString value) {
          bitField0_ |= 0x00000001;
          substr_ = value;
          onChanged();
        }
        
        // @@protoc_insertion_point(builder_scope:SubstringComparator)
      }
      
      static {
        defaultInstance = new SubstringComparator(true);
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:SubstringComparator)
    }
    
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_Comparator_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_Comparator_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_ByteArrayComparable_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_ByteArrayComparable_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_BinaryComparator_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_BinaryComparator_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_BinaryPrefixComparator_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_BinaryPrefixComparator_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_BitComparator_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_BitComparator_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_NullComparator_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_NullComparator_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_RegexStringComparator_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_RegexStringComparator_fieldAccessorTable;
    private static com.google.protobuf.Descriptors.Descriptor
      internal_static_SubstringComparator_descriptor;
    private static
      com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internal_static_SubstringComparator_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\020Comparator.proto\"8\n\nComparator\022\014\n\004name" +
        "\030\001 \002(\t\022\034\n\024serializedComparator\030\002 \001(\014\"$\n\023" +
        "ByteArrayComparable\022\r\n\005value\030\001 \001(\014\"<\n\020Bi" +
        "naryComparator\022(\n\ncomparable\030\001 \002(\0132\024.Byt" +
        "eArrayComparable\"B\n\026BinaryPrefixComparat" +
        "or\022(\n\ncomparable\030\001 \002(\0132\024.ByteArrayCompar" +
        "able\"\215\001\n\rBitComparator\022(\n\ncomparable\030\001 \002" +
        "(\0132\024.ByteArrayComparable\022+\n\tbitwiseOp\030\002 " +
        "\002(\0162\030.BitComparator.BitwiseOp\"%\n\tBitwise" +
        "Op\022\007\n\003AND\020\001\022\006\n\002OR\020\002\022\007\n\003XOR\020\003\"\020\n\016NullComp",
        "arator\"O\n\025RegexStringComparator\022\017\n\007patte" +
        "rn\030\001 \002(\t\022\024\n\014patternFlags\030\002 \002(\005\022\017\n\007charse" +
        "t\030\003 \002(\t\"%\n\023SubstringComparator\022\016\n\006substr" +
        "\030\001 \002(\tB?\n#com.alibaba.wasp.protobuf.gene" +
        "ratedB\020ComparatorProtosH\001\210\001\001\240\001\001"
      };
      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_Comparator_descriptor =
              getDescriptor().getMessageTypes().get(0);
            internal_static_Comparator_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_Comparator_descriptor,
                new java.lang.String[] { "Name", "SerializedComparator", },
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator.class,
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.Comparator.Builder.class);
            internal_static_ByteArrayComparable_descriptor =
              getDescriptor().getMessageTypes().get(1);
            internal_static_ByteArrayComparable_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_ByteArrayComparable_descriptor,
                new java.lang.String[] { "Value", },
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.class,
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.ByteArrayComparable.Builder.class);
            internal_static_BinaryComparator_descriptor =
              getDescriptor().getMessageTypes().get(2);
            internal_static_BinaryComparator_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_BinaryComparator_descriptor,
                new java.lang.String[] { "Comparable", },
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator.class,
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryComparator.Builder.class);
            internal_static_BinaryPrefixComparator_descriptor =
              getDescriptor().getMessageTypes().get(3);
            internal_static_BinaryPrefixComparator_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_BinaryPrefixComparator_descriptor,
                new java.lang.String[] { "Comparable", },
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator.class,
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.BinaryPrefixComparator.Builder.class);
            internal_static_BitComparator_descriptor =
              getDescriptor().getMessageTypes().get(4);
            internal_static_BitComparator_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_BitComparator_descriptor,
                new java.lang.String[] { "Comparable", "BitwiseOp", },
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.class,
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.BitComparator.Builder.class);
            internal_static_NullComparator_descriptor =
              getDescriptor().getMessageTypes().get(5);
            internal_static_NullComparator_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_NullComparator_descriptor,
                new java.lang.String[] { },
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator.class,
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.NullComparator.Builder.class);
            internal_static_RegexStringComparator_descriptor =
              getDescriptor().getMessageTypes().get(6);
            internal_static_RegexStringComparator_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_RegexStringComparator_descriptor,
                new java.lang.String[] { "Pattern", "PatternFlags", "Charset", },
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator.class,
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.RegexStringComparator.Builder.class);
            internal_static_SubstringComparator_descriptor =
              getDescriptor().getMessageTypes().get(7);
            internal_static_SubstringComparator_fieldAccessorTable = new
              com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_SubstringComparator_descriptor,
                new java.lang.String[] { "Substr", },
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator.class,
                com.alibaba.wasp.protobuf.generated.ComparatorProtos.SubstringComparator.Builder.class);
            return null;
          }
        };
      com.google.protobuf.Descriptors.FileDescriptor
        .internalBuildGeneratedFileFrom(descriptorData,
          new com.google.protobuf.Descriptors.FileDescriptor[] {
          }, assigner);
    }
    
    // @@protoc_insertion_point(outer_class_scope)
  }
  