// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: spatial.proto

package Messages;

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

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  public interface ZoneOrBuilder extends
      // @@protoc_insertion_point(interface_extends:Messages.Zone)
      com.google.protobuf.MessageOrBuilder {

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

    /**
     * <code>int32 id = 2;</code>
     * @return The id.
     */
    int getId();

    /**
     * <pre>
     *0:node-group, 1:edge-loop, 2:face-surface, 3:cell-volume
     * </pre>
     *
     * <code>uint32 dimensionality = 3;</code>
     * @return The dimensionality.
     */
    int getDimensionality();

    /**
     * <code>.Messages.Revision revision = 4;</code>
     * @return Whether the revision field is set.
     */
    boolean hasRevision();
    /**
     * <code>.Messages.Revision revision = 4;</code>
     * @return The revision.
     */
    Messages.Vector.Revision getRevision();
    /**
     * <code>.Messages.Revision revision = 4;</code>
     */
    Messages.Vector.RevisionOrBuilder getRevisionOrBuilder();

    /**
     * <pre>
     *optional set of element indices (else, all by this id)
     * </pre>
     *
     * <code>repeated uint32 elements = 5;</code>
     * @return A list containing the elements.
     */
    java.util.List<java.lang.Integer> getElementsList();
    /**
     * <pre>
     *optional set of element indices (else, all by this id)
     * </pre>
     *
     * <code>repeated uint32 elements = 5;</code>
     * @return The count of elements.
     */
    int getElementsCount();
    /**
     * <pre>
     *optional set of element indices (else, all by this id)
     * </pre>
     *
     * <code>repeated uint32 elements = 5;</code>
     * @param index The index of the element to return.
     * @return The elements at the given index.
     */
    int getElements(int index);

    /**
     * <code>uint32 element_count = 6;</code>
     * @return The elementCount.
     */
    int getElementCount();

    /**
     * <code>string comments = 7;</code>
     * @return The comments.
     */
    java.lang.String getComments();
    /**
     * <code>string comments = 7;</code>
     * @return The bytes for comments.
     */
    com.google.protobuf.ByteString
        getCommentsBytes();

    /**
     * <code>string info = 8;</code>
     * @return The info.
     */
    java.lang.String getInfo();
    /**
     * <code>string info = 8;</code>
     * @return The bytes for info.
     */
    com.google.protobuf.ByteString
        getInfoBytes();

    /**
     * <code>string resource_name = 9;</code>
     * @return The resourceName.
     */
    java.lang.String getResourceName();
    /**
     * <code>string resource_name = 9;</code>
     * @return The bytes for resourceName.
     */
    com.google.protobuf.ByteString
        getResourceNameBytes();

    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     * @return Whether the bounds field is set.
     */
    boolean hasBounds();
    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     * @return The bounds.
     */
    Messages.Vector.Extrema getBounds();
    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     */
    Messages.Vector.ExtremaOrBuilder getBoundsOrBuilder();

    /**
     * <pre>
     *in symbol icon's coordinates [0,1]
     * </pre>
     *
     * <code>repeated float terminal_coord = 11;</code>
     * @return A list containing the terminalCoord.
     */
    java.util.List<java.lang.Float> getTerminalCoordList();
    /**
     * <pre>
     *in symbol icon's coordinates [0,1]
     * </pre>
     *
     * <code>repeated float terminal_coord = 11;</code>
     * @return The count of terminalCoord.
     */
    int getTerminalCoordCount();
    /**
     * <pre>
     *in symbol icon's coordinates [0,1]
     * </pre>
     *
     * <code>repeated float terminal_coord = 11;</code>
     * @param index The index of the element to return.
     * @return The terminalCoord at the given index.
     */
    float getTerminalCoord(int index);
  }
  /**
   * Protobuf type {@code Messages.Zone}
   */
  public static final class Zone extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:Messages.Zone)
      ZoneOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Zone.newBuilder() to construct.
    private Zone(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Zone() {
      name_ = "";
      elements_ = emptyIntList();
      comments_ = "";
      info_ = "";
      resourceName_ = "";
      terminalCoord_ = emptyFloatList();
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return Messages.Spatial.internal_static_Messages_Zone_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Messages.Spatial.internal_static_Messages_Zone_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              Messages.Spatial.Zone.class, Messages.Spatial.Zone.Builder.class);
    }

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

    public static final int ID_FIELD_NUMBER = 2;
    private int id_;
    /**
     * <code>int32 id = 2;</code>
     * @return The id.
     */
    @java.lang.Override
    public int getId() {
      return id_;
    }

    public static final int DIMENSIONALITY_FIELD_NUMBER = 3;
    private int dimensionality_;
    /**
     * <pre>
     *0:node-group, 1:edge-loop, 2:face-surface, 3:cell-volume
     * </pre>
     *
     * <code>uint32 dimensionality = 3;</code>
     * @return The dimensionality.
     */
    @java.lang.Override
    public int getDimensionality() {
      return dimensionality_;
    }

    public static final int REVISION_FIELD_NUMBER = 4;
    private Messages.Vector.Revision revision_;
    /**
     * <code>.Messages.Revision revision = 4;</code>
     * @return Whether the revision field is set.
     */
    @java.lang.Override
    public boolean hasRevision() {
      return revision_ != null;
    }
    /**
     * <code>.Messages.Revision revision = 4;</code>
     * @return The revision.
     */
    @java.lang.Override
    public Messages.Vector.Revision getRevision() {
      return revision_ == null ? Messages.Vector.Revision.getDefaultInstance() : revision_;
    }
    /**
     * <code>.Messages.Revision revision = 4;</code>
     */
    @java.lang.Override
    public Messages.Vector.RevisionOrBuilder getRevisionOrBuilder() {
      return getRevision();
    }

    public static final int ELEMENTS_FIELD_NUMBER = 5;
    private com.google.protobuf.Internal.IntList elements_;
    /**
     * <pre>
     *optional set of element indices (else, all by this id)
     * </pre>
     *
     * <code>repeated uint32 elements = 5;</code>
     * @return A list containing the elements.
     */
    @java.lang.Override
    public java.util.List<java.lang.Integer>
        getElementsList() {
      return elements_;
    }
    /**
     * <pre>
     *optional set of element indices (else, all by this id)
     * </pre>
     *
     * <code>repeated uint32 elements = 5;</code>
     * @return The count of elements.
     */
    public int getElementsCount() {
      return elements_.size();
    }
    /**
     * <pre>
     *optional set of element indices (else, all by this id)
     * </pre>
     *
     * <code>repeated uint32 elements = 5;</code>
     * @param index The index of the element to return.
     * @return The elements at the given index.
     */
    public int getElements(int index) {
      return elements_.getInt(index);
    }
    private int elementsMemoizedSerializedSize = -1;

    public static final int ELEMENT_COUNT_FIELD_NUMBER = 6;
    private int elementCount_;
    /**
     * <code>uint32 element_count = 6;</code>
     * @return The elementCount.
     */
    @java.lang.Override
    public int getElementCount() {
      return elementCount_;
    }

    public static final int COMMENTS_FIELD_NUMBER = 7;
    private volatile java.lang.Object comments_;
    /**
     * <code>string comments = 7;</code>
     * @return The comments.
     */
    @java.lang.Override
    public java.lang.String getComments() {
      java.lang.Object ref = comments_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        comments_ = s;
        return s;
      }
    }
    /**
     * <code>string comments = 7;</code>
     * @return The bytes for comments.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getCommentsBytes() {
      java.lang.Object ref = comments_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        comments_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int INFO_FIELD_NUMBER = 8;
    private volatile java.lang.Object info_;
    /**
     * <code>string info = 8;</code>
     * @return The info.
     */
    @java.lang.Override
    public java.lang.String getInfo() {
      java.lang.Object ref = info_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        info_ = s;
        return s;
      }
    }
    /**
     * <code>string info = 8;</code>
     * @return The bytes for info.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getInfoBytes() {
      java.lang.Object ref = info_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        info_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int RESOURCE_NAME_FIELD_NUMBER = 9;
    private volatile java.lang.Object resourceName_;
    /**
     * <code>string resource_name = 9;</code>
     * @return The resourceName.
     */
    @java.lang.Override
    public java.lang.String getResourceName() {
      java.lang.Object ref = resourceName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        resourceName_ = s;
        return s;
      }
    }
    /**
     * <code>string resource_name = 9;</code>
     * @return The bytes for resourceName.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getResourceNameBytes() {
      java.lang.Object ref = resourceName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        resourceName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int BOUNDS_FIELD_NUMBER = 10;
    private Messages.Vector.Extrema bounds_;
    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     * @return Whether the bounds field is set.
     */
    @java.lang.Override
    public boolean hasBounds() {
      return bounds_ != null;
    }
    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     * @return The bounds.
     */
    @java.lang.Override
    public Messages.Vector.Extrema getBounds() {
      return bounds_ == null ? Messages.Vector.Extrema.getDefaultInstance() : bounds_;
    }
    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     */
    @java.lang.Override
    public Messages.Vector.ExtremaOrBuilder getBoundsOrBuilder() {
      return getBounds();
    }

    public static final int TERMINAL_COORD_FIELD_NUMBER = 11;
    private com.google.protobuf.Internal.FloatList terminalCoord_;
    /**
     * <pre>
     *in symbol icon's coordinates [0,1]
     * </pre>
     *
     * <code>repeated float terminal_coord = 11;</code>
     * @return A list containing the terminalCoord.
     */
    @java.lang.Override
    public java.util.List<java.lang.Float>
        getTerminalCoordList() {
      return terminalCoord_;
    }
    /**
     * <pre>
     *in symbol icon's coordinates [0,1]
     * </pre>
     *
     * <code>repeated float terminal_coord = 11;</code>
     * @return The count of terminalCoord.
     */
    public int getTerminalCoordCount() {
      return terminalCoord_.size();
    }
    /**
     * <pre>
     *in symbol icon's coordinates [0,1]
     * </pre>
     *
     * <code>repeated float terminal_coord = 11;</code>
     * @param index The index of the element to return.
     * @return The terminalCoord at the given index.
     */
    public float getTerminalCoord(int index) {
      return terminalCoord_.getFloat(index);
    }
    private int terminalCoordMemoizedSerializedSize = -1;

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      if (id_ != 0) {
        output.writeInt32(2, id_);
      }
      if (dimensionality_ != 0) {
        output.writeUInt32(3, dimensionality_);
      }
      if (revision_ != null) {
        output.writeMessage(4, getRevision());
      }
      if (getElementsList().size() > 0) {
        output.writeUInt32NoTag(42);
        output.writeUInt32NoTag(elementsMemoizedSerializedSize);
      }
      for (int i = 0; i < elements_.size(); i++) {
        output.writeUInt32NoTag(elements_.getInt(i));
      }
      if (elementCount_ != 0) {
        output.writeUInt32(6, elementCount_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(comments_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, comments_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(info_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, info_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(resourceName_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 9, resourceName_);
      }
      if (bounds_ != null) {
        output.writeMessage(10, getBounds());
      }
      if (getTerminalCoordList().size() > 0) {
        output.writeUInt32NoTag(90);
        output.writeUInt32NoTag(terminalCoordMemoizedSerializedSize);
      }
      for (int i = 0; i < terminalCoord_.size(); i++) {
        output.writeFloatNoTag(terminalCoord_.getFloat(i));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      if (id_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, id_);
      }
      if (dimensionality_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, dimensionality_);
      }
      if (revision_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getRevision());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < elements_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(elements_.getInt(i));
        }
        size += dataSize;
        if (!getElementsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        elementsMemoizedSerializedSize = dataSize;
      }
      if (elementCount_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(6, elementCount_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(comments_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, comments_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(info_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, info_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(resourceName_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, resourceName_);
      }
      if (bounds_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, getBounds());
      }
      {
        int dataSize = 0;
        dataSize = 4 * getTerminalCoordList().size();
        size += dataSize;
        if (!getTerminalCoordList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        terminalCoordMemoizedSerializedSize = dataSize;
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof Messages.Spatial.Zone)) {
        return super.equals(obj);
      }
      Messages.Spatial.Zone other = (Messages.Spatial.Zone) obj;

      if (!getName()
          .equals(other.getName())) return false;
      if (getId()
          != other.getId()) return false;
      if (getDimensionality()
          != other.getDimensionality()) return false;
      if (hasRevision() != other.hasRevision()) return false;
      if (hasRevision()) {
        if (!getRevision()
            .equals(other.getRevision())) return false;
      }
      if (!getElementsList()
          .equals(other.getElementsList())) return false;
      if (getElementCount()
          != other.getElementCount()) return false;
      if (!getComments()
          .equals(other.getComments())) return false;
      if (!getInfo()
          .equals(other.getInfo())) return false;
      if (!getResourceName()
          .equals(other.getResourceName())) return false;
      if (hasBounds() != other.hasBounds()) return false;
      if (hasBounds()) {
        if (!getBounds()
            .equals(other.getBounds())) return false;
      }
      if (!getTerminalCoordList()
          .equals(other.getTerminalCoordList())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      hash = (37 * hash) + ID_FIELD_NUMBER;
      hash = (53 * hash) + getId();
      hash = (37 * hash) + DIMENSIONALITY_FIELD_NUMBER;
      hash = (53 * hash) + getDimensionality();
      if (hasRevision()) {
        hash = (37 * hash) + REVISION_FIELD_NUMBER;
        hash = (53 * hash) + getRevision().hashCode();
      }
      if (getElementsCount() > 0) {
        hash = (37 * hash) + ELEMENTS_FIELD_NUMBER;
        hash = (53 * hash) + getElementsList().hashCode();
      }
      hash = (37 * hash) + ELEMENT_COUNT_FIELD_NUMBER;
      hash = (53 * hash) + getElementCount();
      hash = (37 * hash) + COMMENTS_FIELD_NUMBER;
      hash = (53 * hash) + getComments().hashCode();
      hash = (37 * hash) + INFO_FIELD_NUMBER;
      hash = (53 * hash) + getInfo().hashCode();
      hash = (37 * hash) + RESOURCE_NAME_FIELD_NUMBER;
      hash = (53 * hash) + getResourceName().hashCode();
      if (hasBounds()) {
        hash = (37 * hash) + BOUNDS_FIELD_NUMBER;
        hash = (53 * hash) + getBounds().hashCode();
      }
      if (getTerminalCoordCount() > 0) {
        hash = (37 * hash) + TERMINAL_COORD_FIELD_NUMBER;
        hash = (53 * hash) + getTerminalCoordList().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static Messages.Spatial.Zone parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.Spatial.Zone parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.Spatial.Zone parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.Spatial.Zone parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.Spatial.Zone parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.Spatial.Zone parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.Spatial.Zone parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.Spatial.Zone parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static Messages.Spatial.Zone parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static Messages.Spatial.Zone parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static Messages.Spatial.Zone parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.Spatial.Zone parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(Messages.Spatial.Zone prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Messages.Zone}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:Messages.Zone)
        Messages.Spatial.ZoneOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Messages.Spatial.internal_static_Messages_Zone_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Messages.Spatial.internal_static_Messages_Zone_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Messages.Spatial.Zone.class, Messages.Spatial.Zone.Builder.class);
      }

      // Construct using Messages.Spatial.Zone.newBuilder()
      private Builder() {

      }

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

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        name_ = "";

        id_ = 0;

        dimensionality_ = 0;

        if (revisionBuilder_ == null) {
          revision_ = null;
        } else {
          revision_ = null;
          revisionBuilder_ = null;
        }
        elements_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000001);
        elementCount_ = 0;

        comments_ = "";

        info_ = "";

        resourceName_ = "";

        if (boundsBuilder_ == null) {
          bounds_ = null;
        } else {
          bounds_ = null;
          boundsBuilder_ = null;
        }
        terminalCoord_ = emptyFloatList();
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return Messages.Spatial.internal_static_Messages_Zone_descriptor;
      }

      @java.lang.Override
      public Messages.Spatial.Zone getDefaultInstanceForType() {
        return Messages.Spatial.Zone.getDefaultInstance();
      }

      @java.lang.Override
      public Messages.Spatial.Zone build() {
        Messages.Spatial.Zone result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public Messages.Spatial.Zone buildPartial() {
        Messages.Spatial.Zone result = new Messages.Spatial.Zone(this);
        int from_bitField0_ = bitField0_;
        result.name_ = name_;
        result.id_ = id_;
        result.dimensionality_ = dimensionality_;
        if (revisionBuilder_ == null) {
          result.revision_ = revision_;
        } else {
          result.revision_ = revisionBuilder_.build();
        }
        if (((bitField0_ & 0x00000001) != 0)) {
          elements_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.elements_ = elements_;
        result.elementCount_ = elementCount_;
        result.comments_ = comments_;
        result.info_ = info_;
        result.resourceName_ = resourceName_;
        if (boundsBuilder_ == null) {
          result.bounds_ = bounds_;
        } else {
          result.bounds_ = boundsBuilder_.build();
        }
        if (((bitField0_ & 0x00000002) != 0)) {
          terminalCoord_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.terminalCoord_ = terminalCoord_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof Messages.Spatial.Zone) {
          return mergeFrom((Messages.Spatial.Zone)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(Messages.Spatial.Zone other) {
        if (other == Messages.Spatial.Zone.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (other.getId() != 0) {
          setId(other.getId());
        }
        if (other.getDimensionality() != 0) {
          setDimensionality(other.getDimensionality());
        }
        if (other.hasRevision()) {
          mergeRevision(other.getRevision());
        }
        if (!other.elements_.isEmpty()) {
          if (elements_.isEmpty()) {
            elements_ = other.elements_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureElementsIsMutable();
            elements_.addAll(other.elements_);
          }
          onChanged();
        }
        if (other.getElementCount() != 0) {
          setElementCount(other.getElementCount());
        }
        if (!other.getComments().isEmpty()) {
          comments_ = other.comments_;
          onChanged();
        }
        if (!other.getInfo().isEmpty()) {
          info_ = other.info_;
          onChanged();
        }
        if (!other.getResourceName().isEmpty()) {
          resourceName_ = other.resourceName_;
          onChanged();
        }
        if (other.hasBounds()) {
          mergeBounds(other.getBounds());
        }
        if (!other.terminalCoord_.isEmpty()) {
          if (terminalCoord_.isEmpty()) {
            terminalCoord_ = other.terminalCoord_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureTerminalCoordIsMutable();
            terminalCoord_.addAll(other.terminalCoord_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                name_ = input.readStringRequireUtf8();

                break;
              } // case 10
              case 16: {
                id_ = input.readInt32();

                break;
              } // case 16
              case 24: {
                dimensionality_ = input.readUInt32();

                break;
              } // case 24
              case 34: {
                input.readMessage(
                    getRevisionFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 34
              case 40: {
                int v = input.readUInt32();
                ensureElementsIsMutable();
                elements_.addInt(v);
                break;
              } // case 40
              case 42: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureElementsIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  elements_.addInt(input.readUInt32());
                }
                input.popLimit(limit);
                break;
              } // case 42
              case 48: {
                elementCount_ = input.readUInt32();

                break;
              } // case 48
              case 58: {
                comments_ = input.readStringRequireUtf8();

                break;
              } // case 58
              case 66: {
                info_ = input.readStringRequireUtf8();

                break;
              } // case 66
              case 74: {
                resourceName_ = input.readStringRequireUtf8();

                break;
              } // case 74
              case 82: {
                input.readMessage(
                    getBoundsFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 82
              case 93: {
                float v = input.readFloat();
                ensureTerminalCoordIsMutable();
                terminalCoord_.addFloat(v);
                break;
              } // case 93
              case 90: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureTerminalCoordIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  terminalCoord_.addFloat(input.readFloat());
                }
                input.popLimit(limit);
                break;
              } // case 90
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

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

      private int id_ ;
      /**
       * <code>int32 id = 2;</code>
       * @return The id.
       */
      @java.lang.Override
      public int getId() {
        return id_;
      }
      /**
       * <code>int32 id = 2;</code>
       * @param value The id to set.
       * @return This builder for chaining.
       */
      public Builder setId(int value) {
        
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 id = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearId() {
        
        id_ = 0;
        onChanged();
        return this;
      }

      private int dimensionality_ ;
      /**
       * <pre>
       *0:node-group, 1:edge-loop, 2:face-surface, 3:cell-volume
       * </pre>
       *
       * <code>uint32 dimensionality = 3;</code>
       * @return The dimensionality.
       */
      @java.lang.Override
      public int getDimensionality() {
        return dimensionality_;
      }
      /**
       * <pre>
       *0:node-group, 1:edge-loop, 2:face-surface, 3:cell-volume
       * </pre>
       *
       * <code>uint32 dimensionality = 3;</code>
       * @param value The dimensionality to set.
       * @return This builder for chaining.
       */
      public Builder setDimensionality(int value) {
        
        dimensionality_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *0:node-group, 1:edge-loop, 2:face-surface, 3:cell-volume
       * </pre>
       *
       * <code>uint32 dimensionality = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearDimensionality() {
        
        dimensionality_ = 0;
        onChanged();
        return this;
      }

      private Messages.Vector.Revision revision_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Revision, Messages.Vector.Revision.Builder, Messages.Vector.RevisionOrBuilder> revisionBuilder_;
      /**
       * <code>.Messages.Revision revision = 4;</code>
       * @return Whether the revision field is set.
       */
      public boolean hasRevision() {
        return revisionBuilder_ != null || revision_ != null;
      }
      /**
       * <code>.Messages.Revision revision = 4;</code>
       * @return The revision.
       */
      public Messages.Vector.Revision getRevision() {
        if (revisionBuilder_ == null) {
          return revision_ == null ? Messages.Vector.Revision.getDefaultInstance() : revision_;
        } else {
          return revisionBuilder_.getMessage();
        }
      }
      /**
       * <code>.Messages.Revision revision = 4;</code>
       */
      public Builder setRevision(Messages.Vector.Revision value) {
        if (revisionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          revision_ = value;
          onChanged();
        } else {
          revisionBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Revision revision = 4;</code>
       */
      public Builder setRevision(
          Messages.Vector.Revision.Builder builderForValue) {
        if (revisionBuilder_ == null) {
          revision_ = builderForValue.build();
          onChanged();
        } else {
          revisionBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.Messages.Revision revision = 4;</code>
       */
      public Builder mergeRevision(Messages.Vector.Revision value) {
        if (revisionBuilder_ == null) {
          if (revision_ != null) {
            revision_ =
              Messages.Vector.Revision.newBuilder(revision_).mergeFrom(value).buildPartial();
          } else {
            revision_ = value;
          }
          onChanged();
        } else {
          revisionBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Revision revision = 4;</code>
       */
      public Builder clearRevision() {
        if (revisionBuilder_ == null) {
          revision_ = null;
          onChanged();
        } else {
          revision_ = null;
          revisionBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.Revision revision = 4;</code>
       */
      public Messages.Vector.Revision.Builder getRevisionBuilder() {
        
        onChanged();
        return getRevisionFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.Revision revision = 4;</code>
       */
      public Messages.Vector.RevisionOrBuilder getRevisionOrBuilder() {
        if (revisionBuilder_ != null) {
          return revisionBuilder_.getMessageOrBuilder();
        } else {
          return revision_ == null ?
              Messages.Vector.Revision.getDefaultInstance() : revision_;
        }
      }
      /**
       * <code>.Messages.Revision revision = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Revision, Messages.Vector.Revision.Builder, Messages.Vector.RevisionOrBuilder> 
          getRevisionFieldBuilder() {
        if (revisionBuilder_ == null) {
          revisionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.Vector.Revision, Messages.Vector.Revision.Builder, Messages.Vector.RevisionOrBuilder>(
                  getRevision(),
                  getParentForChildren(),
                  isClean());
          revision_ = null;
        }
        return revisionBuilder_;
      }

      private com.google.protobuf.Internal.IntList elements_ = emptyIntList();
      private void ensureElementsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          elements_ = mutableCopy(elements_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       *optional set of element indices (else, all by this id)
       * </pre>
       *
       * <code>repeated uint32 elements = 5;</code>
       * @return A list containing the elements.
       */
      public java.util.List<java.lang.Integer>
          getElementsList() {
        return ((bitField0_ & 0x00000001) != 0) ?
                 java.util.Collections.unmodifiableList(elements_) : elements_;
      }
      /**
       * <pre>
       *optional set of element indices (else, all by this id)
       * </pre>
       *
       * <code>repeated uint32 elements = 5;</code>
       * @return The count of elements.
       */
      public int getElementsCount() {
        return elements_.size();
      }
      /**
       * <pre>
       *optional set of element indices (else, all by this id)
       * </pre>
       *
       * <code>repeated uint32 elements = 5;</code>
       * @param index The index of the element to return.
       * @return The elements at the given index.
       */
      public int getElements(int index) {
        return elements_.getInt(index);
      }
      /**
       * <pre>
       *optional set of element indices (else, all by this id)
       * </pre>
       *
       * <code>repeated uint32 elements = 5;</code>
       * @param index The index to set the value at.
       * @param value The elements to set.
       * @return This builder for chaining.
       */
      public Builder setElements(
          int index, int value) {
        ensureElementsIsMutable();
        elements_.setInt(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *optional set of element indices (else, all by this id)
       * </pre>
       *
       * <code>repeated uint32 elements = 5;</code>
       * @param value The elements to add.
       * @return This builder for chaining.
       */
      public Builder addElements(int value) {
        ensureElementsIsMutable();
        elements_.addInt(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *optional set of element indices (else, all by this id)
       * </pre>
       *
       * <code>repeated uint32 elements = 5;</code>
       * @param values The elements to add.
       * @return This builder for chaining.
       */
      public Builder addAllElements(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureElementsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, elements_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *optional set of element indices (else, all by this id)
       * </pre>
       *
       * <code>repeated uint32 elements = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearElements() {
        elements_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }

      private int elementCount_ ;
      /**
       * <code>uint32 element_count = 6;</code>
       * @return The elementCount.
       */
      @java.lang.Override
      public int getElementCount() {
        return elementCount_;
      }
      /**
       * <code>uint32 element_count = 6;</code>
       * @param value The elementCount to set.
       * @return This builder for chaining.
       */
      public Builder setElementCount(int value) {
        
        elementCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint32 element_count = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearElementCount() {
        
        elementCount_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object comments_ = "";
      /**
       * <code>string comments = 7;</code>
       * @return The comments.
       */
      public java.lang.String getComments() {
        java.lang.Object ref = comments_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          comments_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string comments = 7;</code>
       * @return The bytes for comments.
       */
      public com.google.protobuf.ByteString
          getCommentsBytes() {
        java.lang.Object ref = comments_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          comments_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string comments = 7;</code>
       * @param value The comments to set.
       * @return This builder for chaining.
       */
      public Builder setComments(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        comments_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string comments = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearComments() {
        
        comments_ = getDefaultInstance().getComments();
        onChanged();
        return this;
      }
      /**
       * <code>string comments = 7;</code>
       * @param value The bytes for comments to set.
       * @return This builder for chaining.
       */
      public Builder setCommentsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        comments_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object info_ = "";
      /**
       * <code>string info = 8;</code>
       * @return The info.
       */
      public java.lang.String getInfo() {
        java.lang.Object ref = info_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          info_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string info = 8;</code>
       * @return The bytes for info.
       */
      public com.google.protobuf.ByteString
          getInfoBytes() {
        java.lang.Object ref = info_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          info_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string info = 8;</code>
       * @param value The info to set.
       * @return This builder for chaining.
       */
      public Builder setInfo(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        info_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string info = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearInfo() {
        
        info_ = getDefaultInstance().getInfo();
        onChanged();
        return this;
      }
      /**
       * <code>string info = 8;</code>
       * @param value The bytes for info to set.
       * @return This builder for chaining.
       */
      public Builder setInfoBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        info_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object resourceName_ = "";
      /**
       * <code>string resource_name = 9;</code>
       * @return The resourceName.
       */
      public java.lang.String getResourceName() {
        java.lang.Object ref = resourceName_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          resourceName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string resource_name = 9;</code>
       * @return The bytes for resourceName.
       */
      public com.google.protobuf.ByteString
          getResourceNameBytes() {
        java.lang.Object ref = resourceName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          resourceName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string resource_name = 9;</code>
       * @param value The resourceName to set.
       * @return This builder for chaining.
       */
      public Builder setResourceName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        resourceName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string resource_name = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearResourceName() {
        
        resourceName_ = getDefaultInstance().getResourceName();
        onChanged();
        return this;
      }
      /**
       * <code>string resource_name = 9;</code>
       * @param value The bytes for resourceName to set.
       * @return This builder for chaining.
       */
      public Builder setResourceNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        resourceName_ = value;
        onChanged();
        return this;
      }

      private Messages.Vector.Extrema bounds_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Extrema, Messages.Vector.Extrema.Builder, Messages.Vector.ExtremaOrBuilder> boundsBuilder_;
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       * @return Whether the bounds field is set.
       */
      public boolean hasBounds() {
        return boundsBuilder_ != null || bounds_ != null;
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       * @return The bounds.
       */
      public Messages.Vector.Extrema getBounds() {
        if (boundsBuilder_ == null) {
          return bounds_ == null ? Messages.Vector.Extrema.getDefaultInstance() : bounds_;
        } else {
          return boundsBuilder_.getMessage();
        }
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Builder setBounds(Messages.Vector.Extrema value) {
        if (boundsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          bounds_ = value;
          onChanged();
        } else {
          boundsBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Builder setBounds(
          Messages.Vector.Extrema.Builder builderForValue) {
        if (boundsBuilder_ == null) {
          bounds_ = builderForValue.build();
          onChanged();
        } else {
          boundsBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Builder mergeBounds(Messages.Vector.Extrema value) {
        if (boundsBuilder_ == null) {
          if (bounds_ != null) {
            bounds_ =
              Messages.Vector.Extrema.newBuilder(bounds_).mergeFrom(value).buildPartial();
          } else {
            bounds_ = value;
          }
          onChanged();
        } else {
          boundsBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Builder clearBounds() {
        if (boundsBuilder_ == null) {
          bounds_ = null;
          onChanged();
        } else {
          bounds_ = null;
          boundsBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Messages.Vector.Extrema.Builder getBoundsBuilder() {
        
        onChanged();
        return getBoundsFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Messages.Vector.ExtremaOrBuilder getBoundsOrBuilder() {
        if (boundsBuilder_ != null) {
          return boundsBuilder_.getMessageOrBuilder();
        } else {
          return bounds_ == null ?
              Messages.Vector.Extrema.getDefaultInstance() : bounds_;
        }
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Extrema, Messages.Vector.Extrema.Builder, Messages.Vector.ExtremaOrBuilder> 
          getBoundsFieldBuilder() {
        if (boundsBuilder_ == null) {
          boundsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.Vector.Extrema, Messages.Vector.Extrema.Builder, Messages.Vector.ExtremaOrBuilder>(
                  getBounds(),
                  getParentForChildren(),
                  isClean());
          bounds_ = null;
        }
        return boundsBuilder_;
      }

      private com.google.protobuf.Internal.FloatList terminalCoord_ = emptyFloatList();
      private void ensureTerminalCoordIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          terminalCoord_ = mutableCopy(terminalCoord_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <pre>
       *in symbol icon's coordinates [0,1]
       * </pre>
       *
       * <code>repeated float terminal_coord = 11;</code>
       * @return A list containing the terminalCoord.
       */
      public java.util.List<java.lang.Float>
          getTerminalCoordList() {
        return ((bitField0_ & 0x00000002) != 0) ?
                 java.util.Collections.unmodifiableList(terminalCoord_) : terminalCoord_;
      }
      /**
       * <pre>
       *in symbol icon's coordinates [0,1]
       * </pre>
       *
       * <code>repeated float terminal_coord = 11;</code>
       * @return The count of terminalCoord.
       */
      public int getTerminalCoordCount() {
        return terminalCoord_.size();
      }
      /**
       * <pre>
       *in symbol icon's coordinates [0,1]
       * </pre>
       *
       * <code>repeated float terminal_coord = 11;</code>
       * @param index The index of the element to return.
       * @return The terminalCoord at the given index.
       */
      public float getTerminalCoord(int index) {
        return terminalCoord_.getFloat(index);
      }
      /**
       * <pre>
       *in symbol icon's coordinates [0,1]
       * </pre>
       *
       * <code>repeated float terminal_coord = 11;</code>
       * @param index The index to set the value at.
       * @param value The terminalCoord to set.
       * @return This builder for chaining.
       */
      public Builder setTerminalCoord(
          int index, float value) {
        ensureTerminalCoordIsMutable();
        terminalCoord_.setFloat(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *in symbol icon's coordinates [0,1]
       * </pre>
       *
       * <code>repeated float terminal_coord = 11;</code>
       * @param value The terminalCoord to add.
       * @return This builder for chaining.
       */
      public Builder addTerminalCoord(float value) {
        ensureTerminalCoordIsMutable();
        terminalCoord_.addFloat(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *in symbol icon's coordinates [0,1]
       * </pre>
       *
       * <code>repeated float terminal_coord = 11;</code>
       * @param values The terminalCoord to add.
       * @return This builder for chaining.
       */
      public Builder addAllTerminalCoord(
          java.lang.Iterable<? extends java.lang.Float> values) {
        ensureTerminalCoordIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, terminalCoord_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *in symbol icon's coordinates [0,1]
       * </pre>
       *
       * <code>repeated float terminal_coord = 11;</code>
       * @return This builder for chaining.
       */
      public Builder clearTerminalCoord() {
        terminalCoord_ = emptyFloatList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:Messages.Zone)
    }

    // @@protoc_insertion_point(class_scope:Messages.Zone)
    private static final Messages.Spatial.Zone DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new Messages.Spatial.Zone();
    }

    public static Messages.Spatial.Zone getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public Messages.Spatial.Zone getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GridControlOrBuilder extends
      // @@protoc_insertion_point(interface_extends:Messages.GridControl)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>uint32 basis = 1;</code>
     * @return The basis.
     */
    int getBasis();

    /**
     * <code>repeated uint32 size = 2;</code>
     * @return A list containing the size.
     */
    java.util.List<java.lang.Integer> getSizeList();
    /**
     * <code>repeated uint32 size = 2;</code>
     * @return The count of size.
     */
    int getSizeCount();
    /**
     * <code>repeated uint32 size = 2;</code>
     * @param index The index of the element to return.
     * @return The size at the given index.
     */
    int getSize(int index);

    /**
     * <code>repeated double spacing = 3;</code>
     * @return A list containing the spacing.
     */
    java.util.List<java.lang.Double> getSpacingList();
    /**
     * <code>repeated double spacing = 3;</code>
     * @return The count of spacing.
     */
    int getSpacingCount();
    /**
     * <code>repeated double spacing = 3;</code>
     * @param index The index of the element to return.
     * @return The spacing at the given index.
     */
    double getSpacing(int index);

    /**
     * <code>repeated double grading = 4;</code>
     * @return A list containing the grading.
     */
    java.util.List<java.lang.Double> getGradingList();
    /**
     * <code>repeated double grading = 4;</code>
     * @return The count of grading.
     */
    int getGradingCount();
    /**
     * <code>repeated double grading = 4;</code>
     * @param index The index of the element to return.
     * @return The grading at the given index.
     */
    double getGrading(int index);

    /**
     * <pre>
     * 0-7: mm, cm, m, km, in, ft, yd, mi (defined in common/space.h)       
     * </pre>
     *
     * <code>uint32 length_units = 8;</code>
     * @return The lengthUnits.
     */
    int getLengthUnits();

    /**
     * <code>uint64 target_n = 9;</code>
     * @return The targetN.
     */
    long getTargetN();

    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     * @return Whether the bounds field is set.
     */
    boolean hasBounds();
    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     * @return The bounds.
     */
    Messages.Vector.Extrema getBounds();
    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     */
    Messages.Vector.ExtremaOrBuilder getBoundsOrBuilder();

    /**
     * <code>repeated bool symmetries = 11;</code>
     * @return A list containing the symmetries.
     */
    java.util.List<java.lang.Boolean> getSymmetriesList();
    /**
     * <code>repeated bool symmetries = 11;</code>
     * @return The count of symmetries.
     */
    int getSymmetriesCount();
    /**
     * <code>repeated bool symmetries = 11;</code>
     * @param index The index of the element to return.
     * @return The symmetries at the given index.
     */
    boolean getSymmetries(int index);

    /**
     * <code>bool interior = 12;</code>
     * @return The interior.
     */
    boolean getInterior();

    /**
     * <code>bool exterior = 13;</code>
     * @return The exterior.
     */
    boolean getExterior();

    /**
     * <code>bool shell = 14;</code>
     * @return The shell.
     */
    boolean getShell();
  }
  /**
   * Protobuf type {@code Messages.GridControl}
   */
  public static final class GridControl extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:Messages.GridControl)
      GridControlOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GridControl.newBuilder() to construct.
    private GridControl(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private GridControl() {
      size_ = emptyIntList();
      spacing_ = emptyDoubleList();
      grading_ = emptyDoubleList();
      symmetries_ = emptyBooleanList();
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return Messages.Spatial.internal_static_Messages_GridControl_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Messages.Spatial.internal_static_Messages_GridControl_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              Messages.Spatial.GridControl.class, Messages.Spatial.GridControl.Builder.class);
    }

    public static final int BASIS_FIELD_NUMBER = 1;
    private int basis_;
    /**
     * <code>uint32 basis = 1;</code>
     * @return The basis.
     */
    @java.lang.Override
    public int getBasis() {
      return basis_;
    }

    public static final int SIZE_FIELD_NUMBER = 2;
    private com.google.protobuf.Internal.IntList size_;
    /**
     * <code>repeated uint32 size = 2;</code>
     * @return A list containing the size.
     */
    @java.lang.Override
    public java.util.List<java.lang.Integer>
        getSizeList() {
      return size_;
    }
    /**
     * <code>repeated uint32 size = 2;</code>
     * @return The count of size.
     */
    public int getSizeCount() {
      return size_.size();
    }
    /**
     * <code>repeated uint32 size = 2;</code>
     * @param index The index of the element to return.
     * @return The size at the given index.
     */
    public int getSize(int index) {
      return size_.getInt(index);
    }
    private int sizeMemoizedSerializedSize = -1;

    public static final int SPACING_FIELD_NUMBER = 3;
    private com.google.protobuf.Internal.DoubleList spacing_;
    /**
     * <code>repeated double spacing = 3;</code>
     * @return A list containing the spacing.
     */
    @java.lang.Override
    public java.util.List<java.lang.Double>
        getSpacingList() {
      return spacing_;
    }
    /**
     * <code>repeated double spacing = 3;</code>
     * @return The count of spacing.
     */
    public int getSpacingCount() {
      return spacing_.size();
    }
    /**
     * <code>repeated double spacing = 3;</code>
     * @param index The index of the element to return.
     * @return The spacing at the given index.
     */
    public double getSpacing(int index) {
      return spacing_.getDouble(index);
    }
    private int spacingMemoizedSerializedSize = -1;

    public static final int GRADING_FIELD_NUMBER = 4;
    private com.google.protobuf.Internal.DoubleList grading_;
    /**
     * <code>repeated double grading = 4;</code>
     * @return A list containing the grading.
     */
    @java.lang.Override
    public java.util.List<java.lang.Double>
        getGradingList() {
      return grading_;
    }
    /**
     * <code>repeated double grading = 4;</code>
     * @return The count of grading.
     */
    public int getGradingCount() {
      return grading_.size();
    }
    /**
     * <code>repeated double grading = 4;</code>
     * @param index The index of the element to return.
     * @return The grading at the given index.
     */
    public double getGrading(int index) {
      return grading_.getDouble(index);
    }
    private int gradingMemoizedSerializedSize = -1;

    public static final int LENGTH_UNITS_FIELD_NUMBER = 8;
    private int lengthUnits_;
    /**
     * <pre>
     * 0-7: mm, cm, m, km, in, ft, yd, mi (defined in common/space.h)       
     * </pre>
     *
     * <code>uint32 length_units = 8;</code>
     * @return The lengthUnits.
     */
    @java.lang.Override
    public int getLengthUnits() {
      return lengthUnits_;
    }

    public static final int TARGET_N_FIELD_NUMBER = 9;
    private long targetN_;
    /**
     * <code>uint64 target_n = 9;</code>
     * @return The targetN.
     */
    @java.lang.Override
    public long getTargetN() {
      return targetN_;
    }

    public static final int BOUNDS_FIELD_NUMBER = 10;
    private Messages.Vector.Extrema bounds_;
    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     * @return Whether the bounds field is set.
     */
    @java.lang.Override
    public boolean hasBounds() {
      return bounds_ != null;
    }
    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     * @return The bounds.
     */
    @java.lang.Override
    public Messages.Vector.Extrema getBounds() {
      return bounds_ == null ? Messages.Vector.Extrema.getDefaultInstance() : bounds_;
    }
    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     */
    @java.lang.Override
    public Messages.Vector.ExtremaOrBuilder getBoundsOrBuilder() {
      return getBounds();
    }

    public static final int SYMMETRIES_FIELD_NUMBER = 11;
    private com.google.protobuf.Internal.BooleanList symmetries_;
    /**
     * <code>repeated bool symmetries = 11;</code>
     * @return A list containing the symmetries.
     */
    @java.lang.Override
    public java.util.List<java.lang.Boolean>
        getSymmetriesList() {
      return symmetries_;
    }
    /**
     * <code>repeated bool symmetries = 11;</code>
     * @return The count of symmetries.
     */
    public int getSymmetriesCount() {
      return symmetries_.size();
    }
    /**
     * <code>repeated bool symmetries = 11;</code>
     * @param index The index of the element to return.
     * @return The symmetries at the given index.
     */
    public boolean getSymmetries(int index) {
      return symmetries_.getBoolean(index);
    }
    private int symmetriesMemoizedSerializedSize = -1;

    public static final int INTERIOR_FIELD_NUMBER = 12;
    private boolean interior_;
    /**
     * <code>bool interior = 12;</code>
     * @return The interior.
     */
    @java.lang.Override
    public boolean getInterior() {
      return interior_;
    }

    public static final int EXTERIOR_FIELD_NUMBER = 13;
    private boolean exterior_;
    /**
     * <code>bool exterior = 13;</code>
     * @return The exterior.
     */
    @java.lang.Override
    public boolean getExterior() {
      return exterior_;
    }

    public static final int SHELL_FIELD_NUMBER = 14;
    private boolean shell_;
    /**
     * <code>bool shell = 14;</code>
     * @return The shell.
     */
    @java.lang.Override
    public boolean getShell() {
      return shell_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (basis_ != 0) {
        output.writeUInt32(1, basis_);
      }
      if (getSizeList().size() > 0) {
        output.writeUInt32NoTag(18);
        output.writeUInt32NoTag(sizeMemoizedSerializedSize);
      }
      for (int i = 0; i < size_.size(); i++) {
        output.writeUInt32NoTag(size_.getInt(i));
      }
      if (getSpacingList().size() > 0) {
        output.writeUInt32NoTag(26);
        output.writeUInt32NoTag(spacingMemoizedSerializedSize);
      }
      for (int i = 0; i < spacing_.size(); i++) {
        output.writeDoubleNoTag(spacing_.getDouble(i));
      }
      if (getGradingList().size() > 0) {
        output.writeUInt32NoTag(34);
        output.writeUInt32NoTag(gradingMemoizedSerializedSize);
      }
      for (int i = 0; i < grading_.size(); i++) {
        output.writeDoubleNoTag(grading_.getDouble(i));
      }
      if (lengthUnits_ != 0) {
        output.writeUInt32(8, lengthUnits_);
      }
      if (targetN_ != 0L) {
        output.writeUInt64(9, targetN_);
      }
      if (bounds_ != null) {
        output.writeMessage(10, getBounds());
      }
      if (getSymmetriesList().size() > 0) {
        output.writeUInt32NoTag(90);
        output.writeUInt32NoTag(symmetriesMemoizedSerializedSize);
      }
      for (int i = 0; i < symmetries_.size(); i++) {
        output.writeBoolNoTag(symmetries_.getBoolean(i));
      }
      if (interior_ != false) {
        output.writeBool(12, interior_);
      }
      if (exterior_ != false) {
        output.writeBool(13, exterior_);
      }
      if (shell_ != false) {
        output.writeBool(14, shell_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (basis_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, basis_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < size_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(size_.getInt(i));
        }
        size += dataSize;
        if (!getSizeList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        sizeMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        dataSize = 8 * getSpacingList().size();
        size += dataSize;
        if (!getSpacingList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        spacingMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        dataSize = 8 * getGradingList().size();
        size += dataSize;
        if (!getGradingList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        gradingMemoizedSerializedSize = dataSize;
      }
      if (lengthUnits_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(8, lengthUnits_);
      }
      if (targetN_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(9, targetN_);
      }
      if (bounds_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, getBounds());
      }
      {
        int dataSize = 0;
        dataSize = 1 * getSymmetriesList().size();
        size += dataSize;
        if (!getSymmetriesList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        symmetriesMemoizedSerializedSize = dataSize;
      }
      if (interior_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(12, interior_);
      }
      if (exterior_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(13, exterior_);
      }
      if (shell_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(14, shell_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof Messages.Spatial.GridControl)) {
        return super.equals(obj);
      }
      Messages.Spatial.GridControl other = (Messages.Spatial.GridControl) obj;

      if (getBasis()
          != other.getBasis()) return false;
      if (!getSizeList()
          .equals(other.getSizeList())) return false;
      if (!getSpacingList()
          .equals(other.getSpacingList())) return false;
      if (!getGradingList()
          .equals(other.getGradingList())) return false;
      if (getLengthUnits()
          != other.getLengthUnits()) return false;
      if (getTargetN()
          != other.getTargetN()) return false;
      if (hasBounds() != other.hasBounds()) return false;
      if (hasBounds()) {
        if (!getBounds()
            .equals(other.getBounds())) return false;
      }
      if (!getSymmetriesList()
          .equals(other.getSymmetriesList())) return false;
      if (getInterior()
          != other.getInterior()) return false;
      if (getExterior()
          != other.getExterior()) return false;
      if (getShell()
          != other.getShell()) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + BASIS_FIELD_NUMBER;
      hash = (53 * hash) + getBasis();
      if (getSizeCount() > 0) {
        hash = (37 * hash) + SIZE_FIELD_NUMBER;
        hash = (53 * hash) + getSizeList().hashCode();
      }
      if (getSpacingCount() > 0) {
        hash = (37 * hash) + SPACING_FIELD_NUMBER;
        hash = (53 * hash) + getSpacingList().hashCode();
      }
      if (getGradingCount() > 0) {
        hash = (37 * hash) + GRADING_FIELD_NUMBER;
        hash = (53 * hash) + getGradingList().hashCode();
      }
      hash = (37 * hash) + LENGTH_UNITS_FIELD_NUMBER;
      hash = (53 * hash) + getLengthUnits();
      hash = (37 * hash) + TARGET_N_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getTargetN());
      if (hasBounds()) {
        hash = (37 * hash) + BOUNDS_FIELD_NUMBER;
        hash = (53 * hash) + getBounds().hashCode();
      }
      if (getSymmetriesCount() > 0) {
        hash = (37 * hash) + SYMMETRIES_FIELD_NUMBER;
        hash = (53 * hash) + getSymmetriesList().hashCode();
      }
      hash = (37 * hash) + INTERIOR_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getInterior());
      hash = (37 * hash) + EXTERIOR_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getExterior());
      hash = (37 * hash) + SHELL_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getShell());
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static Messages.Spatial.GridControl parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.Spatial.GridControl parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.Spatial.GridControl parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.Spatial.GridControl parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.Spatial.GridControl parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.Spatial.GridControl parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.Spatial.GridControl parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.Spatial.GridControl parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static Messages.Spatial.GridControl parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static Messages.Spatial.GridControl parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static Messages.Spatial.GridControl parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.Spatial.GridControl parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(Messages.Spatial.GridControl prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Messages.GridControl}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:Messages.GridControl)
        Messages.Spatial.GridControlOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Messages.Spatial.internal_static_Messages_GridControl_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Messages.Spatial.internal_static_Messages_GridControl_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Messages.Spatial.GridControl.class, Messages.Spatial.GridControl.Builder.class);
      }

      // Construct using Messages.Spatial.GridControl.newBuilder()
      private Builder() {

      }

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

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        basis_ = 0;

        size_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000001);
        spacing_ = emptyDoubleList();
        bitField0_ = (bitField0_ & ~0x00000002);
        grading_ = emptyDoubleList();
        bitField0_ = (bitField0_ & ~0x00000004);
        lengthUnits_ = 0;

        targetN_ = 0L;

        if (boundsBuilder_ == null) {
          bounds_ = null;
        } else {
          bounds_ = null;
          boundsBuilder_ = null;
        }
        symmetries_ = emptyBooleanList();
        bitField0_ = (bitField0_ & ~0x00000008);
        interior_ = false;

        exterior_ = false;

        shell_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return Messages.Spatial.internal_static_Messages_GridControl_descriptor;
      }

      @java.lang.Override
      public Messages.Spatial.GridControl getDefaultInstanceForType() {
        return Messages.Spatial.GridControl.getDefaultInstance();
      }

      @java.lang.Override
      public Messages.Spatial.GridControl build() {
        Messages.Spatial.GridControl result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public Messages.Spatial.GridControl buildPartial() {
        Messages.Spatial.GridControl result = new Messages.Spatial.GridControl(this);
        int from_bitField0_ = bitField0_;
        result.basis_ = basis_;
        if (((bitField0_ & 0x00000001) != 0)) {
          size_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.size_ = size_;
        if (((bitField0_ & 0x00000002) != 0)) {
          spacing_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.spacing_ = spacing_;
        if (((bitField0_ & 0x00000004) != 0)) {
          grading_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.grading_ = grading_;
        result.lengthUnits_ = lengthUnits_;
        result.targetN_ = targetN_;
        if (boundsBuilder_ == null) {
          result.bounds_ = bounds_;
        } else {
          result.bounds_ = boundsBuilder_.build();
        }
        if (((bitField0_ & 0x00000008) != 0)) {
          symmetries_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.symmetries_ = symmetries_;
        result.interior_ = interior_;
        result.exterior_ = exterior_;
        result.shell_ = shell_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof Messages.Spatial.GridControl) {
          return mergeFrom((Messages.Spatial.GridControl)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(Messages.Spatial.GridControl other) {
        if (other == Messages.Spatial.GridControl.getDefaultInstance()) return this;
        if (other.getBasis() != 0) {
          setBasis(other.getBasis());
        }
        if (!other.size_.isEmpty()) {
          if (size_.isEmpty()) {
            size_ = other.size_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureSizeIsMutable();
            size_.addAll(other.size_);
          }
          onChanged();
        }
        if (!other.spacing_.isEmpty()) {
          if (spacing_.isEmpty()) {
            spacing_ = other.spacing_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureSpacingIsMutable();
            spacing_.addAll(other.spacing_);
          }
          onChanged();
        }
        if (!other.grading_.isEmpty()) {
          if (grading_.isEmpty()) {
            grading_ = other.grading_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureGradingIsMutable();
            grading_.addAll(other.grading_);
          }
          onChanged();
        }
        if (other.getLengthUnits() != 0) {
          setLengthUnits(other.getLengthUnits());
        }
        if (other.getTargetN() != 0L) {
          setTargetN(other.getTargetN());
        }
        if (other.hasBounds()) {
          mergeBounds(other.getBounds());
        }
        if (!other.symmetries_.isEmpty()) {
          if (symmetries_.isEmpty()) {
            symmetries_ = other.symmetries_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureSymmetriesIsMutable();
            symmetries_.addAll(other.symmetries_);
          }
          onChanged();
        }
        if (other.getInterior() != false) {
          setInterior(other.getInterior());
        }
        if (other.getExterior() != false) {
          setExterior(other.getExterior());
        }
        if (other.getShell() != false) {
          setShell(other.getShell());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8: {
                basis_ = input.readUInt32();

                break;
              } // case 8
              case 16: {
                int v = input.readUInt32();
                ensureSizeIsMutable();
                size_.addInt(v);
                break;
              } // case 16
              case 18: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureSizeIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  size_.addInt(input.readUInt32());
                }
                input.popLimit(limit);
                break;
              } // case 18
              case 25: {
                double v = input.readDouble();
                ensureSpacingIsMutable();
                spacing_.addDouble(v);
                break;
              } // case 25
              case 26: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureSpacingIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  spacing_.addDouble(input.readDouble());
                }
                input.popLimit(limit);
                break;
              } // case 26
              case 33: {
                double v = input.readDouble();
                ensureGradingIsMutable();
                grading_.addDouble(v);
                break;
              } // case 33
              case 34: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureGradingIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  grading_.addDouble(input.readDouble());
                }
                input.popLimit(limit);
                break;
              } // case 34
              case 64: {
                lengthUnits_ = input.readUInt32();

                break;
              } // case 64
              case 72: {
                targetN_ = input.readUInt64();

                break;
              } // case 72
              case 82: {
                input.readMessage(
                    getBoundsFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 82
              case 88: {
                boolean v = input.readBool();
                ensureSymmetriesIsMutable();
                symmetries_.addBoolean(v);
                break;
              } // case 88
              case 90: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureSymmetriesIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  symmetries_.addBoolean(input.readBool());
                }
                input.popLimit(limit);
                break;
              } // case 90
              case 96: {
                interior_ = input.readBool();

                break;
              } // case 96
              case 104: {
                exterior_ = input.readBool();

                break;
              } // case 104
              case 112: {
                shell_ = input.readBool();

                break;
              } // case 112
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private int basis_ ;
      /**
       * <code>uint32 basis = 1;</code>
       * @return The basis.
       */
      @java.lang.Override
      public int getBasis() {
        return basis_;
      }
      /**
       * <code>uint32 basis = 1;</code>
       * @param value The basis to set.
       * @return This builder for chaining.
       */
      public Builder setBasis(int value) {
        
        basis_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint32 basis = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearBasis() {
        
        basis_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.IntList size_ = emptyIntList();
      private void ensureSizeIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          size_ = mutableCopy(size_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated uint32 size = 2;</code>
       * @return A list containing the size.
       */
      public java.util.List<java.lang.Integer>
          getSizeList() {
        return ((bitField0_ & 0x00000001) != 0) ?
                 java.util.Collections.unmodifiableList(size_) : size_;
      }
      /**
       * <code>repeated uint32 size = 2;</code>
       * @return The count of size.
       */
      public int getSizeCount() {
        return size_.size();
      }
      /**
       * <code>repeated uint32 size = 2;</code>
       * @param index The index of the element to return.
       * @return The size at the given index.
       */
      public int getSize(int index) {
        return size_.getInt(index);
      }
      /**
       * <code>repeated uint32 size = 2;</code>
       * @param index The index to set the value at.
       * @param value The size to set.
       * @return This builder for chaining.
       */
      public Builder setSize(
          int index, int value) {
        ensureSizeIsMutable();
        size_.setInt(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated uint32 size = 2;</code>
       * @param value The size to add.
       * @return This builder for chaining.
       */
      public Builder addSize(int value) {
        ensureSizeIsMutable();
        size_.addInt(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated uint32 size = 2;</code>
       * @param values The size to add.
       * @return This builder for chaining.
       */
      public Builder addAllSize(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureSizeIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, size_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated uint32 size = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearSize() {
        size_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.DoubleList spacing_ = emptyDoubleList();
      private void ensureSpacingIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          spacing_ = mutableCopy(spacing_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated double spacing = 3;</code>
       * @return A list containing the spacing.
       */
      public java.util.List<java.lang.Double>
          getSpacingList() {
        return ((bitField0_ & 0x00000002) != 0) ?
                 java.util.Collections.unmodifiableList(spacing_) : spacing_;
      }
      /**
       * <code>repeated double spacing = 3;</code>
       * @return The count of spacing.
       */
      public int getSpacingCount() {
        return spacing_.size();
      }
      /**
       * <code>repeated double spacing = 3;</code>
       * @param index The index of the element to return.
       * @return The spacing at the given index.
       */
      public double getSpacing(int index) {
        return spacing_.getDouble(index);
      }
      /**
       * <code>repeated double spacing = 3;</code>
       * @param index The index to set the value at.
       * @param value The spacing to set.
       * @return This builder for chaining.
       */
      public Builder setSpacing(
          int index, double value) {
        ensureSpacingIsMutable();
        spacing_.setDouble(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double spacing = 3;</code>
       * @param value The spacing to add.
       * @return This builder for chaining.
       */
      public Builder addSpacing(double value) {
        ensureSpacingIsMutable();
        spacing_.addDouble(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double spacing = 3;</code>
       * @param values The spacing to add.
       * @return This builder for chaining.
       */
      public Builder addAllSpacing(
          java.lang.Iterable<? extends java.lang.Double> values) {
        ensureSpacingIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, spacing_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double spacing = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearSpacing() {
        spacing_ = emptyDoubleList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.DoubleList grading_ = emptyDoubleList();
      private void ensureGradingIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          grading_ = mutableCopy(grading_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated double grading = 4;</code>
       * @return A list containing the grading.
       */
      public java.util.List<java.lang.Double>
          getGradingList() {
        return ((bitField0_ & 0x00000004) != 0) ?
                 java.util.Collections.unmodifiableList(grading_) : grading_;
      }
      /**
       * <code>repeated double grading = 4;</code>
       * @return The count of grading.
       */
      public int getGradingCount() {
        return grading_.size();
      }
      /**
       * <code>repeated double grading = 4;</code>
       * @param index The index of the element to return.
       * @return The grading at the given index.
       */
      public double getGrading(int index) {
        return grading_.getDouble(index);
      }
      /**
       * <code>repeated double grading = 4;</code>
       * @param index The index to set the value at.
       * @param value The grading to set.
       * @return This builder for chaining.
       */
      public Builder setGrading(
          int index, double value) {
        ensureGradingIsMutable();
        grading_.setDouble(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double grading = 4;</code>
       * @param value The grading to add.
       * @return This builder for chaining.
       */
      public Builder addGrading(double value) {
        ensureGradingIsMutable();
        grading_.addDouble(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double grading = 4;</code>
       * @param values The grading to add.
       * @return This builder for chaining.
       */
      public Builder addAllGrading(
          java.lang.Iterable<? extends java.lang.Double> values) {
        ensureGradingIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, grading_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double grading = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearGrading() {
        grading_ = emptyDoubleList();
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }

      private int lengthUnits_ ;
      /**
       * <pre>
       * 0-7: mm, cm, m, km, in, ft, yd, mi (defined in common/space.h)       
       * </pre>
       *
       * <code>uint32 length_units = 8;</code>
       * @return The lengthUnits.
       */
      @java.lang.Override
      public int getLengthUnits() {
        return lengthUnits_;
      }
      /**
       * <pre>
       * 0-7: mm, cm, m, km, in, ft, yd, mi (defined in common/space.h)       
       * </pre>
       *
       * <code>uint32 length_units = 8;</code>
       * @param value The lengthUnits to set.
       * @return This builder for chaining.
       */
      public Builder setLengthUnits(int value) {
        
        lengthUnits_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 0-7: mm, cm, m, km, in, ft, yd, mi (defined in common/space.h)       
       * </pre>
       *
       * <code>uint32 length_units = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearLengthUnits() {
        
        lengthUnits_ = 0;
        onChanged();
        return this;
      }

      private long targetN_ ;
      /**
       * <code>uint64 target_n = 9;</code>
       * @return The targetN.
       */
      @java.lang.Override
      public long getTargetN() {
        return targetN_;
      }
      /**
       * <code>uint64 target_n = 9;</code>
       * @param value The targetN to set.
       * @return This builder for chaining.
       */
      public Builder setTargetN(long value) {
        
        targetN_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint64 target_n = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearTargetN() {
        
        targetN_ = 0L;
        onChanged();
        return this;
      }

      private Messages.Vector.Extrema bounds_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Extrema, Messages.Vector.Extrema.Builder, Messages.Vector.ExtremaOrBuilder> boundsBuilder_;
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       * @return Whether the bounds field is set.
       */
      public boolean hasBounds() {
        return boundsBuilder_ != null || bounds_ != null;
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       * @return The bounds.
       */
      public Messages.Vector.Extrema getBounds() {
        if (boundsBuilder_ == null) {
          return bounds_ == null ? Messages.Vector.Extrema.getDefaultInstance() : bounds_;
        } else {
          return boundsBuilder_.getMessage();
        }
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Builder setBounds(Messages.Vector.Extrema value) {
        if (boundsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          bounds_ = value;
          onChanged();
        } else {
          boundsBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Builder setBounds(
          Messages.Vector.Extrema.Builder builderForValue) {
        if (boundsBuilder_ == null) {
          bounds_ = builderForValue.build();
          onChanged();
        } else {
          boundsBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Builder mergeBounds(Messages.Vector.Extrema value) {
        if (boundsBuilder_ == null) {
          if (bounds_ != null) {
            bounds_ =
              Messages.Vector.Extrema.newBuilder(bounds_).mergeFrom(value).buildPartial();
          } else {
            bounds_ = value;
          }
          onChanged();
        } else {
          boundsBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Builder clearBounds() {
        if (boundsBuilder_ == null) {
          bounds_ = null;
          onChanged();
        } else {
          bounds_ = null;
          boundsBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Messages.Vector.Extrema.Builder getBoundsBuilder() {
        
        onChanged();
        return getBoundsFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Messages.Vector.ExtremaOrBuilder getBoundsOrBuilder() {
        if (boundsBuilder_ != null) {
          return boundsBuilder_.getMessageOrBuilder();
        } else {
          return bounds_ == null ?
              Messages.Vector.Extrema.getDefaultInstance() : bounds_;
        }
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Extrema, Messages.Vector.Extrema.Builder, Messages.Vector.ExtremaOrBuilder> 
          getBoundsFieldBuilder() {
        if (boundsBuilder_ == null) {
          boundsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.Vector.Extrema, Messages.Vector.Extrema.Builder, Messages.Vector.ExtremaOrBuilder>(
                  getBounds(),
                  getParentForChildren(),
                  isClean());
          bounds_ = null;
        }
        return boundsBuilder_;
      }

      private com.google.protobuf.Internal.BooleanList symmetries_ = emptyBooleanList();
      private void ensureSymmetriesIsMutable() {
        if (!((bitField0_ & 0x00000008) != 0)) {
          symmetries_ = mutableCopy(symmetries_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <code>repeated bool symmetries = 11;</code>
       * @return A list containing the symmetries.
       */
      public java.util.List<java.lang.Boolean>
          getSymmetriesList() {
        return ((bitField0_ & 0x00000008) != 0) ?
                 java.util.Collections.unmodifiableList(symmetries_) : symmetries_;
      }
      /**
       * <code>repeated bool symmetries = 11;</code>
       * @return The count of symmetries.
       */
      public int getSymmetriesCount() {
        return symmetries_.size();
      }
      /**
       * <code>repeated bool symmetries = 11;</code>
       * @param index The index of the element to return.
       * @return The symmetries at the given index.
       */
      public boolean getSymmetries(int index) {
        return symmetries_.getBoolean(index);
      }
      /**
       * <code>repeated bool symmetries = 11;</code>
       * @param index The index to set the value at.
       * @param value The symmetries to set.
       * @return This builder for chaining.
       */
      public Builder setSymmetries(
          int index, boolean value) {
        ensureSymmetriesIsMutable();
        symmetries_.setBoolean(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bool symmetries = 11;</code>
       * @param value The symmetries to add.
       * @return This builder for chaining.
       */
      public Builder addSymmetries(boolean value) {
        ensureSymmetriesIsMutable();
        symmetries_.addBoolean(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bool symmetries = 11;</code>
       * @param values The symmetries to add.
       * @return This builder for chaining.
       */
      public Builder addAllSymmetries(
          java.lang.Iterable<? extends java.lang.Boolean> values) {
        ensureSymmetriesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, symmetries_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bool symmetries = 11;</code>
       * @return This builder for chaining.
       */
      public Builder clearSymmetries() {
        symmetries_ = emptyBooleanList();
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }

      private boolean interior_ ;
      /**
       * <code>bool interior = 12;</code>
       * @return The interior.
       */
      @java.lang.Override
      public boolean getInterior() {
        return interior_;
      }
      /**
       * <code>bool interior = 12;</code>
       * @param value The interior to set.
       * @return This builder for chaining.
       */
      public Builder setInterior(boolean value) {
        
        interior_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool interior = 12;</code>
       * @return This builder for chaining.
       */
      public Builder clearInterior() {
        
        interior_ = false;
        onChanged();
        return this;
      }

      private boolean exterior_ ;
      /**
       * <code>bool exterior = 13;</code>
       * @return The exterior.
       */
      @java.lang.Override
      public boolean getExterior() {
        return exterior_;
      }
      /**
       * <code>bool exterior = 13;</code>
       * @param value The exterior to set.
       * @return This builder for chaining.
       */
      public Builder setExterior(boolean value) {
        
        exterior_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool exterior = 13;</code>
       * @return This builder for chaining.
       */
      public Builder clearExterior() {
        
        exterior_ = false;
        onChanged();
        return this;
      }

      private boolean shell_ ;
      /**
       * <code>bool shell = 14;</code>
       * @return The shell.
       */
      @java.lang.Override
      public boolean getShell() {
        return shell_;
      }
      /**
       * <code>bool shell = 14;</code>
       * @param value The shell to set.
       * @return This builder for chaining.
       */
      public Builder setShell(boolean value) {
        
        shell_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool shell = 14;</code>
       * @return This builder for chaining.
       */
      public Builder clearShell() {
        
        shell_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:Messages.GridControl)
    }

    // @@protoc_insertion_point(class_scope:Messages.GridControl)
    private static final Messages.Spatial.GridControl DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new Messages.Spatial.GridControl();
    }

    public static Messages.Spatial.GridControl getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public Messages.Spatial.GridControl getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface MeshControlOrBuilder extends
      // @@protoc_insertion_point(interface_extends:Messages.MeshControl)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>uint64 target_n = 1;</code>
     * @return The targetN.
     */
    long getTargetN();

    /**
     * <code>uint32 max_iterations = 2;</code>
     * @return The maxIterations.
     */
    int getMaxIterations();

    /**
     * <code>double size_ratio = 3;</code>
     * @return The sizeRatio.
     */
    double getSizeRatio();

    /**
     * <code>double size_decay = 4;</code>
     * @return The sizeDecay.
     */
    double getSizeDecay();

    /**
     * <code>double size_exponent = 5;</code>
     * @return The sizeExponent.
     */
    double getSizeExponent();

    /**
     * <code>double curv_ratio = 6;</code>
     * @return The curvRatio.
     */
    double getCurvRatio();

    /**
     * <code>double curv_decay = 7;</code>
     * @return The curvDecay.
     */
    double getCurvDecay();

    /**
     * <code>double curv_exponent = 8;</code>
     * @return The curvExponent.
     */
    double getCurvExponent();

    /**
     * <code>double node_radius = 9;</code>
     * @return The nodeRadius.
     */
    double getNodeRadius();

    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     * @return Whether the bounds field is set.
     */
    boolean hasBounds();
    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     * @return The bounds.
     */
    Messages.Vector.Extrema getBounds();
    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     */
    Messages.Vector.ExtremaOrBuilder getBoundsOrBuilder();

    /**
     * <pre>
     * 0-7: mm, cm, m, km, in, ft, yd, mi (defined in common/space.h)       
     * </pre>
     *
     * <code>uint32 length_units = 11;</code>
     * @return The lengthUnits.
     */
    int getLengthUnits();

    /**
     * <code>bool interior = 12;</code>
     * @return The interior.
     */
    boolean getInterior();

    /**
     * <code>bool exterior = 13;</code>
     * @return The exterior.
     */
    boolean getExterior();

    /**
     * <code>bool shell = 14;</code>
     * @return The shell.
     */
    boolean getShell();

    /**
     * <code>bool equalize = 15;</code>
     * @return The equalize.
     */
    boolean getEqualize();

    /**
     * <code>bool smooth = 16;</code>
     * @return The smooth.
     */
    boolean getSmooth();

    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>bool include_background = 18;</code>
     * @return The includeBackground.
     */
    boolean getIncludeBackground();

    /**
     * <code>bool keep_existing_points = 19;</code>
     * @return The keepExistingPoints.
     */
    boolean getKeepExistingPoints();

    /**
     * <code>bool auto_fit_domain = 20;</code>
     * @return The autoFitDomain.
     */
    boolean getAutoFitDomain();

    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>double boundary_layer_thickness = 23;</code>
     * @return The boundaryLayerThickness.
     */
    double getBoundaryLayerThickness();

    /**
     * <code>repeated bool symmetries = 24;</code>
     * @return A list containing the symmetries.
     */
    java.util.List<java.lang.Boolean> getSymmetriesList();
    /**
     * <code>repeated bool symmetries = 24;</code>
     * @return The count of symmetries.
     */
    int getSymmetriesCount();
    /**
     * <code>repeated bool symmetries = 24;</code>
     * @param index The index of the element to return.
     * @return The symmetries at the given index.
     */
    boolean getSymmetries(int index);

    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>uint64 background_n = 30;</code>
     * @return The backgroundN.
     */
    long getBackgroundN();
  }
  /**
   * Protobuf type {@code Messages.MeshControl}
   */
  public static final class MeshControl extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:Messages.MeshControl)
      MeshControlOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use MeshControl.newBuilder() to construct.
    private MeshControl(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private MeshControl() {
      symmetries_ = emptyBooleanList();
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return Messages.Spatial.internal_static_Messages_MeshControl_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Messages.Spatial.internal_static_Messages_MeshControl_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              Messages.Spatial.MeshControl.class, Messages.Spatial.MeshControl.Builder.class);
    }

    public static final int TARGET_N_FIELD_NUMBER = 1;
    private long targetN_;
    /**
     * <code>uint64 target_n = 1;</code>
     * @return The targetN.
     */
    @java.lang.Override
    public long getTargetN() {
      return targetN_;
    }

    public static final int MAX_ITERATIONS_FIELD_NUMBER = 2;
    private int maxIterations_;
    /**
     * <code>uint32 max_iterations = 2;</code>
     * @return The maxIterations.
     */
    @java.lang.Override
    public int getMaxIterations() {
      return maxIterations_;
    }

    public static final int SIZE_RATIO_FIELD_NUMBER = 3;
    private double sizeRatio_;
    /**
     * <code>double size_ratio = 3;</code>
     * @return The sizeRatio.
     */
    @java.lang.Override
    public double getSizeRatio() {
      return sizeRatio_;
    }

    public static final int SIZE_DECAY_FIELD_NUMBER = 4;
    private double sizeDecay_;
    /**
     * <code>double size_decay = 4;</code>
     * @return The sizeDecay.
     */
    @java.lang.Override
    public double getSizeDecay() {
      return sizeDecay_;
    }

    public static final int SIZE_EXPONENT_FIELD_NUMBER = 5;
    private double sizeExponent_;
    /**
     * <code>double size_exponent = 5;</code>
     * @return The sizeExponent.
     */
    @java.lang.Override
    public double getSizeExponent() {
      return sizeExponent_;
    }

    public static final int CURV_RATIO_FIELD_NUMBER = 6;
    private double curvRatio_;
    /**
     * <code>double curv_ratio = 6;</code>
     * @return The curvRatio.
     */
    @java.lang.Override
    public double getCurvRatio() {
      return curvRatio_;
    }

    public static final int CURV_DECAY_FIELD_NUMBER = 7;
    private double curvDecay_;
    /**
     * <code>double curv_decay = 7;</code>
     * @return The curvDecay.
     */
    @java.lang.Override
    public double getCurvDecay() {
      return curvDecay_;
    }

    public static final int CURV_EXPONENT_FIELD_NUMBER = 8;
    private double curvExponent_;
    /**
     * <code>double curv_exponent = 8;</code>
     * @return The curvExponent.
     */
    @java.lang.Override
    public double getCurvExponent() {
      return curvExponent_;
    }

    public static final int NODE_RADIUS_FIELD_NUMBER = 9;
    private double nodeRadius_;
    /**
     * <code>double node_radius = 9;</code>
     * @return The nodeRadius.
     */
    @java.lang.Override
    public double getNodeRadius() {
      return nodeRadius_;
    }

    public static final int BOUNDS_FIELD_NUMBER = 10;
    private Messages.Vector.Extrema bounds_;
    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     * @return Whether the bounds field is set.
     */
    @java.lang.Override
    public boolean hasBounds() {
      return bounds_ != null;
    }
    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     * @return The bounds.
     */
    @java.lang.Override
    public Messages.Vector.Extrema getBounds() {
      return bounds_ == null ? Messages.Vector.Extrema.getDefaultInstance() : bounds_;
    }
    /**
     * <code>.Messages.Extrema bounds = 10;</code>
     */
    @java.lang.Override
    public Messages.Vector.ExtremaOrBuilder getBoundsOrBuilder() {
      return getBounds();
    }

    public static final int LENGTH_UNITS_FIELD_NUMBER = 11;
    private int lengthUnits_;
    /**
     * <pre>
     * 0-7: mm, cm, m, km, in, ft, yd, mi (defined in common/space.h)       
     * </pre>
     *
     * <code>uint32 length_units = 11;</code>
     * @return The lengthUnits.
     */
    @java.lang.Override
    public int getLengthUnits() {
      return lengthUnits_;
    }

    public static final int INTERIOR_FIELD_NUMBER = 12;
    private boolean interior_;
    /**
     * <code>bool interior = 12;</code>
     * @return The interior.
     */
    @java.lang.Override
    public boolean getInterior() {
      return interior_;
    }

    public static final int EXTERIOR_FIELD_NUMBER = 13;
    private boolean exterior_;
    /**
     * <code>bool exterior = 13;</code>
     * @return The exterior.
     */
    @java.lang.Override
    public boolean getExterior() {
      return exterior_;
    }

    public static final int SHELL_FIELD_NUMBER = 14;
    private boolean shell_;
    /**
     * <code>bool shell = 14;</code>
     * @return The shell.
     */
    @java.lang.Override
    public boolean getShell() {
      return shell_;
    }

    public static final int EQUALIZE_FIELD_NUMBER = 15;
    private boolean equalize_;
    /**
     * <code>bool equalize = 15;</code>
     * @return The equalize.
     */
    @java.lang.Override
    public boolean getEqualize() {
      return equalize_;
    }

    public static final int SMOOTH_FIELD_NUMBER = 16;
    private boolean smooth_;
    /**
     * <code>bool smooth = 16;</code>
     * @return The smooth.
     */
    @java.lang.Override
    public boolean getSmooth() {
      return smooth_;
    }

    public static final int INCLUDE_BACKGROUND_FIELD_NUMBER = 18;
    private boolean includeBackground_;
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>bool include_background = 18;</code>
     * @return The includeBackground.
     */
    @java.lang.Override
    public boolean getIncludeBackground() {
      return includeBackground_;
    }

    public static final int KEEP_EXISTING_POINTS_FIELD_NUMBER = 19;
    private boolean keepExistingPoints_;
    /**
     * <code>bool keep_existing_points = 19;</code>
     * @return The keepExistingPoints.
     */
    @java.lang.Override
    public boolean getKeepExistingPoints() {
      return keepExistingPoints_;
    }

    public static final int AUTO_FIT_DOMAIN_FIELD_NUMBER = 20;
    private boolean autoFitDomain_;
    /**
     * <code>bool auto_fit_domain = 20;</code>
     * @return The autoFitDomain.
     */
    @java.lang.Override
    public boolean getAutoFitDomain() {
      return autoFitDomain_;
    }

    public static final int BOUNDARY_LAYER_THICKNESS_FIELD_NUMBER = 23;
    private double boundaryLayerThickness_;
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>double boundary_layer_thickness = 23;</code>
     * @return The boundaryLayerThickness.
     */
    @java.lang.Override
    public double getBoundaryLayerThickness() {
      return boundaryLayerThickness_;
    }

    public static final int SYMMETRIES_FIELD_NUMBER = 24;
    private com.google.protobuf.Internal.BooleanList symmetries_;
    /**
     * <code>repeated bool symmetries = 24;</code>
     * @return A list containing the symmetries.
     */
    @java.lang.Override
    public java.util.List<java.lang.Boolean>
        getSymmetriesList() {
      return symmetries_;
    }
    /**
     * <code>repeated bool symmetries = 24;</code>
     * @return The count of symmetries.
     */
    public int getSymmetriesCount() {
      return symmetries_.size();
    }
    /**
     * <code>repeated bool symmetries = 24;</code>
     * @param index The index of the element to return.
     * @return The symmetries at the given index.
     */
    public boolean getSymmetries(int index) {
      return symmetries_.getBoolean(index);
    }
    private int symmetriesMemoizedSerializedSize = -1;

    public static final int BACKGROUND_N_FIELD_NUMBER = 30;
    private long backgroundN_;
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>uint64 background_n = 30;</code>
     * @return The backgroundN.
     */
    @java.lang.Override
    public long getBackgroundN() {
      return backgroundN_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (targetN_ != 0L) {
        output.writeUInt64(1, targetN_);
      }
      if (maxIterations_ != 0) {
        output.writeUInt32(2, maxIterations_);
      }
      if (java.lang.Double.doubleToRawLongBits(sizeRatio_) != 0) {
        output.writeDouble(3, sizeRatio_);
      }
      if (java.lang.Double.doubleToRawLongBits(sizeDecay_) != 0) {
        output.writeDouble(4, sizeDecay_);
      }
      if (java.lang.Double.doubleToRawLongBits(sizeExponent_) != 0) {
        output.writeDouble(5, sizeExponent_);
      }
      if (java.lang.Double.doubleToRawLongBits(curvRatio_) != 0) {
        output.writeDouble(6, curvRatio_);
      }
      if (java.lang.Double.doubleToRawLongBits(curvDecay_) != 0) {
        output.writeDouble(7, curvDecay_);
      }
      if (java.lang.Double.doubleToRawLongBits(curvExponent_) != 0) {
        output.writeDouble(8, curvExponent_);
      }
      if (java.lang.Double.doubleToRawLongBits(nodeRadius_) != 0) {
        output.writeDouble(9, nodeRadius_);
      }
      if (bounds_ != null) {
        output.writeMessage(10, getBounds());
      }
      if (lengthUnits_ != 0) {
        output.writeUInt32(11, lengthUnits_);
      }
      if (interior_ != false) {
        output.writeBool(12, interior_);
      }
      if (exterior_ != false) {
        output.writeBool(13, exterior_);
      }
      if (shell_ != false) {
        output.writeBool(14, shell_);
      }
      if (equalize_ != false) {
        output.writeBool(15, equalize_);
      }
      if (smooth_ != false) {
        output.writeBool(16, smooth_);
      }
      if (includeBackground_ != false) {
        output.writeBool(18, includeBackground_);
      }
      if (keepExistingPoints_ != false) {
        output.writeBool(19, keepExistingPoints_);
      }
      if (autoFitDomain_ != false) {
        output.writeBool(20, autoFitDomain_);
      }
      if (java.lang.Double.doubleToRawLongBits(boundaryLayerThickness_) != 0) {
        output.writeDouble(23, boundaryLayerThickness_);
      }
      if (getSymmetriesList().size() > 0) {
        output.writeUInt32NoTag(194);
        output.writeUInt32NoTag(symmetriesMemoizedSerializedSize);
      }
      for (int i = 0; i < symmetries_.size(); i++) {
        output.writeBoolNoTag(symmetries_.getBoolean(i));
      }
      if (backgroundN_ != 0L) {
        output.writeUInt64(30, backgroundN_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (targetN_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(1, targetN_);
      }
      if (maxIterations_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, maxIterations_);
      }
      if (java.lang.Double.doubleToRawLongBits(sizeRatio_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, sizeRatio_);
      }
      if (java.lang.Double.doubleToRawLongBits(sizeDecay_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(4, sizeDecay_);
      }
      if (java.lang.Double.doubleToRawLongBits(sizeExponent_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(5, sizeExponent_);
      }
      if (java.lang.Double.doubleToRawLongBits(curvRatio_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(6, curvRatio_);
      }
      if (java.lang.Double.doubleToRawLongBits(curvDecay_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(7, curvDecay_);
      }
      if (java.lang.Double.doubleToRawLongBits(curvExponent_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(8, curvExponent_);
      }
      if (java.lang.Double.doubleToRawLongBits(nodeRadius_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(9, nodeRadius_);
      }
      if (bounds_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, getBounds());
      }
      if (lengthUnits_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(11, lengthUnits_);
      }
      if (interior_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(12, interior_);
      }
      if (exterior_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(13, exterior_);
      }
      if (shell_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(14, shell_);
      }
      if (equalize_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(15, equalize_);
      }
      if (smooth_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(16, smooth_);
      }
      if (includeBackground_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(18, includeBackground_);
      }
      if (keepExistingPoints_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(19, keepExistingPoints_);
      }
      if (autoFitDomain_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(20, autoFitDomain_);
      }
      if (java.lang.Double.doubleToRawLongBits(boundaryLayerThickness_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(23, boundaryLayerThickness_);
      }
      {
        int dataSize = 0;
        dataSize = 1 * getSymmetriesList().size();
        size += dataSize;
        if (!getSymmetriesList().isEmpty()) {
          size += 2;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        symmetriesMemoizedSerializedSize = dataSize;
      }
      if (backgroundN_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(30, backgroundN_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof Messages.Spatial.MeshControl)) {
        return super.equals(obj);
      }
      Messages.Spatial.MeshControl other = (Messages.Spatial.MeshControl) obj;

      if (getTargetN()
          != other.getTargetN()) return false;
      if (getMaxIterations()
          != other.getMaxIterations()) return false;
      if (java.lang.Double.doubleToLongBits(getSizeRatio())
          != java.lang.Double.doubleToLongBits(
              other.getSizeRatio())) return false;
      if (java.lang.Double.doubleToLongBits(getSizeDecay())
          != java.lang.Double.doubleToLongBits(
              other.getSizeDecay())) return false;
      if (java.lang.Double.doubleToLongBits(getSizeExponent())
          != java.lang.Double.doubleToLongBits(
              other.getSizeExponent())) return false;
      if (java.lang.Double.doubleToLongBits(getCurvRatio())
          != java.lang.Double.doubleToLongBits(
              other.getCurvRatio())) return false;
      if (java.lang.Double.doubleToLongBits(getCurvDecay())
          != java.lang.Double.doubleToLongBits(
              other.getCurvDecay())) return false;
      if (java.lang.Double.doubleToLongBits(getCurvExponent())
          != java.lang.Double.doubleToLongBits(
              other.getCurvExponent())) return false;
      if (java.lang.Double.doubleToLongBits(getNodeRadius())
          != java.lang.Double.doubleToLongBits(
              other.getNodeRadius())) return false;
      if (hasBounds() != other.hasBounds()) return false;
      if (hasBounds()) {
        if (!getBounds()
            .equals(other.getBounds())) return false;
      }
      if (getLengthUnits()
          != other.getLengthUnits()) return false;
      if (getInterior()
          != other.getInterior()) return false;
      if (getExterior()
          != other.getExterior()) return false;
      if (getShell()
          != other.getShell()) return false;
      if (getEqualize()
          != other.getEqualize()) return false;
      if (getSmooth()
          != other.getSmooth()) return false;
      if (getIncludeBackground()
          != other.getIncludeBackground()) return false;
      if (getKeepExistingPoints()
          != other.getKeepExistingPoints()) return false;
      if (getAutoFitDomain()
          != other.getAutoFitDomain()) return false;
      if (java.lang.Double.doubleToLongBits(getBoundaryLayerThickness())
          != java.lang.Double.doubleToLongBits(
              other.getBoundaryLayerThickness())) return false;
      if (!getSymmetriesList()
          .equals(other.getSymmetriesList())) return false;
      if (getBackgroundN()
          != other.getBackgroundN()) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + TARGET_N_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getTargetN());
      hash = (37 * hash) + MAX_ITERATIONS_FIELD_NUMBER;
      hash = (53 * hash) + getMaxIterations();
      hash = (37 * hash) + SIZE_RATIO_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getSizeRatio()));
      hash = (37 * hash) + SIZE_DECAY_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getSizeDecay()));
      hash = (37 * hash) + SIZE_EXPONENT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getSizeExponent()));
      hash = (37 * hash) + CURV_RATIO_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getCurvRatio()));
      hash = (37 * hash) + CURV_DECAY_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getCurvDecay()));
      hash = (37 * hash) + CURV_EXPONENT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getCurvExponent()));
      hash = (37 * hash) + NODE_RADIUS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getNodeRadius()));
      if (hasBounds()) {
        hash = (37 * hash) + BOUNDS_FIELD_NUMBER;
        hash = (53 * hash) + getBounds().hashCode();
      }
      hash = (37 * hash) + LENGTH_UNITS_FIELD_NUMBER;
      hash = (53 * hash) + getLengthUnits();
      hash = (37 * hash) + INTERIOR_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getInterior());
      hash = (37 * hash) + EXTERIOR_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getExterior());
      hash = (37 * hash) + SHELL_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getShell());
      hash = (37 * hash) + EQUALIZE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getEqualize());
      hash = (37 * hash) + SMOOTH_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getSmooth());
      hash = (37 * hash) + INCLUDE_BACKGROUND_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getIncludeBackground());
      hash = (37 * hash) + KEEP_EXISTING_POINTS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getKeepExistingPoints());
      hash = (37 * hash) + AUTO_FIT_DOMAIN_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getAutoFitDomain());
      hash = (37 * hash) + BOUNDARY_LAYER_THICKNESS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          java.lang.Double.doubleToLongBits(getBoundaryLayerThickness()));
      if (getSymmetriesCount() > 0) {
        hash = (37 * hash) + SYMMETRIES_FIELD_NUMBER;
        hash = (53 * hash) + getSymmetriesList().hashCode();
      }
      hash = (37 * hash) + BACKGROUND_N_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getBackgroundN());
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static Messages.Spatial.MeshControl parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.Spatial.MeshControl parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.Spatial.MeshControl parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.Spatial.MeshControl parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.Spatial.MeshControl parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.Spatial.MeshControl parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.Spatial.MeshControl parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.Spatial.MeshControl parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static Messages.Spatial.MeshControl parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static Messages.Spatial.MeshControl parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static Messages.Spatial.MeshControl parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.Spatial.MeshControl parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(Messages.Spatial.MeshControl prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Messages.MeshControl}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:Messages.MeshControl)
        Messages.Spatial.MeshControlOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Messages.Spatial.internal_static_Messages_MeshControl_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Messages.Spatial.internal_static_Messages_MeshControl_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Messages.Spatial.MeshControl.class, Messages.Spatial.MeshControl.Builder.class);
      }

      // Construct using Messages.Spatial.MeshControl.newBuilder()
      private Builder() {

      }

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

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        targetN_ = 0L;

        maxIterations_ = 0;

        sizeRatio_ = 0D;

        sizeDecay_ = 0D;

        sizeExponent_ = 0D;

        curvRatio_ = 0D;

        curvDecay_ = 0D;

        curvExponent_ = 0D;

        nodeRadius_ = 0D;

        if (boundsBuilder_ == null) {
          bounds_ = null;
        } else {
          bounds_ = null;
          boundsBuilder_ = null;
        }
        lengthUnits_ = 0;

        interior_ = false;

        exterior_ = false;

        shell_ = false;

        equalize_ = false;

        smooth_ = false;

        includeBackground_ = false;

        keepExistingPoints_ = false;

        autoFitDomain_ = false;

        boundaryLayerThickness_ = 0D;

        symmetries_ = emptyBooleanList();
        bitField0_ = (bitField0_ & ~0x00000001);
        backgroundN_ = 0L;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return Messages.Spatial.internal_static_Messages_MeshControl_descriptor;
      }

      @java.lang.Override
      public Messages.Spatial.MeshControl getDefaultInstanceForType() {
        return Messages.Spatial.MeshControl.getDefaultInstance();
      }

      @java.lang.Override
      public Messages.Spatial.MeshControl build() {
        Messages.Spatial.MeshControl result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public Messages.Spatial.MeshControl buildPartial() {
        Messages.Spatial.MeshControl result = new Messages.Spatial.MeshControl(this);
        int from_bitField0_ = bitField0_;
        result.targetN_ = targetN_;
        result.maxIterations_ = maxIterations_;
        result.sizeRatio_ = sizeRatio_;
        result.sizeDecay_ = sizeDecay_;
        result.sizeExponent_ = sizeExponent_;
        result.curvRatio_ = curvRatio_;
        result.curvDecay_ = curvDecay_;
        result.curvExponent_ = curvExponent_;
        result.nodeRadius_ = nodeRadius_;
        if (boundsBuilder_ == null) {
          result.bounds_ = bounds_;
        } else {
          result.bounds_ = boundsBuilder_.build();
        }
        result.lengthUnits_ = lengthUnits_;
        result.interior_ = interior_;
        result.exterior_ = exterior_;
        result.shell_ = shell_;
        result.equalize_ = equalize_;
        result.smooth_ = smooth_;
        result.includeBackground_ = includeBackground_;
        result.keepExistingPoints_ = keepExistingPoints_;
        result.autoFitDomain_ = autoFitDomain_;
        result.boundaryLayerThickness_ = boundaryLayerThickness_;
        if (((bitField0_ & 0x00000001) != 0)) {
          symmetries_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.symmetries_ = symmetries_;
        result.backgroundN_ = backgroundN_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof Messages.Spatial.MeshControl) {
          return mergeFrom((Messages.Spatial.MeshControl)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(Messages.Spatial.MeshControl other) {
        if (other == Messages.Spatial.MeshControl.getDefaultInstance()) return this;
        if (other.getTargetN() != 0L) {
          setTargetN(other.getTargetN());
        }
        if (other.getMaxIterations() != 0) {
          setMaxIterations(other.getMaxIterations());
        }
        if (other.getSizeRatio() != 0D) {
          setSizeRatio(other.getSizeRatio());
        }
        if (other.getSizeDecay() != 0D) {
          setSizeDecay(other.getSizeDecay());
        }
        if (other.getSizeExponent() != 0D) {
          setSizeExponent(other.getSizeExponent());
        }
        if (other.getCurvRatio() != 0D) {
          setCurvRatio(other.getCurvRatio());
        }
        if (other.getCurvDecay() != 0D) {
          setCurvDecay(other.getCurvDecay());
        }
        if (other.getCurvExponent() != 0D) {
          setCurvExponent(other.getCurvExponent());
        }
        if (other.getNodeRadius() != 0D) {
          setNodeRadius(other.getNodeRadius());
        }
        if (other.hasBounds()) {
          mergeBounds(other.getBounds());
        }
        if (other.getLengthUnits() != 0) {
          setLengthUnits(other.getLengthUnits());
        }
        if (other.getInterior() != false) {
          setInterior(other.getInterior());
        }
        if (other.getExterior() != false) {
          setExterior(other.getExterior());
        }
        if (other.getShell() != false) {
          setShell(other.getShell());
        }
        if (other.getEqualize() != false) {
          setEqualize(other.getEqualize());
        }
        if (other.getSmooth() != false) {
          setSmooth(other.getSmooth());
        }
        if (other.getIncludeBackground() != false) {
          setIncludeBackground(other.getIncludeBackground());
        }
        if (other.getKeepExistingPoints() != false) {
          setKeepExistingPoints(other.getKeepExistingPoints());
        }
        if (other.getAutoFitDomain() != false) {
          setAutoFitDomain(other.getAutoFitDomain());
        }
        if (other.getBoundaryLayerThickness() != 0D) {
          setBoundaryLayerThickness(other.getBoundaryLayerThickness());
        }
        if (!other.symmetries_.isEmpty()) {
          if (symmetries_.isEmpty()) {
            symmetries_ = other.symmetries_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureSymmetriesIsMutable();
            symmetries_.addAll(other.symmetries_);
          }
          onChanged();
        }
        if (other.getBackgroundN() != 0L) {
          setBackgroundN(other.getBackgroundN());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8: {
                targetN_ = input.readUInt64();

                break;
              } // case 8
              case 16: {
                maxIterations_ = input.readUInt32();

                break;
              } // case 16
              case 25: {
                sizeRatio_ = input.readDouble();

                break;
              } // case 25
              case 33: {
                sizeDecay_ = input.readDouble();

                break;
              } // case 33
              case 41: {
                sizeExponent_ = input.readDouble();

                break;
              } // case 41
              case 49: {
                curvRatio_ = input.readDouble();

                break;
              } // case 49
              case 57: {
                curvDecay_ = input.readDouble();

                break;
              } // case 57
              case 65: {
                curvExponent_ = input.readDouble();

                break;
              } // case 65
              case 73: {
                nodeRadius_ = input.readDouble();

                break;
              } // case 73
              case 82: {
                input.readMessage(
                    getBoundsFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 82
              case 88: {
                lengthUnits_ = input.readUInt32();

                break;
              } // case 88
              case 96: {
                interior_ = input.readBool();

                break;
              } // case 96
              case 104: {
                exterior_ = input.readBool();

                break;
              } // case 104
              case 112: {
                shell_ = input.readBool();

                break;
              } // case 112
              case 120: {
                equalize_ = input.readBool();

                break;
              } // case 120
              case 128: {
                smooth_ = input.readBool();

                break;
              } // case 128
              case 144: {
                includeBackground_ = input.readBool();

                break;
              } // case 144
              case 152: {
                keepExistingPoints_ = input.readBool();

                break;
              } // case 152
              case 160: {
                autoFitDomain_ = input.readBool();

                break;
              } // case 160
              case 185: {
                boundaryLayerThickness_ = input.readDouble();

                break;
              } // case 185
              case 192: {
                boolean v = input.readBool();
                ensureSymmetriesIsMutable();
                symmetries_.addBoolean(v);
                break;
              } // case 192
              case 194: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureSymmetriesIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  symmetries_.addBoolean(input.readBool());
                }
                input.popLimit(limit);
                break;
              } // case 194
              case 240: {
                backgroundN_ = input.readUInt64();

                break;
              } // case 240
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private long targetN_ ;
      /**
       * <code>uint64 target_n = 1;</code>
       * @return The targetN.
       */
      @java.lang.Override
      public long getTargetN() {
        return targetN_;
      }
      /**
       * <code>uint64 target_n = 1;</code>
       * @param value The targetN to set.
       * @return This builder for chaining.
       */
      public Builder setTargetN(long value) {
        
        targetN_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint64 target_n = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearTargetN() {
        
        targetN_ = 0L;
        onChanged();
        return this;
      }

      private int maxIterations_ ;
      /**
       * <code>uint32 max_iterations = 2;</code>
       * @return The maxIterations.
       */
      @java.lang.Override
      public int getMaxIterations() {
        return maxIterations_;
      }
      /**
       * <code>uint32 max_iterations = 2;</code>
       * @param value The maxIterations to set.
       * @return This builder for chaining.
       */
      public Builder setMaxIterations(int value) {
        
        maxIterations_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint32 max_iterations = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearMaxIterations() {
        
        maxIterations_ = 0;
        onChanged();
        return this;
      }

      private double sizeRatio_ ;
      /**
       * <code>double size_ratio = 3;</code>
       * @return The sizeRatio.
       */
      @java.lang.Override
      public double getSizeRatio() {
        return sizeRatio_;
      }
      /**
       * <code>double size_ratio = 3;</code>
       * @param value The sizeRatio to set.
       * @return This builder for chaining.
       */
      public Builder setSizeRatio(double value) {
        
        sizeRatio_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double size_ratio = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearSizeRatio() {
        
        sizeRatio_ = 0D;
        onChanged();
        return this;
      }

      private double sizeDecay_ ;
      /**
       * <code>double size_decay = 4;</code>
       * @return The sizeDecay.
       */
      @java.lang.Override
      public double getSizeDecay() {
        return sizeDecay_;
      }
      /**
       * <code>double size_decay = 4;</code>
       * @param value The sizeDecay to set.
       * @return This builder for chaining.
       */
      public Builder setSizeDecay(double value) {
        
        sizeDecay_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double size_decay = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearSizeDecay() {
        
        sizeDecay_ = 0D;
        onChanged();
        return this;
      }

      private double sizeExponent_ ;
      /**
       * <code>double size_exponent = 5;</code>
       * @return The sizeExponent.
       */
      @java.lang.Override
      public double getSizeExponent() {
        return sizeExponent_;
      }
      /**
       * <code>double size_exponent = 5;</code>
       * @param value The sizeExponent to set.
       * @return This builder for chaining.
       */
      public Builder setSizeExponent(double value) {
        
        sizeExponent_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double size_exponent = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearSizeExponent() {
        
        sizeExponent_ = 0D;
        onChanged();
        return this;
      }

      private double curvRatio_ ;
      /**
       * <code>double curv_ratio = 6;</code>
       * @return The curvRatio.
       */
      @java.lang.Override
      public double getCurvRatio() {
        return curvRatio_;
      }
      /**
       * <code>double curv_ratio = 6;</code>
       * @param value The curvRatio to set.
       * @return This builder for chaining.
       */
      public Builder setCurvRatio(double value) {
        
        curvRatio_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double curv_ratio = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearCurvRatio() {
        
        curvRatio_ = 0D;
        onChanged();
        return this;
      }

      private double curvDecay_ ;
      /**
       * <code>double curv_decay = 7;</code>
       * @return The curvDecay.
       */
      @java.lang.Override
      public double getCurvDecay() {
        return curvDecay_;
      }
      /**
       * <code>double curv_decay = 7;</code>
       * @param value The curvDecay to set.
       * @return This builder for chaining.
       */
      public Builder setCurvDecay(double value) {
        
        curvDecay_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double curv_decay = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearCurvDecay() {
        
        curvDecay_ = 0D;
        onChanged();
        return this;
      }

      private double curvExponent_ ;
      /**
       * <code>double curv_exponent = 8;</code>
       * @return The curvExponent.
       */
      @java.lang.Override
      public double getCurvExponent() {
        return curvExponent_;
      }
      /**
       * <code>double curv_exponent = 8;</code>
       * @param value The curvExponent to set.
       * @return This builder for chaining.
       */
      public Builder setCurvExponent(double value) {
        
        curvExponent_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double curv_exponent = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearCurvExponent() {
        
        curvExponent_ = 0D;
        onChanged();
        return this;
      }

      private double nodeRadius_ ;
      /**
       * <code>double node_radius = 9;</code>
       * @return The nodeRadius.
       */
      @java.lang.Override
      public double getNodeRadius() {
        return nodeRadius_;
      }
      /**
       * <code>double node_radius = 9;</code>
       * @param value The nodeRadius to set.
       * @return This builder for chaining.
       */
      public Builder setNodeRadius(double value) {
        
        nodeRadius_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>double node_radius = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearNodeRadius() {
        
        nodeRadius_ = 0D;
        onChanged();
        return this;
      }

      private Messages.Vector.Extrema bounds_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Extrema, Messages.Vector.Extrema.Builder, Messages.Vector.ExtremaOrBuilder> boundsBuilder_;
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       * @return Whether the bounds field is set.
       */
      public boolean hasBounds() {
        return boundsBuilder_ != null || bounds_ != null;
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       * @return The bounds.
       */
      public Messages.Vector.Extrema getBounds() {
        if (boundsBuilder_ == null) {
          return bounds_ == null ? Messages.Vector.Extrema.getDefaultInstance() : bounds_;
        } else {
          return boundsBuilder_.getMessage();
        }
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Builder setBounds(Messages.Vector.Extrema value) {
        if (boundsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          bounds_ = value;
          onChanged();
        } else {
          boundsBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Builder setBounds(
          Messages.Vector.Extrema.Builder builderForValue) {
        if (boundsBuilder_ == null) {
          bounds_ = builderForValue.build();
          onChanged();
        } else {
          boundsBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Builder mergeBounds(Messages.Vector.Extrema value) {
        if (boundsBuilder_ == null) {
          if (bounds_ != null) {
            bounds_ =
              Messages.Vector.Extrema.newBuilder(bounds_).mergeFrom(value).buildPartial();
          } else {
            bounds_ = value;
          }
          onChanged();
        } else {
          boundsBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Builder clearBounds() {
        if (boundsBuilder_ == null) {
          bounds_ = null;
          onChanged();
        } else {
          bounds_ = null;
          boundsBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Messages.Vector.Extrema.Builder getBoundsBuilder() {
        
        onChanged();
        return getBoundsFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Messages.Vector.ExtremaOrBuilder getBoundsOrBuilder() {
        if (boundsBuilder_ != null) {
          return boundsBuilder_.getMessageOrBuilder();
        } else {
          return bounds_ == null ?
              Messages.Vector.Extrema.getDefaultInstance() : bounds_;
        }
      }
      /**
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Extrema, Messages.Vector.Extrema.Builder, Messages.Vector.ExtremaOrBuilder> 
          getBoundsFieldBuilder() {
        if (boundsBuilder_ == null) {
          boundsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.Vector.Extrema, Messages.Vector.Extrema.Builder, Messages.Vector.ExtremaOrBuilder>(
                  getBounds(),
                  getParentForChildren(),
                  isClean());
          bounds_ = null;
        }
        return boundsBuilder_;
      }

      private int lengthUnits_ ;
      /**
       * <pre>
       * 0-7: mm, cm, m, km, in, ft, yd, mi (defined in common/space.h)       
       * </pre>
       *
       * <code>uint32 length_units = 11;</code>
       * @return The lengthUnits.
       */
      @java.lang.Override
      public int getLengthUnits() {
        return lengthUnits_;
      }
      /**
       * <pre>
       * 0-7: mm, cm, m, km, in, ft, yd, mi (defined in common/space.h)       
       * </pre>
       *
       * <code>uint32 length_units = 11;</code>
       * @param value The lengthUnits to set.
       * @return This builder for chaining.
       */
      public Builder setLengthUnits(int value) {
        
        lengthUnits_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 0-7: mm, cm, m, km, in, ft, yd, mi (defined in common/space.h)       
       * </pre>
       *
       * <code>uint32 length_units = 11;</code>
       * @return This builder for chaining.
       */
      public Builder clearLengthUnits() {
        
        lengthUnits_ = 0;
        onChanged();
        return this;
      }

      private boolean interior_ ;
      /**
       * <code>bool interior = 12;</code>
       * @return The interior.
       */
      @java.lang.Override
      public boolean getInterior() {
        return interior_;
      }
      /**
       * <code>bool interior = 12;</code>
       * @param value The interior to set.
       * @return This builder for chaining.
       */
      public Builder setInterior(boolean value) {
        
        interior_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool interior = 12;</code>
       * @return This builder for chaining.
       */
      public Builder clearInterior() {
        
        interior_ = false;
        onChanged();
        return this;
      }

      private boolean exterior_ ;
      /**
       * <code>bool exterior = 13;</code>
       * @return The exterior.
       */
      @java.lang.Override
      public boolean getExterior() {
        return exterior_;
      }
      /**
       * <code>bool exterior = 13;</code>
       * @param value The exterior to set.
       * @return This builder for chaining.
       */
      public Builder setExterior(boolean value) {
        
        exterior_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool exterior = 13;</code>
       * @return This builder for chaining.
       */
      public Builder clearExterior() {
        
        exterior_ = false;
        onChanged();
        return this;
      }

      private boolean shell_ ;
      /**
       * <code>bool shell = 14;</code>
       * @return The shell.
       */
      @java.lang.Override
      public boolean getShell() {
        return shell_;
      }
      /**
       * <code>bool shell = 14;</code>
       * @param value The shell to set.
       * @return This builder for chaining.
       */
      public Builder setShell(boolean value) {
        
        shell_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool shell = 14;</code>
       * @return This builder for chaining.
       */
      public Builder clearShell() {
        
        shell_ = false;
        onChanged();
        return this;
      }

      private boolean equalize_ ;
      /**
       * <code>bool equalize = 15;</code>
       * @return The equalize.
       */
      @java.lang.Override
      public boolean getEqualize() {
        return equalize_;
      }
      /**
       * <code>bool equalize = 15;</code>
       * @param value The equalize to set.
       * @return This builder for chaining.
       */
      public Builder setEqualize(boolean value) {
        
        equalize_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool equalize = 15;</code>
       * @return This builder for chaining.
       */
      public Builder clearEqualize() {
        
        equalize_ = false;
        onChanged();
        return this;
      }

      private boolean smooth_ ;
      /**
       * <code>bool smooth = 16;</code>
       * @return The smooth.
       */
      @java.lang.Override
      public boolean getSmooth() {
        return smooth_;
      }
      /**
       * <code>bool smooth = 16;</code>
       * @param value The smooth to set.
       * @return This builder for chaining.
       */
      public Builder setSmooth(boolean value) {
        
        smooth_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool smooth = 16;</code>
       * @return This builder for chaining.
       */
      public Builder clearSmooth() {
        
        smooth_ = false;
        onChanged();
        return this;
      }

      private boolean includeBackground_ ;
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>bool include_background = 18;</code>
       * @return The includeBackground.
       */
      @java.lang.Override
      public boolean getIncludeBackground() {
        return includeBackground_;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>bool include_background = 18;</code>
       * @param value The includeBackground to set.
       * @return This builder for chaining.
       */
      public Builder setIncludeBackground(boolean value) {
        
        includeBackground_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>bool include_background = 18;</code>
       * @return This builder for chaining.
       */
      public Builder clearIncludeBackground() {
        
        includeBackground_ = false;
        onChanged();
        return this;
      }

      private boolean keepExistingPoints_ ;
      /**
       * <code>bool keep_existing_points = 19;</code>
       * @return The keepExistingPoints.
       */
      @java.lang.Override
      public boolean getKeepExistingPoints() {
        return keepExistingPoints_;
      }
      /**
       * <code>bool keep_existing_points = 19;</code>
       * @param value The keepExistingPoints to set.
       * @return This builder for chaining.
       */
      public Builder setKeepExistingPoints(boolean value) {
        
        keepExistingPoints_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool keep_existing_points = 19;</code>
       * @return This builder for chaining.
       */
      public Builder clearKeepExistingPoints() {
        
        keepExistingPoints_ = false;
        onChanged();
        return this;
      }

      private boolean autoFitDomain_ ;
      /**
       * <code>bool auto_fit_domain = 20;</code>
       * @return The autoFitDomain.
       */
      @java.lang.Override
      public boolean getAutoFitDomain() {
        return autoFitDomain_;
      }
      /**
       * <code>bool auto_fit_domain = 20;</code>
       * @param value The autoFitDomain to set.
       * @return This builder for chaining.
       */
      public Builder setAutoFitDomain(boolean value) {
        
        autoFitDomain_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool auto_fit_domain = 20;</code>
       * @return This builder for chaining.
       */
      public Builder clearAutoFitDomain() {
        
        autoFitDomain_ = false;
        onChanged();
        return this;
      }

      private double boundaryLayerThickness_ ;
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>double boundary_layer_thickness = 23;</code>
       * @return The boundaryLayerThickness.
       */
      @java.lang.Override
      public double getBoundaryLayerThickness() {
        return boundaryLayerThickness_;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>double boundary_layer_thickness = 23;</code>
       * @param value The boundaryLayerThickness to set.
       * @return This builder for chaining.
       */
      public Builder setBoundaryLayerThickness(double value) {
        
        boundaryLayerThickness_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>double boundary_layer_thickness = 23;</code>
       * @return This builder for chaining.
       */
      public Builder clearBoundaryLayerThickness() {
        
        boundaryLayerThickness_ = 0D;
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.BooleanList symmetries_ = emptyBooleanList();
      private void ensureSymmetriesIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          symmetries_ = mutableCopy(symmetries_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated bool symmetries = 24;</code>
       * @return A list containing the symmetries.
       */
      public java.util.List<java.lang.Boolean>
          getSymmetriesList() {
        return ((bitField0_ & 0x00000001) != 0) ?
                 java.util.Collections.unmodifiableList(symmetries_) : symmetries_;
      }
      /**
       * <code>repeated bool symmetries = 24;</code>
       * @return The count of symmetries.
       */
      public int getSymmetriesCount() {
        return symmetries_.size();
      }
      /**
       * <code>repeated bool symmetries = 24;</code>
       * @param index The index of the element to return.
       * @return The symmetries at the given index.
       */
      public boolean getSymmetries(int index) {
        return symmetries_.getBoolean(index);
      }
      /**
       * <code>repeated bool symmetries = 24;</code>
       * @param index The index to set the value at.
       * @param value The symmetries to set.
       * @return This builder for chaining.
       */
      public Builder setSymmetries(
          int index, boolean value) {
        ensureSymmetriesIsMutable();
        symmetries_.setBoolean(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bool symmetries = 24;</code>
       * @param value The symmetries to add.
       * @return This builder for chaining.
       */
      public Builder addSymmetries(boolean value) {
        ensureSymmetriesIsMutable();
        symmetries_.addBoolean(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bool symmetries = 24;</code>
       * @param values The symmetries to add.
       * @return This builder for chaining.
       */
      public Builder addAllSymmetries(
          java.lang.Iterable<? extends java.lang.Boolean> values) {
        ensureSymmetriesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, symmetries_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bool symmetries = 24;</code>
       * @return This builder for chaining.
       */
      public Builder clearSymmetries() {
        symmetries_ = emptyBooleanList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }

      private long backgroundN_ ;
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>uint64 background_n = 30;</code>
       * @return The backgroundN.
       */
      @java.lang.Override
      public long getBackgroundN() {
        return backgroundN_;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>uint64 background_n = 30;</code>
       * @param value The backgroundN to set.
       * @return This builder for chaining.
       */
      public Builder setBackgroundN(long value) {
        
        backgroundN_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>uint64 background_n = 30;</code>
       * @return This builder for chaining.
       */
      public Builder clearBackgroundN() {
        
        backgroundN_ = 0L;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:Messages.MeshControl)
    }

    // @@protoc_insertion_point(class_scope:Messages.MeshControl)
    private static final Messages.Spatial.MeshControl DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new Messages.Spatial.MeshControl();
    }

    public static Messages.Spatial.MeshControl getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public Messages.Spatial.MeshControl getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface TreeControlOrBuilder extends
      // @@protoc_insertion_point(interface_extends:Messages.TreeControl)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>uint32 min_depth = 1;</code>
     * @return The minDepth.
     */
    int getMinDepth();

    /**
     * <code>uint32 max_depth = 2;</code>
     * @return The maxDepth.
     */
    int getMaxDepth();

    /**
     * <code>uint64 max_size = 3;</code>
     * @return The maxSize.
     */
    long getMaxSize();

    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>uint32 ref_dimensionality = 7;</code>
     * @return The refDimensionality.
     */
    int getRefDimensionality();

    /**
     * <pre>
     * 0-7: mm, cm, m, km, in, ft, yd, mi (defined in common/space.h)       
     * </pre>
     *
     * <code>uint32 length_units = 8;</code>
     * @return The lengthUnits.
     */
    int getLengthUnits();

    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.Extrema bounds = 10;</code>
     * @return Whether the bounds field is set.
     */
    boolean hasBounds();
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.Extrema bounds = 10;</code>
     * @return The bounds.
     */
    Messages.Vector.Extrema getBounds();
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.Extrema bounds = 10;</code>
     */
    Messages.Vector.ExtremaOrBuilder getBoundsOrBuilder();
  }
  /**
   * Protobuf type {@code Messages.TreeControl}
   */
  public static final class TreeControl extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:Messages.TreeControl)
      TreeControlOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use TreeControl.newBuilder() to construct.
    private TreeControl(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private TreeControl() {
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return Messages.Spatial.internal_static_Messages_TreeControl_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Messages.Spatial.internal_static_Messages_TreeControl_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              Messages.Spatial.TreeControl.class, Messages.Spatial.TreeControl.Builder.class);
    }

    public static final int MIN_DEPTH_FIELD_NUMBER = 1;
    private int minDepth_;
    /**
     * <code>uint32 min_depth = 1;</code>
     * @return The minDepth.
     */
    @java.lang.Override
    public int getMinDepth() {
      return minDepth_;
    }

    public static final int MAX_DEPTH_FIELD_NUMBER = 2;
    private int maxDepth_;
    /**
     * <code>uint32 max_depth = 2;</code>
     * @return The maxDepth.
     */
    @java.lang.Override
    public int getMaxDepth() {
      return maxDepth_;
    }

    public static final int MAX_SIZE_FIELD_NUMBER = 3;
    private long maxSize_;
    /**
     * <code>uint64 max_size = 3;</code>
     * @return The maxSize.
     */
    @java.lang.Override
    public long getMaxSize() {
      return maxSize_;
    }

    public static final int REF_DIMENSIONALITY_FIELD_NUMBER = 7;
    private int refDimensionality_;
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>uint32 ref_dimensionality = 7;</code>
     * @return The refDimensionality.
     */
    @java.lang.Override
    public int getRefDimensionality() {
      return refDimensionality_;
    }

    public static final int LENGTH_UNITS_FIELD_NUMBER = 8;
    private int lengthUnits_;
    /**
     * <pre>
     * 0-7: mm, cm, m, km, in, ft, yd, mi (defined in common/space.h)       
     * </pre>
     *
     * <code>uint32 length_units = 8;</code>
     * @return The lengthUnits.
     */
    @java.lang.Override
    public int getLengthUnits() {
      return lengthUnits_;
    }

    public static final int BOUNDS_FIELD_NUMBER = 10;
    private Messages.Vector.Extrema bounds_;
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.Extrema bounds = 10;</code>
     * @return Whether the bounds field is set.
     */
    @java.lang.Override
    public boolean hasBounds() {
      return bounds_ != null;
    }
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.Extrema bounds = 10;</code>
     * @return The bounds.
     */
    @java.lang.Override
    public Messages.Vector.Extrema getBounds() {
      return bounds_ == null ? Messages.Vector.Extrema.getDefaultInstance() : bounds_;
    }
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.Extrema bounds = 10;</code>
     */
    @java.lang.Override
    public Messages.Vector.ExtremaOrBuilder getBoundsOrBuilder() {
      return getBounds();
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (minDepth_ != 0) {
        output.writeUInt32(1, minDepth_);
      }
      if (maxDepth_ != 0) {
        output.writeUInt32(2, maxDepth_);
      }
      if (maxSize_ != 0L) {
        output.writeUInt64(3, maxSize_);
      }
      if (refDimensionality_ != 0) {
        output.writeUInt32(7, refDimensionality_);
      }
      if (lengthUnits_ != 0) {
        output.writeUInt32(8, lengthUnits_);
      }
      if (bounds_ != null) {
        output.writeMessage(10, getBounds());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (minDepth_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, minDepth_);
      }
      if (maxDepth_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, maxDepth_);
      }
      if (maxSize_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(3, maxSize_);
      }
      if (refDimensionality_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(7, refDimensionality_);
      }
      if (lengthUnits_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(8, lengthUnits_);
      }
      if (bounds_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, getBounds());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof Messages.Spatial.TreeControl)) {
        return super.equals(obj);
      }
      Messages.Spatial.TreeControl other = (Messages.Spatial.TreeControl) obj;

      if (getMinDepth()
          != other.getMinDepth()) return false;
      if (getMaxDepth()
          != other.getMaxDepth()) return false;
      if (getMaxSize()
          != other.getMaxSize()) return false;
      if (getRefDimensionality()
          != other.getRefDimensionality()) return false;
      if (getLengthUnits()
          != other.getLengthUnits()) return false;
      if (hasBounds() != other.hasBounds()) return false;
      if (hasBounds()) {
        if (!getBounds()
            .equals(other.getBounds())) return false;
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + MIN_DEPTH_FIELD_NUMBER;
      hash = (53 * hash) + getMinDepth();
      hash = (37 * hash) + MAX_DEPTH_FIELD_NUMBER;
      hash = (53 * hash) + getMaxDepth();
      hash = (37 * hash) + MAX_SIZE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getMaxSize());
      hash = (37 * hash) + REF_DIMENSIONALITY_FIELD_NUMBER;
      hash = (53 * hash) + getRefDimensionality();
      hash = (37 * hash) + LENGTH_UNITS_FIELD_NUMBER;
      hash = (53 * hash) + getLengthUnits();
      if (hasBounds()) {
        hash = (37 * hash) + BOUNDS_FIELD_NUMBER;
        hash = (53 * hash) + getBounds().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static Messages.Spatial.TreeControl parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.Spatial.TreeControl parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.Spatial.TreeControl parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.Spatial.TreeControl parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.Spatial.TreeControl parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.Spatial.TreeControl parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.Spatial.TreeControl parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.Spatial.TreeControl parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static Messages.Spatial.TreeControl parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static Messages.Spatial.TreeControl parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static Messages.Spatial.TreeControl parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.Spatial.TreeControl parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(Messages.Spatial.TreeControl prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Messages.TreeControl}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:Messages.TreeControl)
        Messages.Spatial.TreeControlOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Messages.Spatial.internal_static_Messages_TreeControl_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Messages.Spatial.internal_static_Messages_TreeControl_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Messages.Spatial.TreeControl.class, Messages.Spatial.TreeControl.Builder.class);
      }

      // Construct using Messages.Spatial.TreeControl.newBuilder()
      private Builder() {

      }

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

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        minDepth_ = 0;

        maxDepth_ = 0;

        maxSize_ = 0L;

        refDimensionality_ = 0;

        lengthUnits_ = 0;

        if (boundsBuilder_ == null) {
          bounds_ = null;
        } else {
          bounds_ = null;
          boundsBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return Messages.Spatial.internal_static_Messages_TreeControl_descriptor;
      }

      @java.lang.Override
      public Messages.Spatial.TreeControl getDefaultInstanceForType() {
        return Messages.Spatial.TreeControl.getDefaultInstance();
      }

      @java.lang.Override
      public Messages.Spatial.TreeControl build() {
        Messages.Spatial.TreeControl result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public Messages.Spatial.TreeControl buildPartial() {
        Messages.Spatial.TreeControl result = new Messages.Spatial.TreeControl(this);
        result.minDepth_ = minDepth_;
        result.maxDepth_ = maxDepth_;
        result.maxSize_ = maxSize_;
        result.refDimensionality_ = refDimensionality_;
        result.lengthUnits_ = lengthUnits_;
        if (boundsBuilder_ == null) {
          result.bounds_ = bounds_;
        } else {
          result.bounds_ = boundsBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof Messages.Spatial.TreeControl) {
          return mergeFrom((Messages.Spatial.TreeControl)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(Messages.Spatial.TreeControl other) {
        if (other == Messages.Spatial.TreeControl.getDefaultInstance()) return this;
        if (other.getMinDepth() != 0) {
          setMinDepth(other.getMinDepth());
        }
        if (other.getMaxDepth() != 0) {
          setMaxDepth(other.getMaxDepth());
        }
        if (other.getMaxSize() != 0L) {
          setMaxSize(other.getMaxSize());
        }
        if (other.getRefDimensionality() != 0) {
          setRefDimensionality(other.getRefDimensionality());
        }
        if (other.getLengthUnits() != 0) {
          setLengthUnits(other.getLengthUnits());
        }
        if (other.hasBounds()) {
          mergeBounds(other.getBounds());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8: {
                minDepth_ = input.readUInt32();

                break;
              } // case 8
              case 16: {
                maxDepth_ = input.readUInt32();

                break;
              } // case 16
              case 24: {
                maxSize_ = input.readUInt64();

                break;
              } // case 24
              case 56: {
                refDimensionality_ = input.readUInt32();

                break;
              } // case 56
              case 64: {
                lengthUnits_ = input.readUInt32();

                break;
              } // case 64
              case 82: {
                input.readMessage(
                    getBoundsFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 82
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }

      private int minDepth_ ;
      /**
       * <code>uint32 min_depth = 1;</code>
       * @return The minDepth.
       */
      @java.lang.Override
      public int getMinDepth() {
        return minDepth_;
      }
      /**
       * <code>uint32 min_depth = 1;</code>
       * @param value The minDepth to set.
       * @return This builder for chaining.
       */
      public Builder setMinDepth(int value) {
        
        minDepth_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint32 min_depth = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearMinDepth() {
        
        minDepth_ = 0;
        onChanged();
        return this;
      }

      private int maxDepth_ ;
      /**
       * <code>uint32 max_depth = 2;</code>
       * @return The maxDepth.
       */
      @java.lang.Override
      public int getMaxDepth() {
        return maxDepth_;
      }
      /**
       * <code>uint32 max_depth = 2;</code>
       * @param value The maxDepth to set.
       * @return This builder for chaining.
       */
      public Builder setMaxDepth(int value) {
        
        maxDepth_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint32 max_depth = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearMaxDepth() {
        
        maxDepth_ = 0;
        onChanged();
        return this;
      }

      private long maxSize_ ;
      /**
       * <code>uint64 max_size = 3;</code>
       * @return The maxSize.
       */
      @java.lang.Override
      public long getMaxSize() {
        return maxSize_;
      }
      /**
       * <code>uint64 max_size = 3;</code>
       * @param value The maxSize to set.
       * @return This builder for chaining.
       */
      public Builder setMaxSize(long value) {
        
        maxSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint64 max_size = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearMaxSize() {
        
        maxSize_ = 0L;
        onChanged();
        return this;
      }

      private int refDimensionality_ ;
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>uint32 ref_dimensionality = 7;</code>
       * @return The refDimensionality.
       */
      @java.lang.Override
      public int getRefDimensionality() {
        return refDimensionality_;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>uint32 ref_dimensionality = 7;</code>
       * @param value The refDimensionality to set.
       * @return This builder for chaining.
       */
      public Builder setRefDimensionality(int value) {
        
        refDimensionality_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>uint32 ref_dimensionality = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearRefDimensionality() {
        
        refDimensionality_ = 0;
        onChanged();
        return this;
      }

      private int lengthUnits_ ;
      /**
       * <pre>
       * 0-7: mm, cm, m, km, in, ft, yd, mi (defined in common/space.h)       
       * </pre>
       *
       * <code>uint32 length_units = 8;</code>
       * @return The lengthUnits.
       */
      @java.lang.Override
      public int getLengthUnits() {
        return lengthUnits_;
      }
      /**
       * <pre>
       * 0-7: mm, cm, m, km, in, ft, yd, mi (defined in common/space.h)       
       * </pre>
       *
       * <code>uint32 length_units = 8;</code>
       * @param value The lengthUnits to set.
       * @return This builder for chaining.
       */
      public Builder setLengthUnits(int value) {
        
        lengthUnits_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * 0-7: mm, cm, m, km, in, ft, yd, mi (defined in common/space.h)       
       * </pre>
       *
       * <code>uint32 length_units = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearLengthUnits() {
        
        lengthUnits_ = 0;
        onChanged();
        return this;
      }

      private Messages.Vector.Extrema bounds_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Extrema, Messages.Vector.Extrema.Builder, Messages.Vector.ExtremaOrBuilder> boundsBuilder_;
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Extrema bounds = 10;</code>
       * @return Whether the bounds field is set.
       */
      public boolean hasBounds() {
        return boundsBuilder_ != null || bounds_ != null;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Extrema bounds = 10;</code>
       * @return The bounds.
       */
      public Messages.Vector.Extrema getBounds() {
        if (boundsBuilder_ == null) {
          return bounds_ == null ? Messages.Vector.Extrema.getDefaultInstance() : bounds_;
        } else {
          return boundsBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Builder setBounds(Messages.Vector.Extrema value) {
        if (boundsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          bounds_ = value;
          onChanged();
        } else {
          boundsBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Builder setBounds(
          Messages.Vector.Extrema.Builder builderForValue) {
        if (boundsBuilder_ == null) {
          bounds_ = builderForValue.build();
          onChanged();
        } else {
          boundsBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Builder mergeBounds(Messages.Vector.Extrema value) {
        if (boundsBuilder_ == null) {
          if (bounds_ != null) {
            bounds_ =
              Messages.Vector.Extrema.newBuilder(bounds_).mergeFrom(value).buildPartial();
          } else {
            bounds_ = value;
          }
          onChanged();
        } else {
          boundsBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Builder clearBounds() {
        if (boundsBuilder_ == null) {
          bounds_ = null;
          onChanged();
        } else {
          bounds_ = null;
          boundsBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Messages.Vector.Extrema.Builder getBoundsBuilder() {
        
        onChanged();
        return getBoundsFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      public Messages.Vector.ExtremaOrBuilder getBoundsOrBuilder() {
        if (boundsBuilder_ != null) {
          return boundsBuilder_.getMessageOrBuilder();
        } else {
          return bounds_ == null ?
              Messages.Vector.Extrema.getDefaultInstance() : bounds_;
        }
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Extrema bounds = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Extrema, Messages.Vector.Extrema.Builder, Messages.Vector.ExtremaOrBuilder> 
          getBoundsFieldBuilder() {
        if (boundsBuilder_ == null) {
          boundsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.Vector.Extrema, Messages.Vector.Extrema.Builder, Messages.Vector.ExtremaOrBuilder>(
                  getBounds(),
                  getParentForChildren(),
                  isClean());
          bounds_ = null;
        }
        return boundsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:Messages.TreeControl)
    }

    // @@protoc_insertion_point(class_scope:Messages.TreeControl)
    private static final Messages.Spatial.TreeControl DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new Messages.Spatial.TreeControl();
    }

    public static Messages.Spatial.TreeControl getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public Messages.Spatial.TreeControl getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface TopologyOrBuilder extends
      // @@protoc_insertion_point(interface_extends:Messages.Topology)
      com.google.protobuf.MessageOrBuilder {

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

    /**
     * <code>uint32 type = 2;</code>
     * @return The type.
     */
    int getType();

    /**
     * <code>uint32 ndim = 3;</code>
     * @return The ndim.
     */
    int getNdim();

    /**
     * <code>uint32 basis = 4;</code>
     * @return The basis.
     */
    int getBasis();

    /**
     * <code>string filename = 5;</code>
     * @return The filename.
     */
    java.lang.String getFilename();
    /**
     * <code>string filename = 5;</code>
     * @return The bytes for filename.
     */
    com.google.protobuf.ByteString
        getFilenameBytes();

    /**
     * <code>.Messages.Revision revision = 6;</code>
     * @return Whether the revision field is set.
     */
    boolean hasRevision();
    /**
     * <code>.Messages.Revision revision = 6;</code>
     * @return The revision.
     */
    Messages.Vector.Revision getRevision();
    /**
     * <code>.Messages.Revision revision = 6;</code>
     */
    Messages.Vector.RevisionOrBuilder getRevisionOrBuilder();

    /**
     * <pre>
     * as defined in common/space.hpp: mm=0, cm=1, m=2, km=3, in=4, ft=5, yd=6, mi=7
     * </pre>
     *
     * <code>string info = 7;</code>
     * @return The info.
     */
    java.lang.String getInfo();
    /**
     * <pre>
     * as defined in common/space.hpp: mm=0, cm=1, m=2, km=3, in=4, ft=5, yd=6, mi=7
     * </pre>
     *
     * <code>string info = 7;</code>
     * @return The bytes for info.
     */
    com.google.protobuf.ByteString
        getInfoBytes();

    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.Elements nodes = 10;</code>
     * @return Whether the nodes field is set.
     */
    boolean hasNodes();
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.Elements nodes = 10;</code>
     * @return The nodes.
     */
    Messages.Vector.Elements getNodes();
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.Elements nodes = 10;</code>
     */
    Messages.Vector.ElementsOrBuilder getNodesOrBuilder();

    /**
     * <code>.Messages.Elements edges = 11;</code>
     * @return Whether the edges field is set.
     */
    boolean hasEdges();
    /**
     * <code>.Messages.Elements edges = 11;</code>
     * @return The edges.
     */
    Messages.Vector.Elements getEdges();
    /**
     * <code>.Messages.Elements edges = 11;</code>
     */
    Messages.Vector.ElementsOrBuilder getEdgesOrBuilder();

    /**
     * <code>.Messages.Elements faces = 12;</code>
     * @return Whether the faces field is set.
     */
    boolean hasFaces();
    /**
     * <code>.Messages.Elements faces = 12;</code>
     * @return The faces.
     */
    Messages.Vector.Elements getFaces();
    /**
     * <code>.Messages.Elements faces = 12;</code>
     */
    Messages.Vector.ElementsOrBuilder getFacesOrBuilder();

    /**
     * <code>.Messages.Elements cells = 13;</code>
     * @return Whether the cells field is set.
     */
    boolean hasCells();
    /**
     * <code>.Messages.Elements cells = 13;</code>
     * @return The cells.
     */
    Messages.Vector.Elements getCells();
    /**
     * <code>.Messages.Elements cells = 13;</code>
     */
    Messages.Vector.ElementsOrBuilder getCellsOrBuilder();

    /**
     * <code>.Messages.Record64 data = 15;</code>
     * @return Whether the data field is set.
     */
    boolean hasData();
    /**
     * <code>.Messages.Record64 data = 15;</code>
     * @return The data.
     */
    Messages.Vector.Record64 getData();
    /**
     * <code>.Messages.Record64 data = 15;</code>
     */
    Messages.Vector.Record64OrBuilder getDataOrBuilder();

    /**
     * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
     */
    java.util.List<Messages.Vector.SparseMatrix> 
        getSparseDataList();
    /**
     * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
     */
    Messages.Vector.SparseMatrix getSparseData(int index);
    /**
     * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
     */
    int getSparseDataCount();
    /**
     * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
     */
    java.util.List<? extends Messages.Vector.SparseMatrixOrBuilder> 
        getSparseDataOrBuilderList();
    /**
     * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
     */
    Messages.Vector.SparseMatrixOrBuilder getSparseDataOrBuilder(
        int index);

    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.GridControl grid_control = 20;</code>
     * @return Whether the gridControl field is set.
     */
    boolean hasGridControl();
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.GridControl grid_control = 20;</code>
     * @return The gridControl.
     */
    Messages.Spatial.GridControl getGridControl();
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.GridControl grid_control = 20;</code>
     */
    Messages.Spatial.GridControlOrBuilder getGridControlOrBuilder();

    /**
     * <code>.Messages.MeshControl mesh_control = 21;</code>
     * @return Whether the meshControl field is set.
     */
    boolean hasMeshControl();
    /**
     * <code>.Messages.MeshControl mesh_control = 21;</code>
     * @return The meshControl.
     */
    Messages.Spatial.MeshControl getMeshControl();
    /**
     * <code>.Messages.MeshControl mesh_control = 21;</code>
     */
    Messages.Spatial.MeshControlOrBuilder getMeshControlOrBuilder();

    /**
     * <code>.Messages.TreeControl tree_control = 22;</code>
     * @return Whether the treeControl field is set.
     */
    boolean hasTreeControl();
    /**
     * <code>.Messages.TreeControl tree_control = 22;</code>
     * @return The treeControl.
     */
    Messages.Spatial.TreeControl getTreeControl();
    /**
     * <code>.Messages.TreeControl tree_control = 22;</code>
     */
    Messages.Spatial.TreeControlOrBuilder getTreeControlOrBuilder();
  }
  /**
   * <pre>
   * Note:  message 'Elements' is defined in vector.proto to utilize arena/packed allocation
   * </pre>
   *
   * Protobuf type {@code Messages.Topology}
   */
  public static final class Topology extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:Messages.Topology)
      TopologyOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Topology.newBuilder() to construct.
    private Topology(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Topology() {
      name_ = "";
      filename_ = "";
      info_ = "";
      sparseData_ = java.util.Collections.emptyList();
    }

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

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return Messages.Spatial.internal_static_Messages_Topology_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Messages.Spatial.internal_static_Messages_Topology_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              Messages.Spatial.Topology.class, Messages.Spatial.Topology.Builder.class);
    }

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

    public static final int TYPE_FIELD_NUMBER = 2;
    private int type_;
    /**
     * <code>uint32 type = 2;</code>
     * @return The type.
     */
    @java.lang.Override
    public int getType() {
      return type_;
    }

    public static final int NDIM_FIELD_NUMBER = 3;
    private int ndim_;
    /**
     * <code>uint32 ndim = 3;</code>
     * @return The ndim.
     */
    @java.lang.Override
    public int getNdim() {
      return ndim_;
    }

    public static final int BASIS_FIELD_NUMBER = 4;
    private int basis_;
    /**
     * <code>uint32 basis = 4;</code>
     * @return The basis.
     */
    @java.lang.Override
    public int getBasis() {
      return basis_;
    }

    public static final int FILENAME_FIELD_NUMBER = 5;
    private volatile java.lang.Object filename_;
    /**
     * <code>string filename = 5;</code>
     * @return The filename.
     */
    @java.lang.Override
    public java.lang.String getFilename() {
      java.lang.Object ref = filename_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        filename_ = s;
        return s;
      }
    }
    /**
     * <code>string filename = 5;</code>
     * @return The bytes for filename.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getFilenameBytes() {
      java.lang.Object ref = filename_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        filename_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int REVISION_FIELD_NUMBER = 6;
    private Messages.Vector.Revision revision_;
    /**
     * <code>.Messages.Revision revision = 6;</code>
     * @return Whether the revision field is set.
     */
    @java.lang.Override
    public boolean hasRevision() {
      return revision_ != null;
    }
    /**
     * <code>.Messages.Revision revision = 6;</code>
     * @return The revision.
     */
    @java.lang.Override
    public Messages.Vector.Revision getRevision() {
      return revision_ == null ? Messages.Vector.Revision.getDefaultInstance() : revision_;
    }
    /**
     * <code>.Messages.Revision revision = 6;</code>
     */
    @java.lang.Override
    public Messages.Vector.RevisionOrBuilder getRevisionOrBuilder() {
      return getRevision();
    }

    public static final int INFO_FIELD_NUMBER = 7;
    private volatile java.lang.Object info_;
    /**
     * <pre>
     * as defined in common/space.hpp: mm=0, cm=1, m=2, km=3, in=4, ft=5, yd=6, mi=7
     * </pre>
     *
     * <code>string info = 7;</code>
     * @return The info.
     */
    @java.lang.Override
    public java.lang.String getInfo() {
      java.lang.Object ref = info_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        info_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * as defined in common/space.hpp: mm=0, cm=1, m=2, km=3, in=4, ft=5, yd=6, mi=7
     * </pre>
     *
     * <code>string info = 7;</code>
     * @return The bytes for info.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getInfoBytes() {
      java.lang.Object ref = info_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        info_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int NODES_FIELD_NUMBER = 10;
    private Messages.Vector.Elements nodes_;
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.Elements nodes = 10;</code>
     * @return Whether the nodes field is set.
     */
    @java.lang.Override
    public boolean hasNodes() {
      return nodes_ != null;
    }
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.Elements nodes = 10;</code>
     * @return The nodes.
     */
    @java.lang.Override
    public Messages.Vector.Elements getNodes() {
      return nodes_ == null ? Messages.Vector.Elements.getDefaultInstance() : nodes_;
    }
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.Elements nodes = 10;</code>
     */
    @java.lang.Override
    public Messages.Vector.ElementsOrBuilder getNodesOrBuilder() {
      return getNodes();
    }

    public static final int EDGES_FIELD_NUMBER = 11;
    private Messages.Vector.Elements edges_;
    /**
     * <code>.Messages.Elements edges = 11;</code>
     * @return Whether the edges field is set.
     */
    @java.lang.Override
    public boolean hasEdges() {
      return edges_ != null;
    }
    /**
     * <code>.Messages.Elements edges = 11;</code>
     * @return The edges.
     */
    @java.lang.Override
    public Messages.Vector.Elements getEdges() {
      return edges_ == null ? Messages.Vector.Elements.getDefaultInstance() : edges_;
    }
    /**
     * <code>.Messages.Elements edges = 11;</code>
     */
    @java.lang.Override
    public Messages.Vector.ElementsOrBuilder getEdgesOrBuilder() {
      return getEdges();
    }

    public static final int FACES_FIELD_NUMBER = 12;
    private Messages.Vector.Elements faces_;
    /**
     * <code>.Messages.Elements faces = 12;</code>
     * @return Whether the faces field is set.
     */
    @java.lang.Override
    public boolean hasFaces() {
      return faces_ != null;
    }
    /**
     * <code>.Messages.Elements faces = 12;</code>
     * @return The faces.
     */
    @java.lang.Override
    public Messages.Vector.Elements getFaces() {
      return faces_ == null ? Messages.Vector.Elements.getDefaultInstance() : faces_;
    }
    /**
     * <code>.Messages.Elements faces = 12;</code>
     */
    @java.lang.Override
    public Messages.Vector.ElementsOrBuilder getFacesOrBuilder() {
      return getFaces();
    }

    public static final int CELLS_FIELD_NUMBER = 13;
    private Messages.Vector.Elements cells_;
    /**
     * <code>.Messages.Elements cells = 13;</code>
     * @return Whether the cells field is set.
     */
    @java.lang.Override
    public boolean hasCells() {
      return cells_ != null;
    }
    /**
     * <code>.Messages.Elements cells = 13;</code>
     * @return The cells.
     */
    @java.lang.Override
    public Messages.Vector.Elements getCells() {
      return cells_ == null ? Messages.Vector.Elements.getDefaultInstance() : cells_;
    }
    /**
     * <code>.Messages.Elements cells = 13;</code>
     */
    @java.lang.Override
    public Messages.Vector.ElementsOrBuilder getCellsOrBuilder() {
      return getCells();
    }

    public static final int DATA_FIELD_NUMBER = 15;
    private Messages.Vector.Record64 data_;
    /**
     * <code>.Messages.Record64 data = 15;</code>
     * @return Whether the data field is set.
     */
    @java.lang.Override
    public boolean hasData() {
      return data_ != null;
    }
    /**
     * <code>.Messages.Record64 data = 15;</code>
     * @return The data.
     */
    @java.lang.Override
    public Messages.Vector.Record64 getData() {
      return data_ == null ? Messages.Vector.Record64.getDefaultInstance() : data_;
    }
    /**
     * <code>.Messages.Record64 data = 15;</code>
     */
    @java.lang.Override
    public Messages.Vector.Record64OrBuilder getDataOrBuilder() {
      return getData();
    }

    public static final int SPARSE_DATA_FIELD_NUMBER = 16;
    private java.util.List<Messages.Vector.SparseMatrix> sparseData_;
    /**
     * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
     */
    @java.lang.Override
    public java.util.List<Messages.Vector.SparseMatrix> getSparseDataList() {
      return sparseData_;
    }
    /**
     * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
     */
    @java.lang.Override
    public java.util.List<? extends Messages.Vector.SparseMatrixOrBuilder> 
        getSparseDataOrBuilderList() {
      return sparseData_;
    }
    /**
     * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
     */
    @java.lang.Override
    public int getSparseDataCount() {
      return sparseData_.size();
    }
    /**
     * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
     */
    @java.lang.Override
    public Messages.Vector.SparseMatrix getSparseData(int index) {
      return sparseData_.get(index);
    }
    /**
     * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
     */
    @java.lang.Override
    public Messages.Vector.SparseMatrixOrBuilder getSparseDataOrBuilder(
        int index) {
      return sparseData_.get(index);
    }

    public static final int GRID_CONTROL_FIELD_NUMBER = 20;
    private Messages.Spatial.GridControl gridControl_;
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.GridControl grid_control = 20;</code>
     * @return Whether the gridControl field is set.
     */
    @java.lang.Override
    public boolean hasGridControl() {
      return gridControl_ != null;
    }
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.GridControl grid_control = 20;</code>
     * @return The gridControl.
     */
    @java.lang.Override
    public Messages.Spatial.GridControl getGridControl() {
      return gridControl_ == null ? Messages.Spatial.GridControl.getDefaultInstance() : gridControl_;
    }
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>.Messages.GridControl grid_control = 20;</code>
     */
    @java.lang.Override
    public Messages.Spatial.GridControlOrBuilder getGridControlOrBuilder() {
      return getGridControl();
    }

    public static final int MESH_CONTROL_FIELD_NUMBER = 21;
    private Messages.Spatial.MeshControl meshControl_;
    /**
     * <code>.Messages.MeshControl mesh_control = 21;</code>
     * @return Whether the meshControl field is set.
     */
    @java.lang.Override
    public boolean hasMeshControl() {
      return meshControl_ != null;
    }
    /**
     * <code>.Messages.MeshControl mesh_control = 21;</code>
     * @return The meshControl.
     */
    @java.lang.Override
    public Messages.Spatial.MeshControl getMeshControl() {
      return meshControl_ == null ? Messages.Spatial.MeshControl.getDefaultInstance() : meshControl_;
    }
    /**
     * <code>.Messages.MeshControl mesh_control = 21;</code>
     */
    @java.lang.Override
    public Messages.Spatial.MeshControlOrBuilder getMeshControlOrBuilder() {
      return getMeshControl();
    }

    public static final int TREE_CONTROL_FIELD_NUMBER = 22;
    private Messages.Spatial.TreeControl treeControl_;
    /**
     * <code>.Messages.TreeControl tree_control = 22;</code>
     * @return Whether the treeControl field is set.
     */
    @java.lang.Override
    public boolean hasTreeControl() {
      return treeControl_ != null;
    }
    /**
     * <code>.Messages.TreeControl tree_control = 22;</code>
     * @return The treeControl.
     */
    @java.lang.Override
    public Messages.Spatial.TreeControl getTreeControl() {
      return treeControl_ == null ? Messages.Spatial.TreeControl.getDefaultInstance() : treeControl_;
    }
    /**
     * <code>.Messages.TreeControl tree_control = 22;</code>
     */
    @java.lang.Override
    public Messages.Spatial.TreeControlOrBuilder getTreeControlOrBuilder() {
      return getTreeControl();
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      if (type_ != 0) {
        output.writeUInt32(2, type_);
      }
      if (ndim_ != 0) {
        output.writeUInt32(3, ndim_);
      }
      if (basis_ != 0) {
        output.writeUInt32(4, basis_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filename_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, filename_);
      }
      if (revision_ != null) {
        output.writeMessage(6, getRevision());
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(info_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, info_);
      }
      if (nodes_ != null) {
        output.writeMessage(10, getNodes());
      }
      if (edges_ != null) {
        output.writeMessage(11, getEdges());
      }
      if (faces_ != null) {
        output.writeMessage(12, getFaces());
      }
      if (cells_ != null) {
        output.writeMessage(13, getCells());
      }
      if (data_ != null) {
        output.writeMessage(15, getData());
      }
      for (int i = 0; i < sparseData_.size(); i++) {
        output.writeMessage(16, sparseData_.get(i));
      }
      if (gridControl_ != null) {
        output.writeMessage(20, getGridControl());
      }
      if (meshControl_ != null) {
        output.writeMessage(21, getMeshControl());
      }
      if (treeControl_ != null) {
        output.writeMessage(22, getTreeControl());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      if (type_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, type_);
      }
      if (ndim_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, ndim_);
      }
      if (basis_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, basis_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(filename_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, filename_);
      }
      if (revision_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, getRevision());
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(info_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, info_);
      }
      if (nodes_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, getNodes());
      }
      if (edges_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, getEdges());
      }
      if (faces_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, getFaces());
      }
      if (cells_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(13, getCells());
      }
      if (data_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(15, getData());
      }
      for (int i = 0; i < sparseData_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(16, sparseData_.get(i));
      }
      if (gridControl_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(20, getGridControl());
      }
      if (meshControl_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(21, getMeshControl());
      }
      if (treeControl_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(22, getTreeControl());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof Messages.Spatial.Topology)) {
        return super.equals(obj);
      }
      Messages.Spatial.Topology other = (Messages.Spatial.Topology) obj;

      if (!getName()
          .equals(other.getName())) return false;
      if (getType()
          != other.getType()) return false;
      if (getNdim()
          != other.getNdim()) return false;
      if (getBasis()
          != other.getBasis()) return false;
      if (!getFilename()
          .equals(other.getFilename())) return false;
      if (hasRevision() != other.hasRevision()) return false;
      if (hasRevision()) {
        if (!getRevision()
            .equals(other.getRevision())) return false;
      }
      if (!getInfo()
          .equals(other.getInfo())) return false;
      if (hasNodes() != other.hasNodes()) return false;
      if (hasNodes()) {
        if (!getNodes()
            .equals(other.getNodes())) return false;
      }
      if (hasEdges() != other.hasEdges()) return false;
      if (hasEdges()) {
        if (!getEdges()
            .equals(other.getEdges())) return false;
      }
      if (hasFaces() != other.hasFaces()) return false;
      if (hasFaces()) {
        if (!getFaces()
            .equals(other.getFaces())) return false;
      }
      if (hasCells() != other.hasCells()) return false;
      if (hasCells()) {
        if (!getCells()
            .equals(other.getCells())) return false;
      }
      if (hasData() != other.hasData()) return false;
      if (hasData()) {
        if (!getData()
            .equals(other.getData())) return false;
      }
      if (!getSparseDataList()
          .equals(other.getSparseDataList())) return false;
      if (hasGridControl() != other.hasGridControl()) return false;
      if (hasGridControl()) {
        if (!getGridControl()
            .equals(other.getGridControl())) return false;
      }
      if (hasMeshControl() != other.hasMeshControl()) return false;
      if (hasMeshControl()) {
        if (!getMeshControl()
            .equals(other.getMeshControl())) return false;
      }
      if (hasTreeControl() != other.hasTreeControl()) return false;
      if (hasTreeControl()) {
        if (!getTreeControl()
            .equals(other.getTreeControl())) return false;
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      hash = (37 * hash) + TYPE_FIELD_NUMBER;
      hash = (53 * hash) + getType();
      hash = (37 * hash) + NDIM_FIELD_NUMBER;
      hash = (53 * hash) + getNdim();
      hash = (37 * hash) + BASIS_FIELD_NUMBER;
      hash = (53 * hash) + getBasis();
      hash = (37 * hash) + FILENAME_FIELD_NUMBER;
      hash = (53 * hash) + getFilename().hashCode();
      if (hasRevision()) {
        hash = (37 * hash) + REVISION_FIELD_NUMBER;
        hash = (53 * hash) + getRevision().hashCode();
      }
      hash = (37 * hash) + INFO_FIELD_NUMBER;
      hash = (53 * hash) + getInfo().hashCode();
      if (hasNodes()) {
        hash = (37 * hash) + NODES_FIELD_NUMBER;
        hash = (53 * hash) + getNodes().hashCode();
      }
      if (hasEdges()) {
        hash = (37 * hash) + EDGES_FIELD_NUMBER;
        hash = (53 * hash) + getEdges().hashCode();
      }
      if (hasFaces()) {
        hash = (37 * hash) + FACES_FIELD_NUMBER;
        hash = (53 * hash) + getFaces().hashCode();
      }
      if (hasCells()) {
        hash = (37 * hash) + CELLS_FIELD_NUMBER;
        hash = (53 * hash) + getCells().hashCode();
      }
      if (hasData()) {
        hash = (37 * hash) + DATA_FIELD_NUMBER;
        hash = (53 * hash) + getData().hashCode();
      }
      if (getSparseDataCount() > 0) {
        hash = (37 * hash) + SPARSE_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getSparseDataList().hashCode();
      }
      if (hasGridControl()) {
        hash = (37 * hash) + GRID_CONTROL_FIELD_NUMBER;
        hash = (53 * hash) + getGridControl().hashCode();
      }
      if (hasMeshControl()) {
        hash = (37 * hash) + MESH_CONTROL_FIELD_NUMBER;
        hash = (53 * hash) + getMeshControl().hashCode();
      }
      if (hasTreeControl()) {
        hash = (37 * hash) + TREE_CONTROL_FIELD_NUMBER;
        hash = (53 * hash) + getTreeControl().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static Messages.Spatial.Topology parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.Spatial.Topology parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.Spatial.Topology parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.Spatial.Topology parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.Spatial.Topology parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.Spatial.Topology parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.Spatial.Topology parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.Spatial.Topology parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static Messages.Spatial.Topology parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static Messages.Spatial.Topology parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static Messages.Spatial.Topology parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.Spatial.Topology parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(Messages.Spatial.Topology prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * Note:  message 'Elements' is defined in vector.proto to utilize arena/packed allocation
     * </pre>
     *
     * Protobuf type {@code Messages.Topology}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:Messages.Topology)
        Messages.Spatial.TopologyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Messages.Spatial.internal_static_Messages_Topology_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Messages.Spatial.internal_static_Messages_Topology_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Messages.Spatial.Topology.class, Messages.Spatial.Topology.Builder.class);
      }

      // Construct using Messages.Spatial.Topology.newBuilder()
      private Builder() {

      }

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

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        name_ = "";

        type_ = 0;

        ndim_ = 0;

        basis_ = 0;

        filename_ = "";

        if (revisionBuilder_ == null) {
          revision_ = null;
        } else {
          revision_ = null;
          revisionBuilder_ = null;
        }
        info_ = "";

        if (nodesBuilder_ == null) {
          nodes_ = null;
        } else {
          nodes_ = null;
          nodesBuilder_ = null;
        }
        if (edgesBuilder_ == null) {
          edges_ = null;
        } else {
          edges_ = null;
          edgesBuilder_ = null;
        }
        if (facesBuilder_ == null) {
          faces_ = null;
        } else {
          faces_ = null;
          facesBuilder_ = null;
        }
        if (cellsBuilder_ == null) {
          cells_ = null;
        } else {
          cells_ = null;
          cellsBuilder_ = null;
        }
        if (dataBuilder_ == null) {
          data_ = null;
        } else {
          data_ = null;
          dataBuilder_ = null;
        }
        if (sparseDataBuilder_ == null) {
          sparseData_ = java.util.Collections.emptyList();
        } else {
          sparseData_ = null;
          sparseDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (gridControlBuilder_ == null) {
          gridControl_ = null;
        } else {
          gridControl_ = null;
          gridControlBuilder_ = null;
        }
        if (meshControlBuilder_ == null) {
          meshControl_ = null;
        } else {
          meshControl_ = null;
          meshControlBuilder_ = null;
        }
        if (treeControlBuilder_ == null) {
          treeControl_ = null;
        } else {
          treeControl_ = null;
          treeControlBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return Messages.Spatial.internal_static_Messages_Topology_descriptor;
      }

      @java.lang.Override
      public Messages.Spatial.Topology getDefaultInstanceForType() {
        return Messages.Spatial.Topology.getDefaultInstance();
      }

      @java.lang.Override
      public Messages.Spatial.Topology build() {
        Messages.Spatial.Topology result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public Messages.Spatial.Topology buildPartial() {
        Messages.Spatial.Topology result = new Messages.Spatial.Topology(this);
        int from_bitField0_ = bitField0_;
        result.name_ = name_;
        result.type_ = type_;
        result.ndim_ = ndim_;
        result.basis_ = basis_;
        result.filename_ = filename_;
        if (revisionBuilder_ == null) {
          result.revision_ = revision_;
        } else {
          result.revision_ = revisionBuilder_.build();
        }
        result.info_ = info_;
        if (nodesBuilder_ == null) {
          result.nodes_ = nodes_;
        } else {
          result.nodes_ = nodesBuilder_.build();
        }
        if (edgesBuilder_ == null) {
          result.edges_ = edges_;
        } else {
          result.edges_ = edgesBuilder_.build();
        }
        if (facesBuilder_ == null) {
          result.faces_ = faces_;
        } else {
          result.faces_ = facesBuilder_.build();
        }
        if (cellsBuilder_ == null) {
          result.cells_ = cells_;
        } else {
          result.cells_ = cellsBuilder_.build();
        }
        if (dataBuilder_ == null) {
          result.data_ = data_;
        } else {
          result.data_ = dataBuilder_.build();
        }
        if (sparseDataBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            sparseData_ = java.util.Collections.unmodifiableList(sparseData_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.sparseData_ = sparseData_;
        } else {
          result.sparseData_ = sparseDataBuilder_.build();
        }
        if (gridControlBuilder_ == null) {
          result.gridControl_ = gridControl_;
        } else {
          result.gridControl_ = gridControlBuilder_.build();
        }
        if (meshControlBuilder_ == null) {
          result.meshControl_ = meshControl_;
        } else {
          result.meshControl_ = meshControlBuilder_.build();
        }
        if (treeControlBuilder_ == null) {
          result.treeControl_ = treeControl_;
        } else {
          result.treeControl_ = treeControlBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof Messages.Spatial.Topology) {
          return mergeFrom((Messages.Spatial.Topology)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(Messages.Spatial.Topology other) {
        if (other == Messages.Spatial.Topology.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (other.getType() != 0) {
          setType(other.getType());
        }
        if (other.getNdim() != 0) {
          setNdim(other.getNdim());
        }
        if (other.getBasis() != 0) {
          setBasis(other.getBasis());
        }
        if (!other.getFilename().isEmpty()) {
          filename_ = other.filename_;
          onChanged();
        }
        if (other.hasRevision()) {
          mergeRevision(other.getRevision());
        }
        if (!other.getInfo().isEmpty()) {
          info_ = other.info_;
          onChanged();
        }
        if (other.hasNodes()) {
          mergeNodes(other.getNodes());
        }
        if (other.hasEdges()) {
          mergeEdges(other.getEdges());
        }
        if (other.hasFaces()) {
          mergeFaces(other.getFaces());
        }
        if (other.hasCells()) {
          mergeCells(other.getCells());
        }
        if (other.hasData()) {
          mergeData(other.getData());
        }
        if (sparseDataBuilder_ == null) {
          if (!other.sparseData_.isEmpty()) {
            if (sparseData_.isEmpty()) {
              sparseData_ = other.sparseData_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureSparseDataIsMutable();
              sparseData_.addAll(other.sparseData_);
            }
            onChanged();
          }
        } else {
          if (!other.sparseData_.isEmpty()) {
            if (sparseDataBuilder_.isEmpty()) {
              sparseDataBuilder_.dispose();
              sparseDataBuilder_ = null;
              sparseData_ = other.sparseData_;
              bitField0_ = (bitField0_ & ~0x00000001);
              sparseDataBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getSparseDataFieldBuilder() : null;
            } else {
              sparseDataBuilder_.addAllMessages(other.sparseData_);
            }
          }
        }
        if (other.hasGridControl()) {
          mergeGridControl(other.getGridControl());
        }
        if (other.hasMeshControl()) {
          mergeMeshControl(other.getMeshControl());
        }
        if (other.hasTreeControl()) {
          mergeTreeControl(other.getTreeControl());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

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

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                name_ = input.readStringRequireUtf8();

                break;
              } // case 10
              case 16: {
                type_ = input.readUInt32();

                break;
              } // case 16
              case 24: {
                ndim_ = input.readUInt32();

                break;
              } // case 24
              case 32: {
                basis_ = input.readUInt32();

                break;
              } // case 32
              case 42: {
                filename_ = input.readStringRequireUtf8();

                break;
              } // case 42
              case 50: {
                input.readMessage(
                    getRevisionFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 50
              case 58: {
                info_ = input.readStringRequireUtf8();

                break;
              } // case 58
              case 82: {
                input.readMessage(
                    getNodesFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 82
              case 90: {
                input.readMessage(
                    getEdgesFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 90
              case 98: {
                input.readMessage(
                    getFacesFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 98
              case 106: {
                input.readMessage(
                    getCellsFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 106
              case 122: {
                input.readMessage(
                    getDataFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 122
              case 130: {
                Messages.Vector.SparseMatrix m =
                    input.readMessage(
                        Messages.Vector.SparseMatrix.parser(),
                        extensionRegistry);
                if (sparseDataBuilder_ == null) {
                  ensureSparseDataIsMutable();
                  sparseData_.add(m);
                } else {
                  sparseDataBuilder_.addMessage(m);
                }
                break;
              } // case 130
              case 162: {
                input.readMessage(
                    getGridControlFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 162
              case 170: {
                input.readMessage(
                    getMeshControlFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 170
              case 178: {
                input.readMessage(
                    getTreeControlFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 178
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

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

      private int type_ ;
      /**
       * <code>uint32 type = 2;</code>
       * @return The type.
       */
      @java.lang.Override
      public int getType() {
        return type_;
      }
      /**
       * <code>uint32 type = 2;</code>
       * @param value The type to set.
       * @return This builder for chaining.
       */
      public Builder setType(int value) {
        
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint32 type = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearType() {
        
        type_ = 0;
        onChanged();
        return this;
      }

      private int ndim_ ;
      /**
       * <code>uint32 ndim = 3;</code>
       * @return The ndim.
       */
      @java.lang.Override
      public int getNdim() {
        return ndim_;
      }
      /**
       * <code>uint32 ndim = 3;</code>
       * @param value The ndim to set.
       * @return This builder for chaining.
       */
      public Builder setNdim(int value) {
        
        ndim_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint32 ndim = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearNdim() {
        
        ndim_ = 0;
        onChanged();
        return this;
      }

      private int basis_ ;
      /**
       * <code>uint32 basis = 4;</code>
       * @return The basis.
       */
      @java.lang.Override
      public int getBasis() {
        return basis_;
      }
      /**
       * <code>uint32 basis = 4;</code>
       * @param value The basis to set.
       * @return This builder for chaining.
       */
      public Builder setBasis(int value) {
        
        basis_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint32 basis = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearBasis() {
        
        basis_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object filename_ = "";
      /**
       * <code>string filename = 5;</code>
       * @return The filename.
       */
      public java.lang.String getFilename() {
        java.lang.Object ref = filename_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          filename_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string filename = 5;</code>
       * @return The bytes for filename.
       */
      public com.google.protobuf.ByteString
          getFilenameBytes() {
        java.lang.Object ref = filename_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          filename_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string filename = 5;</code>
       * @param value The filename to set.
       * @return This builder for chaining.
       */
      public Builder setFilename(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        filename_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string filename = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearFilename() {
        
        filename_ = getDefaultInstance().getFilename();
        onChanged();
        return this;
      }
      /**
       * <code>string filename = 5;</code>
       * @param value The bytes for filename to set.
       * @return This builder for chaining.
       */
      public Builder setFilenameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        filename_ = value;
        onChanged();
        return this;
      }

      private Messages.Vector.Revision revision_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Revision, Messages.Vector.Revision.Builder, Messages.Vector.RevisionOrBuilder> revisionBuilder_;
      /**
       * <code>.Messages.Revision revision = 6;</code>
       * @return Whether the revision field is set.
       */
      public boolean hasRevision() {
        return revisionBuilder_ != null || revision_ != null;
      }
      /**
       * <code>.Messages.Revision revision = 6;</code>
       * @return The revision.
       */
      public Messages.Vector.Revision getRevision() {
        if (revisionBuilder_ == null) {
          return revision_ == null ? Messages.Vector.Revision.getDefaultInstance() : revision_;
        } else {
          return revisionBuilder_.getMessage();
        }
      }
      /**
       * <code>.Messages.Revision revision = 6;</code>
       */
      public Builder setRevision(Messages.Vector.Revision value) {
        if (revisionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          revision_ = value;
          onChanged();
        } else {
          revisionBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Revision revision = 6;</code>
       */
      public Builder setRevision(
          Messages.Vector.Revision.Builder builderForValue) {
        if (revisionBuilder_ == null) {
          revision_ = builderForValue.build();
          onChanged();
        } else {
          revisionBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.Messages.Revision revision = 6;</code>
       */
      public Builder mergeRevision(Messages.Vector.Revision value) {
        if (revisionBuilder_ == null) {
          if (revision_ != null) {
            revision_ =
              Messages.Vector.Revision.newBuilder(revision_).mergeFrom(value).buildPartial();
          } else {
            revision_ = value;
          }
          onChanged();
        } else {
          revisionBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Revision revision = 6;</code>
       */
      public Builder clearRevision() {
        if (revisionBuilder_ == null) {
          revision_ = null;
          onChanged();
        } else {
          revision_ = null;
          revisionBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.Revision revision = 6;</code>
       */
      public Messages.Vector.Revision.Builder getRevisionBuilder() {
        
        onChanged();
        return getRevisionFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.Revision revision = 6;</code>
       */
      public Messages.Vector.RevisionOrBuilder getRevisionOrBuilder() {
        if (revisionBuilder_ != null) {
          return revisionBuilder_.getMessageOrBuilder();
        } else {
          return revision_ == null ?
              Messages.Vector.Revision.getDefaultInstance() : revision_;
        }
      }
      /**
       * <code>.Messages.Revision revision = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Revision, Messages.Vector.Revision.Builder, Messages.Vector.RevisionOrBuilder> 
          getRevisionFieldBuilder() {
        if (revisionBuilder_ == null) {
          revisionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.Vector.Revision, Messages.Vector.Revision.Builder, Messages.Vector.RevisionOrBuilder>(
                  getRevision(),
                  getParentForChildren(),
                  isClean());
          revision_ = null;
        }
        return revisionBuilder_;
      }

      private java.lang.Object info_ = "";
      /**
       * <pre>
       * as defined in common/space.hpp: mm=0, cm=1, m=2, km=3, in=4, ft=5, yd=6, mi=7
       * </pre>
       *
       * <code>string info = 7;</code>
       * @return The info.
       */
      public java.lang.String getInfo() {
        java.lang.Object ref = info_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          info_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * as defined in common/space.hpp: mm=0, cm=1, m=2, km=3, in=4, ft=5, yd=6, mi=7
       * </pre>
       *
       * <code>string info = 7;</code>
       * @return The bytes for info.
       */
      public com.google.protobuf.ByteString
          getInfoBytes() {
        java.lang.Object ref = info_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          info_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * as defined in common/space.hpp: mm=0, cm=1, m=2, km=3, in=4, ft=5, yd=6, mi=7
       * </pre>
       *
       * <code>string info = 7;</code>
       * @param value The info to set.
       * @return This builder for chaining.
       */
      public Builder setInfo(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        info_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * as defined in common/space.hpp: mm=0, cm=1, m=2, km=3, in=4, ft=5, yd=6, mi=7
       * </pre>
       *
       * <code>string info = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearInfo() {
        
        info_ = getDefaultInstance().getInfo();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * as defined in common/space.hpp: mm=0, cm=1, m=2, km=3, in=4, ft=5, yd=6, mi=7
       * </pre>
       *
       * <code>string info = 7;</code>
       * @param value The bytes for info to set.
       * @return This builder for chaining.
       */
      public Builder setInfoBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        info_ = value;
        onChanged();
        return this;
      }

      private Messages.Vector.Elements nodes_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Elements, Messages.Vector.Elements.Builder, Messages.Vector.ElementsOrBuilder> nodesBuilder_;
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Elements nodes = 10;</code>
       * @return Whether the nodes field is set.
       */
      public boolean hasNodes() {
        return nodesBuilder_ != null || nodes_ != null;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Elements nodes = 10;</code>
       * @return The nodes.
       */
      public Messages.Vector.Elements getNodes() {
        if (nodesBuilder_ == null) {
          return nodes_ == null ? Messages.Vector.Elements.getDefaultInstance() : nodes_;
        } else {
          return nodesBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Elements nodes = 10;</code>
       */
      public Builder setNodes(Messages.Vector.Elements value) {
        if (nodesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          nodes_ = value;
          onChanged();
        } else {
          nodesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Elements nodes = 10;</code>
       */
      public Builder setNodes(
          Messages.Vector.Elements.Builder builderForValue) {
        if (nodesBuilder_ == null) {
          nodes_ = builderForValue.build();
          onChanged();
        } else {
          nodesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Elements nodes = 10;</code>
       */
      public Builder mergeNodes(Messages.Vector.Elements value) {
        if (nodesBuilder_ == null) {
          if (nodes_ != null) {
            nodes_ =
              Messages.Vector.Elements.newBuilder(nodes_).mergeFrom(value).buildPartial();
          } else {
            nodes_ = value;
          }
          onChanged();
        } else {
          nodesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Elements nodes = 10;</code>
       */
      public Builder clearNodes() {
        if (nodesBuilder_ == null) {
          nodes_ = null;
          onChanged();
        } else {
          nodes_ = null;
          nodesBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Elements nodes = 10;</code>
       */
      public Messages.Vector.Elements.Builder getNodesBuilder() {
        
        onChanged();
        return getNodesFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Elements nodes = 10;</code>
       */
      public Messages.Vector.ElementsOrBuilder getNodesOrBuilder() {
        if (nodesBuilder_ != null) {
          return nodesBuilder_.getMessageOrBuilder();
        } else {
          return nodes_ == null ?
              Messages.Vector.Elements.getDefaultInstance() : nodes_;
        }
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.Elements nodes = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Elements, Messages.Vector.Elements.Builder, Messages.Vector.ElementsOrBuilder> 
          getNodesFieldBuilder() {
        if (nodesBuilder_ == null) {
          nodesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.Vector.Elements, Messages.Vector.Elements.Builder, Messages.Vector.ElementsOrBuilder>(
                  getNodes(),
                  getParentForChildren(),
                  isClean());
          nodes_ = null;
        }
        return nodesBuilder_;
      }

      private Messages.Vector.Elements edges_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Elements, Messages.Vector.Elements.Builder, Messages.Vector.ElementsOrBuilder> edgesBuilder_;
      /**
       * <code>.Messages.Elements edges = 11;</code>
       * @return Whether the edges field is set.
       */
      public boolean hasEdges() {
        return edgesBuilder_ != null || edges_ != null;
      }
      /**
       * <code>.Messages.Elements edges = 11;</code>
       * @return The edges.
       */
      public Messages.Vector.Elements getEdges() {
        if (edgesBuilder_ == null) {
          return edges_ == null ? Messages.Vector.Elements.getDefaultInstance() : edges_;
        } else {
          return edgesBuilder_.getMessage();
        }
      }
      /**
       * <code>.Messages.Elements edges = 11;</code>
       */
      public Builder setEdges(Messages.Vector.Elements value) {
        if (edgesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          edges_ = value;
          onChanged();
        } else {
          edgesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Elements edges = 11;</code>
       */
      public Builder setEdges(
          Messages.Vector.Elements.Builder builderForValue) {
        if (edgesBuilder_ == null) {
          edges_ = builderForValue.build();
          onChanged();
        } else {
          edgesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.Messages.Elements edges = 11;</code>
       */
      public Builder mergeEdges(Messages.Vector.Elements value) {
        if (edgesBuilder_ == null) {
          if (edges_ != null) {
            edges_ =
              Messages.Vector.Elements.newBuilder(edges_).mergeFrom(value).buildPartial();
          } else {
            edges_ = value;
          }
          onChanged();
        } else {
          edgesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Elements edges = 11;</code>
       */
      public Builder clearEdges() {
        if (edgesBuilder_ == null) {
          edges_ = null;
          onChanged();
        } else {
          edges_ = null;
          edgesBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.Elements edges = 11;</code>
       */
      public Messages.Vector.Elements.Builder getEdgesBuilder() {
        
        onChanged();
        return getEdgesFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.Elements edges = 11;</code>
       */
      public Messages.Vector.ElementsOrBuilder getEdgesOrBuilder() {
        if (edgesBuilder_ != null) {
          return edgesBuilder_.getMessageOrBuilder();
        } else {
          return edges_ == null ?
              Messages.Vector.Elements.getDefaultInstance() : edges_;
        }
      }
      /**
       * <code>.Messages.Elements edges = 11;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Elements, Messages.Vector.Elements.Builder, Messages.Vector.ElementsOrBuilder> 
          getEdgesFieldBuilder() {
        if (edgesBuilder_ == null) {
          edgesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.Vector.Elements, Messages.Vector.Elements.Builder, Messages.Vector.ElementsOrBuilder>(
                  getEdges(),
                  getParentForChildren(),
                  isClean());
          edges_ = null;
        }
        return edgesBuilder_;
      }

      private Messages.Vector.Elements faces_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Elements, Messages.Vector.Elements.Builder, Messages.Vector.ElementsOrBuilder> facesBuilder_;
      /**
       * <code>.Messages.Elements faces = 12;</code>
       * @return Whether the faces field is set.
       */
      public boolean hasFaces() {
        return facesBuilder_ != null || faces_ != null;
      }
      /**
       * <code>.Messages.Elements faces = 12;</code>
       * @return The faces.
       */
      public Messages.Vector.Elements getFaces() {
        if (facesBuilder_ == null) {
          return faces_ == null ? Messages.Vector.Elements.getDefaultInstance() : faces_;
        } else {
          return facesBuilder_.getMessage();
        }
      }
      /**
       * <code>.Messages.Elements faces = 12;</code>
       */
      public Builder setFaces(Messages.Vector.Elements value) {
        if (facesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          faces_ = value;
          onChanged();
        } else {
          facesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Elements faces = 12;</code>
       */
      public Builder setFaces(
          Messages.Vector.Elements.Builder builderForValue) {
        if (facesBuilder_ == null) {
          faces_ = builderForValue.build();
          onChanged();
        } else {
          facesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.Messages.Elements faces = 12;</code>
       */
      public Builder mergeFaces(Messages.Vector.Elements value) {
        if (facesBuilder_ == null) {
          if (faces_ != null) {
            faces_ =
              Messages.Vector.Elements.newBuilder(faces_).mergeFrom(value).buildPartial();
          } else {
            faces_ = value;
          }
          onChanged();
        } else {
          facesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Elements faces = 12;</code>
       */
      public Builder clearFaces() {
        if (facesBuilder_ == null) {
          faces_ = null;
          onChanged();
        } else {
          faces_ = null;
          facesBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.Elements faces = 12;</code>
       */
      public Messages.Vector.Elements.Builder getFacesBuilder() {
        
        onChanged();
        return getFacesFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.Elements faces = 12;</code>
       */
      public Messages.Vector.ElementsOrBuilder getFacesOrBuilder() {
        if (facesBuilder_ != null) {
          return facesBuilder_.getMessageOrBuilder();
        } else {
          return faces_ == null ?
              Messages.Vector.Elements.getDefaultInstance() : faces_;
        }
      }
      /**
       * <code>.Messages.Elements faces = 12;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Elements, Messages.Vector.Elements.Builder, Messages.Vector.ElementsOrBuilder> 
          getFacesFieldBuilder() {
        if (facesBuilder_ == null) {
          facesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.Vector.Elements, Messages.Vector.Elements.Builder, Messages.Vector.ElementsOrBuilder>(
                  getFaces(),
                  getParentForChildren(),
                  isClean());
          faces_ = null;
        }
        return facesBuilder_;
      }

      private Messages.Vector.Elements cells_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Elements, Messages.Vector.Elements.Builder, Messages.Vector.ElementsOrBuilder> cellsBuilder_;
      /**
       * <code>.Messages.Elements cells = 13;</code>
       * @return Whether the cells field is set.
       */
      public boolean hasCells() {
        return cellsBuilder_ != null || cells_ != null;
      }
      /**
       * <code>.Messages.Elements cells = 13;</code>
       * @return The cells.
       */
      public Messages.Vector.Elements getCells() {
        if (cellsBuilder_ == null) {
          return cells_ == null ? Messages.Vector.Elements.getDefaultInstance() : cells_;
        } else {
          return cellsBuilder_.getMessage();
        }
      }
      /**
       * <code>.Messages.Elements cells = 13;</code>
       */
      public Builder setCells(Messages.Vector.Elements value) {
        if (cellsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          cells_ = value;
          onChanged();
        } else {
          cellsBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Elements cells = 13;</code>
       */
      public Builder setCells(
          Messages.Vector.Elements.Builder builderForValue) {
        if (cellsBuilder_ == null) {
          cells_ = builderForValue.build();
          onChanged();
        } else {
          cellsBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.Messages.Elements cells = 13;</code>
       */
      public Builder mergeCells(Messages.Vector.Elements value) {
        if (cellsBuilder_ == null) {
          if (cells_ != null) {
            cells_ =
              Messages.Vector.Elements.newBuilder(cells_).mergeFrom(value).buildPartial();
          } else {
            cells_ = value;
          }
          onChanged();
        } else {
          cellsBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Elements cells = 13;</code>
       */
      public Builder clearCells() {
        if (cellsBuilder_ == null) {
          cells_ = null;
          onChanged();
        } else {
          cells_ = null;
          cellsBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.Elements cells = 13;</code>
       */
      public Messages.Vector.Elements.Builder getCellsBuilder() {
        
        onChanged();
        return getCellsFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.Elements cells = 13;</code>
       */
      public Messages.Vector.ElementsOrBuilder getCellsOrBuilder() {
        if (cellsBuilder_ != null) {
          return cellsBuilder_.getMessageOrBuilder();
        } else {
          return cells_ == null ?
              Messages.Vector.Elements.getDefaultInstance() : cells_;
        }
      }
      /**
       * <code>.Messages.Elements cells = 13;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Elements, Messages.Vector.Elements.Builder, Messages.Vector.ElementsOrBuilder> 
          getCellsFieldBuilder() {
        if (cellsBuilder_ == null) {
          cellsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.Vector.Elements, Messages.Vector.Elements.Builder, Messages.Vector.ElementsOrBuilder>(
                  getCells(),
                  getParentForChildren(),
                  isClean());
          cells_ = null;
        }
        return cellsBuilder_;
      }

      private Messages.Vector.Record64 data_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Record64, Messages.Vector.Record64.Builder, Messages.Vector.Record64OrBuilder> dataBuilder_;
      /**
       * <code>.Messages.Record64 data = 15;</code>
       * @return Whether the data field is set.
       */
      public boolean hasData() {
        return dataBuilder_ != null || data_ != null;
      }
      /**
       * <code>.Messages.Record64 data = 15;</code>
       * @return The data.
       */
      public Messages.Vector.Record64 getData() {
        if (dataBuilder_ == null) {
          return data_ == null ? Messages.Vector.Record64.getDefaultInstance() : data_;
        } else {
          return dataBuilder_.getMessage();
        }
      }
      /**
       * <code>.Messages.Record64 data = 15;</code>
       */
      public Builder setData(Messages.Vector.Record64 value) {
        if (dataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          data_ = value;
          onChanged();
        } else {
          dataBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Record64 data = 15;</code>
       */
      public Builder setData(
          Messages.Vector.Record64.Builder builderForValue) {
        if (dataBuilder_ == null) {
          data_ = builderForValue.build();
          onChanged();
        } else {
          dataBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.Messages.Record64 data = 15;</code>
       */
      public Builder mergeData(Messages.Vector.Record64 value) {
        if (dataBuilder_ == null) {
          if (data_ != null) {
            data_ =
              Messages.Vector.Record64.newBuilder(data_).mergeFrom(value).buildPartial();
          } else {
            data_ = value;
          }
          onChanged();
        } else {
          dataBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Record64 data = 15;</code>
       */
      public Builder clearData() {
        if (dataBuilder_ == null) {
          data_ = null;
          onChanged();
        } else {
          data_ = null;
          dataBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.Record64 data = 15;</code>
       */
      public Messages.Vector.Record64.Builder getDataBuilder() {
        
        onChanged();
        return getDataFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.Record64 data = 15;</code>
       */
      public Messages.Vector.Record64OrBuilder getDataOrBuilder() {
        if (dataBuilder_ != null) {
          return dataBuilder_.getMessageOrBuilder();
        } else {
          return data_ == null ?
              Messages.Vector.Record64.getDefaultInstance() : data_;
        }
      }
      /**
       * <code>.Messages.Record64 data = 15;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Record64, Messages.Vector.Record64.Builder, Messages.Vector.Record64OrBuilder> 
          getDataFieldBuilder() {
        if (dataBuilder_ == null) {
          dataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.Vector.Record64, Messages.Vector.Record64.Builder, Messages.Vector.Record64OrBuilder>(
                  getData(),
                  getParentForChildren(),
                  isClean());
          data_ = null;
        }
        return dataBuilder_;
      }

      private java.util.List<Messages.Vector.SparseMatrix> sparseData_ =
        java.util.Collections.emptyList();
      private void ensureSparseDataIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          sparseData_ = new java.util.ArrayList<Messages.Vector.SparseMatrix>(sparseData_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          Messages.Vector.SparseMatrix, Messages.Vector.SparseMatrix.Builder, Messages.Vector.SparseMatrixOrBuilder> sparseDataBuilder_;

      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public java.util.List<Messages.Vector.SparseMatrix> getSparseDataList() {
        if (sparseDataBuilder_ == null) {
          return java.util.Collections.unmodifiableList(sparseData_);
        } else {
          return sparseDataBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public int getSparseDataCount() {
        if (sparseDataBuilder_ == null) {
          return sparseData_.size();
        } else {
          return sparseDataBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public Messages.Vector.SparseMatrix getSparseData(int index) {
        if (sparseDataBuilder_ == null) {
          return sparseData_.get(index);
        } else {
          return sparseDataBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public Builder setSparseData(
          int index, Messages.Vector.SparseMatrix value) {
        if (sparseDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSparseDataIsMutable();
          sparseData_.set(index, value);
          onChanged();
        } else {
          sparseDataBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public Builder setSparseData(
          int index, Messages.Vector.SparseMatrix.Builder builderForValue) {
        if (sparseDataBuilder_ == null) {
          ensureSparseDataIsMutable();
          sparseData_.set(index, builderForValue.build());
          onChanged();
        } else {
          sparseDataBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public Builder addSparseData(Messages.Vector.SparseMatrix value) {
        if (sparseDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSparseDataIsMutable();
          sparseData_.add(value);
          onChanged();
        } else {
          sparseDataBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public Builder addSparseData(
          int index, Messages.Vector.SparseMatrix value) {
        if (sparseDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSparseDataIsMutable();
          sparseData_.add(index, value);
          onChanged();
        } else {
          sparseDataBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public Builder addSparseData(
          Messages.Vector.SparseMatrix.Builder builderForValue) {
        if (sparseDataBuilder_ == null) {
          ensureSparseDataIsMutable();
          sparseData_.add(builderForValue.build());
          onChanged();
        } else {
          sparseDataBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public Builder addSparseData(
          int index, Messages.Vector.SparseMatrix.Builder builderForValue) {
        if (sparseDataBuilder_ == null) {
          ensureSparseDataIsMutable();
          sparseData_.add(index, builderForValue.build());
          onChanged();
        } else {
          sparseDataBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public Builder addAllSparseData(
          java.lang.Iterable<? extends Messages.Vector.SparseMatrix> values) {
        if (sparseDataBuilder_ == null) {
          ensureSparseDataIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, sparseData_);
          onChanged();
        } else {
          sparseDataBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public Builder clearSparseData() {
        if (sparseDataBuilder_ == null) {
          sparseData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          sparseDataBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public Builder removeSparseData(int index) {
        if (sparseDataBuilder_ == null) {
          ensureSparseDataIsMutable();
          sparseData_.remove(index);
          onChanged();
        } else {
          sparseDataBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public Messages.Vector.SparseMatrix.Builder getSparseDataBuilder(
          int index) {
        return getSparseDataFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public Messages.Vector.SparseMatrixOrBuilder getSparseDataOrBuilder(
          int index) {
        if (sparseDataBuilder_ == null) {
          return sparseData_.get(index);  } else {
          return sparseDataBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public java.util.List<? extends Messages.Vector.SparseMatrixOrBuilder> 
           getSparseDataOrBuilderList() {
        if (sparseDataBuilder_ != null) {
          return sparseDataBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(sparseData_);
        }
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public Messages.Vector.SparseMatrix.Builder addSparseDataBuilder() {
        return getSparseDataFieldBuilder().addBuilder(
            Messages.Vector.SparseMatrix.getDefaultInstance());
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public Messages.Vector.SparseMatrix.Builder addSparseDataBuilder(
          int index) {
        return getSparseDataFieldBuilder().addBuilder(
            index, Messages.Vector.SparseMatrix.getDefaultInstance());
      }
      /**
       * <code>repeated .Messages.SparseMatrix sparse_data = 16;</code>
       */
      public java.util.List<Messages.Vector.SparseMatrix.Builder> 
           getSparseDataBuilderList() {
        return getSparseDataFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          Messages.Vector.SparseMatrix, Messages.Vector.SparseMatrix.Builder, Messages.Vector.SparseMatrixOrBuilder> 
          getSparseDataFieldBuilder() {
        if (sparseDataBuilder_ == null) {
          sparseDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              Messages.Vector.SparseMatrix, Messages.Vector.SparseMatrix.Builder, Messages.Vector.SparseMatrixOrBuilder>(
                  sparseData_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          sparseData_ = null;
        }
        return sparseDataBuilder_;
      }

      private Messages.Spatial.GridControl gridControl_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Spatial.GridControl, Messages.Spatial.GridControl.Builder, Messages.Spatial.GridControlOrBuilder> gridControlBuilder_;
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.GridControl grid_control = 20;</code>
       * @return Whether the gridControl field is set.
       */
      public boolean hasGridControl() {
        return gridControlBuilder_ != null || gridControl_ != null;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.GridControl grid_control = 20;</code>
       * @return The gridControl.
       */
      public Messages.Spatial.GridControl getGridControl() {
        if (gridControlBuilder_ == null) {
          return gridControl_ == null ? Messages.Spatial.GridControl.getDefaultInstance() : gridControl_;
        } else {
          return gridControlBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.GridControl grid_control = 20;</code>
       */
      public Builder setGridControl(Messages.Spatial.GridControl value) {
        if (gridControlBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          gridControl_ = value;
          onChanged();
        } else {
          gridControlBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.GridControl grid_control = 20;</code>
       */
      public Builder setGridControl(
          Messages.Spatial.GridControl.Builder builderForValue) {
        if (gridControlBuilder_ == null) {
          gridControl_ = builderForValue.build();
          onChanged();
        } else {
          gridControlBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.GridControl grid_control = 20;</code>
       */
      public Builder mergeGridControl(Messages.Spatial.GridControl value) {
        if (gridControlBuilder_ == null) {
          if (gridControl_ != null) {
            gridControl_ =
              Messages.Spatial.GridControl.newBuilder(gridControl_).mergeFrom(value).buildPartial();
          } else {
            gridControl_ = value;
          }
          onChanged();
        } else {
          gridControlBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.GridControl grid_control = 20;</code>
       */
      public Builder clearGridControl() {
        if (gridControlBuilder_ == null) {
          gridControl_ = null;
          onChanged();
        } else {
          gridControl_ = null;
          gridControlBuilder_ = null;
        }

        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.GridControl grid_control = 20;</code>
       */
      public Messages.Spatial.GridControl.Builder getGridControlBuilder() {
        
        onChanged();
        return getGridControlFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.GridControl grid_control = 20;</code>
       */
      public Messages.Spatial.GridControlOrBuilder getGridControlOrBuilder() {
        if (gridControlBuilder_ != null) {
          return gridControlBuilder_.getMessageOrBuilder();
        } else {
          return gridControl_ == null ?
              Messages.Spatial.GridControl.getDefaultInstance() : gridControl_;
        }
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>.Messages.GridControl grid_control = 20;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Spatial.GridControl, Messages.Spatial.GridControl.Builder, Messages.Spatial.GridControlOrBuilder> 
          getGridControlFieldBuilder() {
        if (gridControlBuilder_ == null) {
          gridControlBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.Spatial.GridControl, Messages.Spatial.GridControl.Builder, Messages.Spatial.GridControlOrBuilder>(
                  getGridControl(),
                  getParentForChildren(),
                  isClean());
          gridControl_ = null;
        }
        return gridControlBuilder_;
      }

      private Messages.Spatial.MeshControl meshControl_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Spatial.MeshControl, Messages.Spatial.MeshControl.Builder, Messages.Spatial.MeshControlOrBuilder> meshControlBuilder_;
      /**
       * <code>.Messages.MeshControl mesh_control = 21;</code>
       * @return Whether the meshControl field is set.
       */
      public boolean hasMeshControl() {
        return meshControlBuilder_ != null || meshControl_ != null;
      }
      /**
       * <code>.Messages.MeshControl mesh_control = 21;</code>
       * @return The meshControl.
       */
      public Messages.Spatial.MeshControl getMeshControl() {
        if (meshControlBuilder_ == null) {
          return meshControl_ == null ? Messages.Spatial.MeshControl.getDefaultInstance() : meshControl_;
        } else {
          return meshControlBuilder_.getMessage();
        }
      }
      /**
       * <code>.Messages.MeshControl mesh_control = 21;</code>
       */
      public Builder setMeshControl(Messages.Spatial.MeshControl value) {
        if (meshControlBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          meshControl_ = value;
          onChanged();
        } else {
          meshControlBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.Messages.MeshControl mesh_control = 21;</code>
       */
      public Builder setMeshControl(
          Messages.Spatial.MeshControl.Builder builderForValue) {
        if (meshControlBuilder_ == null) {
          meshControl_ = builderForValue.build();
          onChanged();
        } else {
          meshControlBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.Messages.MeshControl mesh_control = 21;</code>
       */
      public Builder mergeMeshControl(Messages.Spatial.MeshControl value) {
        if (meshControlBuilder_ == null) {
          if (meshControl_ != null) {
            meshControl_ =
              Messages.Spatial.MeshControl.newBuilder(meshControl_).mergeFrom(value).buildPartial();
          } else {
            meshControl_ = value;
          }
          onChanged();
        } else {
          meshControlBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.Messages.MeshControl mesh_control = 21;</code>
       */
      public Builder clearMeshControl() {
        if (meshControlBuilder_ == null) {
          meshControl_ = null;
          onChanged();
        } else {
          meshControl_ = null;
          meshControlBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.MeshControl mesh_control = 21;</code>
       */
      public Messages.Spatial.MeshControl.Builder getMeshControlBuilder() {
        
        onChanged();
        return getMeshControlFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.MeshControl mesh_control = 21;</code>
       */
      public Messages.Spatial.MeshControlOrBuilder getMeshControlOrBuilder() {
        if (meshControlBuilder_ != null) {
          return meshControlBuilder_.getMessageOrBuilder();
        } else {
          return meshControl_ == null ?
              Messages.Spatial.MeshControl.getDefaultInstance() : meshControl_;
        }
      }
      /**
       * <code>.Messages.MeshControl mesh_control = 21;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Spatial.MeshControl, Messages.Spatial.MeshControl.Builder, Messages.Spatial.MeshControlOrBuilder> 
          getMeshControlFieldBuilder() {
        if (meshControlBuilder_ == null) {
          meshControlBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.Spatial.MeshControl, Messages.Spatial.MeshControl.Builder, Messages.Spatial.MeshControlOrBuilder>(
                  getMeshControl(),
                  getParentForChildren(),
                  isClean());
          meshControl_ = null;
        }
        return meshControlBuilder_;
      }

      private Messages.Spatial.TreeControl treeControl_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Spatial.TreeControl, Messages.Spatial.TreeControl.Builder, Messages.Spatial.TreeControlOrBuilder> treeControlBuilder_;
      /**
       * <code>.Messages.TreeControl tree_control = 22;</code>
       * @return Whether the treeControl field is set.
       */
      public boolean hasTreeControl() {
        return treeControlBuilder_ != null || treeControl_ != null;
      }
      /**
       * <code>.Messages.TreeControl tree_control = 22;</code>
       * @return The treeControl.
       */
      public Messages.Spatial.TreeControl getTreeControl() {
        if (treeControlBuilder_ == null) {
          return treeControl_ == null ? Messages.Spatial.TreeControl.getDefaultInstance() : treeControl_;
        } else {
          return treeControlBuilder_.getMessage();
        }
      }
      /**
       * <code>.Messages.TreeControl tree_control = 22;</code>
       */
      public Builder setTreeControl(Messages.Spatial.TreeControl value) {
        if (treeControlBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          treeControl_ = value;
          onChanged();
        } else {
          treeControlBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.Messages.TreeControl tree_control = 22;</code>
       */
      public Builder setTreeControl(
          Messages.Spatial.TreeControl.Builder builderForValue) {
        if (treeControlBuilder_ == null) {
          treeControl_ = builderForValue.build();
          onChanged();
        } else {
          treeControlBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.Messages.TreeControl tree_control = 22;</code>
       */
      public Builder mergeTreeControl(Messages.Spatial.TreeControl value) {
        if (treeControlBuilder_ == null) {
          if (treeControl_ != null) {
            treeControl_ =
              Messages.Spatial.TreeControl.newBuilder(treeControl_).mergeFrom(value).buildPartial();
          } else {
            treeControl_ = value;
          }
          onChanged();
        } else {
          treeControlBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.Messages.TreeControl tree_control = 22;</code>
       */
      public Builder clearTreeControl() {
        if (treeControlBuilder_ == null) {
          treeControl_ = null;
          onChanged();
        } else {
          treeControl_ = null;
          treeControlBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.TreeControl tree_control = 22;</code>
       */
      public Messages.Spatial.TreeControl.Builder getTreeControlBuilder() {
        
        onChanged();
        return getTreeControlFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.TreeControl tree_control = 22;</code>
       */
      public Messages.Spatial.TreeControlOrBuilder getTreeControlOrBuilder() {
        if (treeControlBuilder_ != null) {
          return treeControlBuilder_.getMessageOrBuilder();
        } else {
          return treeControl_ == null ?
              Messages.Spatial.TreeControl.getDefaultInstance() : treeControl_;
        }
      }
      /**
       * <code>.Messages.TreeControl tree_control = 22;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Spatial.TreeControl, Messages.Spatial.TreeControl.Builder, Messages.Spatial.TreeControlOrBuilder> 
          getTreeControlFieldBuilder() {
        if (treeControlBuilder_ == null) {
          treeControlBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.Spatial.TreeControl, Messages.Spatial.TreeControl.Builder, Messages.Spatial.TreeControlOrBuilder>(
                  getTreeControl(),
                  getParentForChildren(),
                  isClean());
          treeControl_ = null;
        }
        return treeControlBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:Messages.Topology)
    }

    // @@protoc_insertion_point(class_scope:Messages.Topology)
    private static final Messages.Spatial.Topology DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new Messages.Spatial.Topology();
    }

    public static Messages.Spatial.Topology getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public Messages.Spatial.Topology getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_Messages_Zone_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_Messages_Zone_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_Messages_GridControl_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_Messages_GridControl_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_Messages_MeshControl_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_Messages_MeshControl_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_Messages_TreeControl_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_Messages_TreeControl_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_Messages_Topology_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_Messages_Topology_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\rspatial.proto\022\010Messages\032\014vector.proto\"" +
      "\371\001\n\004Zone\022\014\n\004name\030\001 \001(\t\022\n\n\002id\030\002 \001(\005\022\026\n\016di" +
      "mensionality\030\003 \001(\r\022$\n\010revision\030\004 \001(\0132\022.M" +
      "essages.Revision\022\020\n\010elements\030\005 \003(\r\022\025\n\rel" +
      "ement_count\030\006 \001(\r\022\020\n\010comments\030\007 \001(\t\022\014\n\004i" +
      "nfo\030\010 \001(\t\022\025\n\rresource_name\030\t \001(\t\022!\n\006boun" +
      "ds\030\n \001(\0132\021.Messages.Extrema\022\026\n\016terminal_" +
      "coord\030\013 \003(\002\"\336\001\n\013GridControl\022\r\n\005basis\030\001 \001" +
      "(\r\022\014\n\004size\030\002 \003(\r\022\017\n\007spacing\030\003 \003(\001\022\017\n\007gra" +
      "ding\030\004 \003(\001\022\024\n\014length_units\030\010 \001(\r\022\020\n\010targ" +
      "et_n\030\t \001(\004\022!\n\006bounds\030\n \001(\0132\021.Messages.Ex" +
      "trema\022\022\n\nsymmetries\030\013 \003(\010\022\020\n\010interior\030\014 " +
      "\001(\010\022\020\n\010exterior\030\r \001(\010\022\r\n\005shell\030\016 \001(\010\"\367\003\n" +
      "\013MeshControl\022\020\n\010target_n\030\001 \001(\004\022\026\n\016max_it" +
      "erations\030\002 \001(\r\022\022\n\nsize_ratio\030\003 \001(\001\022\022\n\nsi" +
      "ze_decay\030\004 \001(\001\022\025\n\rsize_exponent\030\005 \001(\001\022\022\n" +
      "\ncurv_ratio\030\006 \001(\001\022\022\n\ncurv_decay\030\007 \001(\001\022\025\n" +
      "\rcurv_exponent\030\010 \001(\001\022\023\n\013node_radius\030\t \001(" +
      "\001\022!\n\006bounds\030\n \001(\0132\021.Messages.Extrema\022\024\n\014" +
      "length_units\030\013 \001(\r\022\020\n\010interior\030\014 \001(\010\022\020\n\010" +
      "exterior\030\r \001(\010\022\r\n\005shell\030\016 \001(\010\022\020\n\010equaliz" +
      "e\030\017 \001(\010\022\016\n\006smooth\030\020 \001(\010\022\032\n\022include_backg" +
      "round\030\022 \001(\010\022\034\n\024keep_existing_points\030\023 \001(" +
      "\010\022\027\n\017auto_fit_domain\030\024 \001(\010\022 \n\030boundary_l" +
      "ayer_thickness\030\027 \001(\001\022\022\n\nsymmetries\030\030 \003(\010" +
      "\022\024\n\014background_n\030\036 \001(\004\"\232\001\n\013TreeControl\022\021" +
      "\n\tmin_depth\030\001 \001(\r\022\021\n\tmax_depth\030\002 \001(\r\022\020\n\010" +
      "max_size\030\003 \001(\004\022\032\n\022ref_dimensionality\030\007 \001" +
      "(\r\022\024\n\014length_units\030\010 \001(\r\022!\n\006bounds\030\n \001(\013" +
      "2\021.Messages.Extrema\"\353\003\n\010Topology\022\014\n\004name" +
      "\030\001 \001(\t\022\014\n\004type\030\002 \001(\r\022\014\n\004ndim\030\003 \001(\r\022\r\n\005ba" +
      "sis\030\004 \001(\r\022\020\n\010filename\030\005 \001(\t\022$\n\010revision\030" +
      "\006 \001(\0132\022.Messages.Revision\022\014\n\004info\030\007 \001(\t\022" +
      "!\n\005nodes\030\n \001(\0132\022.Messages.Elements\022!\n\005ed" +
      "ges\030\013 \001(\0132\022.Messages.Elements\022!\n\005faces\030\014" +
      " \001(\0132\022.Messages.Elements\022!\n\005cells\030\r \001(\0132" +
      "\022.Messages.Elements\022 \n\004data\030\017 \001(\0132\022.Mess" +
      "ages.Record64\022+\n\013sparse_data\030\020 \003(\0132\026.Mes" +
      "sages.SparseMatrix\022+\n\014grid_control\030\024 \001(\013" +
      "2\025.Messages.GridControl\022+\n\014mesh_control\030" +
      "\025 \001(\0132\025.Messages.MeshControl\022+\n\014tree_con" +
      "trol\030\026 \001(\0132\025.Messages.TreeControlb\006proto" +
      "3"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
          Messages.Vector.getDescriptor(),
        });
    internal_static_Messages_Zone_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_Messages_Zone_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_Messages_Zone_descriptor,
        new java.lang.String[] { "Name", "Id", "Dimensionality", "Revision", "Elements", "ElementCount", "Comments", "Info", "ResourceName", "Bounds", "TerminalCoord", });
    internal_static_Messages_GridControl_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_Messages_GridControl_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_Messages_GridControl_descriptor,
        new java.lang.String[] { "Basis", "Size", "Spacing", "Grading", "LengthUnits", "TargetN", "Bounds", "Symmetries", "Interior", "Exterior", "Shell", });
    internal_static_Messages_MeshControl_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_Messages_MeshControl_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_Messages_MeshControl_descriptor,
        new java.lang.String[] { "TargetN", "MaxIterations", "SizeRatio", "SizeDecay", "SizeExponent", "CurvRatio", "CurvDecay", "CurvExponent", "NodeRadius", "Bounds", "LengthUnits", "Interior", "Exterior", "Shell", "Equalize", "Smooth", "IncludeBackground", "KeepExistingPoints", "AutoFitDomain", "BoundaryLayerThickness", "Symmetries", "BackgroundN", });
    internal_static_Messages_TreeControl_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_Messages_TreeControl_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_Messages_TreeControl_descriptor,
        new java.lang.String[] { "MinDepth", "MaxDepth", "MaxSize", "RefDimensionality", "LengthUnits", "Bounds", });
    internal_static_Messages_Topology_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_Messages_Topology_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_Messages_Topology_descriptor,
        new java.lang.String[] { "Name", "Type", "Ndim", "Basis", "Filename", "Revision", "Info", "Nodes", "Edges", "Faces", "Cells", "Data", "SparseData", "GridControl", "MeshControl", "TreeControl", });
    Messages.Vector.getDescriptor();
  }

  // @@protoc_insertion_point(outer_class_scope)
}
