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

package Messages;

public final class MetaOuterClass {
  private MetaOuterClass() {}
  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 GraphicsControlOrBuilder extends
      // @@protoc_insertion_point(interface_extends:Messages.GraphicsControl)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * render program enumeration: 0-explicit raster, 1-implicit raster, 2-explicit ray, 3-implicit ray
     * </pre>
     *
     * <code>uint32 mode = 1;</code>
     * @return The mode.
     */
    int getMode();

    /**
     * <pre>
     * bitfield flags, see common/style.h
     * </pre>
     *
     * <code>uint32 style = 2;</code>
     * @return The style.
     */
    int getStyle();

    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated float color = 4;</code>
     * @return A list containing the color.
     */
    java.util.List<java.lang.Float> getColorList();
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated float color = 4;</code>
     * @return The count of color.
     */
    int getColorCount();
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated float color = 4;</code>
     * @param index The index of the element to return.
     * @return The color at the given index.
     */
    float getColor(int index);

    /**
     * <code>float alpha = 5;</code>
     * @return The alpha.
     */
    float getAlpha();

    /**
     * <code>float point_width = 6;</code>
     * @return The pointWidth.
     */
    float getPointWidth();

    /**
     * <code>float line_width = 7;</code>
     * @return The lineWidth.
     */
    float getLineWidth();

    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>bool visible = 10;</code>
     * @return The visible.
     */
    boolean getVisible();
  }
  /**
   * Protobuf type {@code Messages.GraphicsControl}
   */
  public static final class GraphicsControl extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:Messages.GraphicsControl)
      GraphicsControlOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GraphicsControl.newBuilder() to construct.
    private GraphicsControl(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private GraphicsControl() {
      color_ = emptyFloatList();
    }

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

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

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Messages.MetaOuterClass.internal_static_Messages_GraphicsControl_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              Messages.MetaOuterClass.GraphicsControl.class, Messages.MetaOuterClass.GraphicsControl.Builder.class);
    }

    public static final int MODE_FIELD_NUMBER = 1;
    private int mode_;
    /**
     * <pre>
     * render program enumeration: 0-explicit raster, 1-implicit raster, 2-explicit ray, 3-implicit ray
     * </pre>
     *
     * <code>uint32 mode = 1;</code>
     * @return The mode.
     */
    @java.lang.Override
    public int getMode() {
      return mode_;
    }

    public static final int STYLE_FIELD_NUMBER = 2;
    private int style_;
    /**
     * <pre>
     * bitfield flags, see common/style.h
     * </pre>
     *
     * <code>uint32 style = 2;</code>
     * @return The style.
     */
    @java.lang.Override
    public int getStyle() {
      return style_;
    }

    public static final int COLOR_FIELD_NUMBER = 4;
    private com.google.protobuf.Internal.FloatList color_;
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated float color = 4;</code>
     * @return A list containing the color.
     */
    @java.lang.Override
    public java.util.List<java.lang.Float>
        getColorList() {
      return color_;
    }
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated float color = 4;</code>
     * @return The count of color.
     */
    public int getColorCount() {
      return color_.size();
    }
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated float color = 4;</code>
     * @param index The index of the element to return.
     * @return The color at the given index.
     */
    public float getColor(int index) {
      return color_.getFloat(index);
    }
    private int colorMemoizedSerializedSize = -1;

    public static final int ALPHA_FIELD_NUMBER = 5;
    private float alpha_;
    /**
     * <code>float alpha = 5;</code>
     * @return The alpha.
     */
    @java.lang.Override
    public float getAlpha() {
      return alpha_;
    }

    public static final int POINT_WIDTH_FIELD_NUMBER = 6;
    private float pointWidth_;
    /**
     * <code>float point_width = 6;</code>
     * @return The pointWidth.
     */
    @java.lang.Override
    public float getPointWidth() {
      return pointWidth_;
    }

    public static final int LINE_WIDTH_FIELD_NUMBER = 7;
    private float lineWidth_;
    /**
     * <code>float line_width = 7;</code>
     * @return The lineWidth.
     */
    @java.lang.Override
    public float getLineWidth() {
      return lineWidth_;
    }

    public static final int VISIBLE_FIELD_NUMBER = 10;
    private boolean visible_;
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>bool visible = 10;</code>
     * @return The visible.
     */
    @java.lang.Override
    public boolean getVisible() {
      return visible_;
    }

    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 (mode_ != 0) {
        output.writeUInt32(1, mode_);
      }
      if (style_ != 0) {
        output.writeUInt32(2, style_);
      }
      if (getColorList().size() > 0) {
        output.writeUInt32NoTag(34);
        output.writeUInt32NoTag(colorMemoizedSerializedSize);
      }
      for (int i = 0; i < color_.size(); i++) {
        output.writeFloatNoTag(color_.getFloat(i));
      }
      if (java.lang.Float.floatToRawIntBits(alpha_) != 0) {
        output.writeFloat(5, alpha_);
      }
      if (java.lang.Float.floatToRawIntBits(pointWidth_) != 0) {
        output.writeFloat(6, pointWidth_);
      }
      if (java.lang.Float.floatToRawIntBits(lineWidth_) != 0) {
        output.writeFloat(7, lineWidth_);
      }
      if (visible_ != false) {
        output.writeBool(10, visible_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (mode_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, mode_);
      }
      if (style_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, style_);
      }
      {
        int dataSize = 0;
        dataSize = 4 * getColorList().size();
        size += dataSize;
        if (!getColorList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        colorMemoizedSerializedSize = dataSize;
      }
      if (java.lang.Float.floatToRawIntBits(alpha_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(5, alpha_);
      }
      if (java.lang.Float.floatToRawIntBits(pointWidth_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(6, pointWidth_);
      }
      if (java.lang.Float.floatToRawIntBits(lineWidth_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(7, lineWidth_);
      }
      if (visible_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(10, visible_);
      }
      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.MetaOuterClass.GraphicsControl)) {
        return super.equals(obj);
      }
      Messages.MetaOuterClass.GraphicsControl other = (Messages.MetaOuterClass.GraphicsControl) obj;

      if (getMode()
          != other.getMode()) return false;
      if (getStyle()
          != other.getStyle()) return false;
      if (!getColorList()
          .equals(other.getColorList())) return false;
      if (java.lang.Float.floatToIntBits(getAlpha())
          != java.lang.Float.floatToIntBits(
              other.getAlpha())) return false;
      if (java.lang.Float.floatToIntBits(getPointWidth())
          != java.lang.Float.floatToIntBits(
              other.getPointWidth())) return false;
      if (java.lang.Float.floatToIntBits(getLineWidth())
          != java.lang.Float.floatToIntBits(
              other.getLineWidth())) return false;
      if (getVisible()
          != other.getVisible()) 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) + MODE_FIELD_NUMBER;
      hash = (53 * hash) + getMode();
      hash = (37 * hash) + STYLE_FIELD_NUMBER;
      hash = (53 * hash) + getStyle();
      if (getColorCount() > 0) {
        hash = (37 * hash) + COLOR_FIELD_NUMBER;
        hash = (53 * hash) + getColorList().hashCode();
      }
      hash = (37 * hash) + ALPHA_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getAlpha());
      hash = (37 * hash) + POINT_WIDTH_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getPointWidth());
      hash = (37 * hash) + LINE_WIDTH_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getLineWidth());
      hash = (37 * hash) + VISIBLE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getVisible());
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static Messages.MetaOuterClass.GraphicsControl parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.GraphicsControl parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.GraphicsControl parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.GraphicsControl parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.GraphicsControl parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.GraphicsControl parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.GraphicsControl parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.GraphicsControl 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.MetaOuterClass.GraphicsControl parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.GraphicsControl 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.MetaOuterClass.GraphicsControl parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.GraphicsControl 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.MetaOuterClass.GraphicsControl 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.GraphicsControl}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:Messages.GraphicsControl)
        Messages.MetaOuterClass.GraphicsControlOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Messages.MetaOuterClass.internal_static_Messages_GraphicsControl_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Messages.MetaOuterClass.internal_static_Messages_GraphicsControl_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Messages.MetaOuterClass.GraphicsControl.class, Messages.MetaOuterClass.GraphicsControl.Builder.class);
      }

      // Construct using Messages.MetaOuterClass.GraphicsControl.newBuilder()
      private Builder() {

      }

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

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

        style_ = 0;

        color_ = emptyFloatList();
        bitField0_ = (bitField0_ & ~0x00000001);
        alpha_ = 0F;

        pointWidth_ = 0F;

        lineWidth_ = 0F;

        visible_ = false;

        return this;
      }

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

      @java.lang.Override
      public Messages.MetaOuterClass.GraphicsControl getDefaultInstanceForType() {
        return Messages.MetaOuterClass.GraphicsControl.getDefaultInstance();
      }

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

      @java.lang.Override
      public Messages.MetaOuterClass.GraphicsControl buildPartial() {
        Messages.MetaOuterClass.GraphicsControl result = new Messages.MetaOuterClass.GraphicsControl(this);
        int from_bitField0_ = bitField0_;
        result.mode_ = mode_;
        result.style_ = style_;
        if (((bitField0_ & 0x00000001) != 0)) {
          color_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.color_ = color_;
        result.alpha_ = alpha_;
        result.pointWidth_ = pointWidth_;
        result.lineWidth_ = lineWidth_;
        result.visible_ = visible_;
        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.MetaOuterClass.GraphicsControl) {
          return mergeFrom((Messages.MetaOuterClass.GraphicsControl)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(Messages.MetaOuterClass.GraphicsControl other) {
        if (other == Messages.MetaOuterClass.GraphicsControl.getDefaultInstance()) return this;
        if (other.getMode() != 0) {
          setMode(other.getMode());
        }
        if (other.getStyle() != 0) {
          setStyle(other.getStyle());
        }
        if (!other.color_.isEmpty()) {
          if (color_.isEmpty()) {
            color_ = other.color_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureColorIsMutable();
            color_.addAll(other.color_);
          }
          onChanged();
        }
        if (other.getAlpha() != 0F) {
          setAlpha(other.getAlpha());
        }
        if (other.getPointWidth() != 0F) {
          setPointWidth(other.getPointWidth());
        }
        if (other.getLineWidth() != 0F) {
          setLineWidth(other.getLineWidth());
        }
        if (other.getVisible() != false) {
          setVisible(other.getVisible());
        }
        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: {
                mode_ = input.readUInt32();

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

                break;
              } // case 16
              case 37: {
                float v = input.readFloat();
                ensureColorIsMutable();
                color_.addFloat(v);
                break;
              } // case 37
              case 34: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureColorIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  color_.addFloat(input.readFloat());
                }
                input.popLimit(limit);
                break;
              } // case 34
              case 45: {
                alpha_ = input.readFloat();

                break;
              } // case 45
              case 53: {
                pointWidth_ = input.readFloat();

                break;
              } // case 53
              case 61: {
                lineWidth_ = input.readFloat();

                break;
              } // case 61
              case 80: {
                visible_ = input.readBool();

                break;
              } // case 80
              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 mode_ ;
      /**
       * <pre>
       * render program enumeration: 0-explicit raster, 1-implicit raster, 2-explicit ray, 3-implicit ray
       * </pre>
       *
       * <code>uint32 mode = 1;</code>
       * @return The mode.
       */
      @java.lang.Override
      public int getMode() {
        return mode_;
      }
      /**
       * <pre>
       * render program enumeration: 0-explicit raster, 1-implicit raster, 2-explicit ray, 3-implicit ray
       * </pre>
       *
       * <code>uint32 mode = 1;</code>
       * @param value The mode to set.
       * @return This builder for chaining.
       */
      public Builder setMode(int value) {
        
        mode_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * render program enumeration: 0-explicit raster, 1-implicit raster, 2-explicit ray, 3-implicit ray
       * </pre>
       *
       * <code>uint32 mode = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearMode() {
        
        mode_ = 0;
        onChanged();
        return this;
      }

      private int style_ ;
      /**
       * <pre>
       * bitfield flags, see common/style.h
       * </pre>
       *
       * <code>uint32 style = 2;</code>
       * @return The style.
       */
      @java.lang.Override
      public int getStyle() {
        return style_;
      }
      /**
       * <pre>
       * bitfield flags, see common/style.h
       * </pre>
       *
       * <code>uint32 style = 2;</code>
       * @param value The style to set.
       * @return This builder for chaining.
       */
      public Builder setStyle(int value) {
        
        style_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * bitfield flags, see common/style.h
       * </pre>
       *
       * <code>uint32 style = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearStyle() {
        
        style_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.FloatList color_ = emptyFloatList();
      private void ensureColorIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          color_ = mutableCopy(color_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated float color = 4;</code>
       * @return A list containing the color.
       */
      public java.util.List<java.lang.Float>
          getColorList() {
        return ((bitField0_ & 0x00000001) != 0) ?
                 java.util.Collections.unmodifiableList(color_) : color_;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated float color = 4;</code>
       * @return The count of color.
       */
      public int getColorCount() {
        return color_.size();
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated float color = 4;</code>
       * @param index The index of the element to return.
       * @return The color at the given index.
       */
      public float getColor(int index) {
        return color_.getFloat(index);
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated float color = 4;</code>
       * @param index The index to set the value at.
       * @param value The color to set.
       * @return This builder for chaining.
       */
      public Builder setColor(
          int index, float value) {
        ensureColorIsMutable();
        color_.setFloat(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated float color = 4;</code>
       * @param value The color to add.
       * @return This builder for chaining.
       */
      public Builder addColor(float value) {
        ensureColorIsMutable();
        color_.addFloat(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated float color = 4;</code>
       * @param values The color to add.
       * @return This builder for chaining.
       */
      public Builder addAllColor(
          java.lang.Iterable<? extends java.lang.Float> values) {
        ensureColorIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, color_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated float color = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearColor() {
        color_ = emptyFloatList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }

      private float alpha_ ;
      /**
       * <code>float alpha = 5;</code>
       * @return The alpha.
       */
      @java.lang.Override
      public float getAlpha() {
        return alpha_;
      }
      /**
       * <code>float alpha = 5;</code>
       * @param value The alpha to set.
       * @return This builder for chaining.
       */
      public Builder setAlpha(float value) {
        
        alpha_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>float alpha = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearAlpha() {
        
        alpha_ = 0F;
        onChanged();
        return this;
      }

      private float pointWidth_ ;
      /**
       * <code>float point_width = 6;</code>
       * @return The pointWidth.
       */
      @java.lang.Override
      public float getPointWidth() {
        return pointWidth_;
      }
      /**
       * <code>float point_width = 6;</code>
       * @param value The pointWidth to set.
       * @return This builder for chaining.
       */
      public Builder setPointWidth(float value) {
        
        pointWidth_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>float point_width = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearPointWidth() {
        
        pointWidth_ = 0F;
        onChanged();
        return this;
      }

      private float lineWidth_ ;
      /**
       * <code>float line_width = 7;</code>
       * @return The lineWidth.
       */
      @java.lang.Override
      public float getLineWidth() {
        return lineWidth_;
      }
      /**
       * <code>float line_width = 7;</code>
       * @param value The lineWidth to set.
       * @return This builder for chaining.
       */
      public Builder setLineWidth(float value) {
        
        lineWidth_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>float line_width = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearLineWidth() {
        
        lineWidth_ = 0F;
        onChanged();
        return this;
      }

      private boolean visible_ ;
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>bool visible = 10;</code>
       * @return The visible.
       */
      @java.lang.Override
      public boolean getVisible() {
        return visible_;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>bool visible = 10;</code>
       * @param value The visible to set.
       * @return This builder for chaining.
       */
      public Builder setVisible(boolean value) {
        
        visible_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>bool visible = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearVisible() {
        
        visible_ = 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.GraphicsControl)
    }

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

    public static Messages.MetaOuterClass.GraphicsControl getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<GraphicsControl>
        PARSER = new com.google.protobuf.AbstractParser<GraphicsControl>() {
      @java.lang.Override
      public GraphicsControl 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<GraphicsControl> parser() {
      return PARSER;
    }

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

    @java.lang.Override
    public Messages.MetaOuterClass.GraphicsControl getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

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

    /**
     * <code>string property_key = 1;</code>
     * @return The propertyKey.
     */
    java.lang.String getPropertyKey();
    /**
     * <code>string property_key = 1;</code>
     * @return The bytes for propertyKey.
     */
    com.google.protobuf.ByteString
        getPropertyKeyBytes();

    /**
     * <code>uint32 color_map = 2;</code>
     * @return The colorMap.
     */
    int getColorMap();

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

    /**
     * <code>bool auto_range = 4;</code>
     * @return The autoRange.
     */
    boolean getAutoRange();

    /**
     * <code>bool use_default_key = 5;</code>
     * @return The useDefaultKey.
     */
    boolean getUseDefaultKey();

    /**
     * <code>bool color_out_of_range = 6;</code>
     * @return The colorOutOfRange.
     */
    boolean getColorOutOfRange();

    /**
     * <code>bool use_magnitude = 7;</code>
     * @return The useMagnitude.
     */
    boolean getUseMagnitude();

    /**
     * <pre>
     * </pre>
     *
     * <code>float displacement_multiplier = 9;</code>
     * @return The displacementMultiplier.
     */
    float getDisplacementMultiplier();

    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated float range = 10;</code>
     * @return A list containing the range.
     */
    java.util.List<java.lang.Float> getRangeList();
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated float range = 10;</code>
     * @return The count of range.
     */
    int getRangeCount();
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated float range = 10;</code>
     * @param index The index of the element to return.
     * @return The range at the given index.
     */
    float getRange(int index);
  }
  /**
   * Protobuf type {@code Messages.Representation}
   */
  public static final class Representation extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:Messages.Representation)
      RepresentationOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Representation.newBuilder() to construct.
    private Representation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Representation() {
      propertyKey_ = "";
      range_ = emptyFloatList();
    }

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

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

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Messages.MetaOuterClass.internal_static_Messages_Representation_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              Messages.MetaOuterClass.Representation.class, Messages.MetaOuterClass.Representation.Builder.class);
    }

    public static final int PROPERTY_KEY_FIELD_NUMBER = 1;
    private volatile java.lang.Object propertyKey_;
    /**
     * <code>string property_key = 1;</code>
     * @return The propertyKey.
     */
    @java.lang.Override
    public java.lang.String getPropertyKey() {
      java.lang.Object ref = propertyKey_;
      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();
        propertyKey_ = s;
        return s;
      }
    }
    /**
     * <code>string property_key = 1;</code>
     * @return The bytes for propertyKey.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getPropertyKeyBytes() {
      java.lang.Object ref = propertyKey_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        propertyKey_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int COLOR_MAP_FIELD_NUMBER = 2;
    private int colorMap_;
    /**
     * <code>uint32 color_map = 2;</code>
     * @return The colorMap.
     */
    @java.lang.Override
    public int getColorMap() {
      return colorMap_;
    }

    public static final int COMPONENT_FIELD_NUMBER = 3;
    private int component_;
    /**
     * <code>uint32 component = 3;</code>
     * @return The component.
     */
    @java.lang.Override
    public int getComponent() {
      return component_;
    }

    public static final int AUTO_RANGE_FIELD_NUMBER = 4;
    private boolean autoRange_;
    /**
     * <code>bool auto_range = 4;</code>
     * @return The autoRange.
     */
    @java.lang.Override
    public boolean getAutoRange() {
      return autoRange_;
    }

    public static final int USE_DEFAULT_KEY_FIELD_NUMBER = 5;
    private boolean useDefaultKey_;
    /**
     * <code>bool use_default_key = 5;</code>
     * @return The useDefaultKey.
     */
    @java.lang.Override
    public boolean getUseDefaultKey() {
      return useDefaultKey_;
    }

    public static final int COLOR_OUT_OF_RANGE_FIELD_NUMBER = 6;
    private boolean colorOutOfRange_;
    /**
     * <code>bool color_out_of_range = 6;</code>
     * @return The colorOutOfRange.
     */
    @java.lang.Override
    public boolean getColorOutOfRange() {
      return colorOutOfRange_;
    }

    public static final int USE_MAGNITUDE_FIELD_NUMBER = 7;
    private boolean useMagnitude_;
    /**
     * <code>bool use_magnitude = 7;</code>
     * @return The useMagnitude.
     */
    @java.lang.Override
    public boolean getUseMagnitude() {
      return useMagnitude_;
    }

    public static final int DISPLACEMENT_MULTIPLIER_FIELD_NUMBER = 9;
    private float displacementMultiplier_;
    /**
     * <pre>
     * </pre>
     *
     * <code>float displacement_multiplier = 9;</code>
     * @return The displacementMultiplier.
     */
    @java.lang.Override
    public float getDisplacementMultiplier() {
      return displacementMultiplier_;
    }

    public static final int RANGE_FIELD_NUMBER = 10;
    private com.google.protobuf.Internal.FloatList range_;
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated float range = 10;</code>
     * @return A list containing the range.
     */
    @java.lang.Override
    public java.util.List<java.lang.Float>
        getRangeList() {
      return range_;
    }
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated float range = 10;</code>
     * @return The count of range.
     */
    public int getRangeCount() {
      return range_.size();
    }
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated float range = 10;</code>
     * @param index The index of the element to return.
     * @return The range at the given index.
     */
    public float getRange(int index) {
      return range_.getFloat(index);
    }
    private int rangeMemoizedSerializedSize = -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(propertyKey_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, propertyKey_);
      }
      if (colorMap_ != 0) {
        output.writeUInt32(2, colorMap_);
      }
      if (component_ != 0) {
        output.writeUInt32(3, component_);
      }
      if (autoRange_ != false) {
        output.writeBool(4, autoRange_);
      }
      if (useDefaultKey_ != false) {
        output.writeBool(5, useDefaultKey_);
      }
      if (colorOutOfRange_ != false) {
        output.writeBool(6, colorOutOfRange_);
      }
      if (useMagnitude_ != false) {
        output.writeBool(7, useMagnitude_);
      }
      if (java.lang.Float.floatToRawIntBits(displacementMultiplier_) != 0) {
        output.writeFloat(9, displacementMultiplier_);
      }
      if (getRangeList().size() > 0) {
        output.writeUInt32NoTag(82);
        output.writeUInt32NoTag(rangeMemoizedSerializedSize);
      }
      for (int i = 0; i < range_.size(); i++) {
        output.writeFloatNoTag(range_.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(propertyKey_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, propertyKey_);
      }
      if (colorMap_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, colorMap_);
      }
      if (component_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, component_);
      }
      if (autoRange_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, autoRange_);
      }
      if (useDefaultKey_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, useDefaultKey_);
      }
      if (colorOutOfRange_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, colorOutOfRange_);
      }
      if (useMagnitude_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(7, useMagnitude_);
      }
      if (java.lang.Float.floatToRawIntBits(displacementMultiplier_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(9, displacementMultiplier_);
      }
      {
        int dataSize = 0;
        dataSize = 4 * getRangeList().size();
        size += dataSize;
        if (!getRangeList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        rangeMemoizedSerializedSize = 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.MetaOuterClass.Representation)) {
        return super.equals(obj);
      }
      Messages.MetaOuterClass.Representation other = (Messages.MetaOuterClass.Representation) obj;

      if (!getPropertyKey()
          .equals(other.getPropertyKey())) return false;
      if (getColorMap()
          != other.getColorMap()) return false;
      if (getComponent()
          != other.getComponent()) return false;
      if (getAutoRange()
          != other.getAutoRange()) return false;
      if (getUseDefaultKey()
          != other.getUseDefaultKey()) return false;
      if (getColorOutOfRange()
          != other.getColorOutOfRange()) return false;
      if (getUseMagnitude()
          != other.getUseMagnitude()) return false;
      if (java.lang.Float.floatToIntBits(getDisplacementMultiplier())
          != java.lang.Float.floatToIntBits(
              other.getDisplacementMultiplier())) return false;
      if (!getRangeList()
          .equals(other.getRangeList())) 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) + PROPERTY_KEY_FIELD_NUMBER;
      hash = (53 * hash) + getPropertyKey().hashCode();
      hash = (37 * hash) + COLOR_MAP_FIELD_NUMBER;
      hash = (53 * hash) + getColorMap();
      hash = (37 * hash) + COMPONENT_FIELD_NUMBER;
      hash = (53 * hash) + getComponent();
      hash = (37 * hash) + AUTO_RANGE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getAutoRange());
      hash = (37 * hash) + USE_DEFAULT_KEY_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getUseDefaultKey());
      hash = (37 * hash) + COLOR_OUT_OF_RANGE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getColorOutOfRange());
      hash = (37 * hash) + USE_MAGNITUDE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getUseMagnitude());
      hash = (37 * hash) + DISPLACEMENT_MULTIPLIER_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getDisplacementMultiplier());
      if (getRangeCount() > 0) {
        hash = (37 * hash) + RANGE_FIELD_NUMBER;
        hash = (53 * hash) + getRangeList().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static Messages.MetaOuterClass.Representation parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.Representation parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.Representation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.Representation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.Representation parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.Representation parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.Representation parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.Representation 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.MetaOuterClass.Representation parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.Representation 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.MetaOuterClass.Representation parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.Representation 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.MetaOuterClass.Representation 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.Representation}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:Messages.Representation)
        Messages.MetaOuterClass.RepresentationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Messages.MetaOuterClass.internal_static_Messages_Representation_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Messages.MetaOuterClass.internal_static_Messages_Representation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Messages.MetaOuterClass.Representation.class, Messages.MetaOuterClass.Representation.Builder.class);
      }

      // Construct using Messages.MetaOuterClass.Representation.newBuilder()
      private Builder() {

      }

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

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

        colorMap_ = 0;

        component_ = 0;

        autoRange_ = false;

        useDefaultKey_ = false;

        colorOutOfRange_ = false;

        useMagnitude_ = false;

        displacementMultiplier_ = 0F;

        range_ = emptyFloatList();
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

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

      @java.lang.Override
      public Messages.MetaOuterClass.Representation getDefaultInstanceForType() {
        return Messages.MetaOuterClass.Representation.getDefaultInstance();
      }

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

      @java.lang.Override
      public Messages.MetaOuterClass.Representation buildPartial() {
        Messages.MetaOuterClass.Representation result = new Messages.MetaOuterClass.Representation(this);
        int from_bitField0_ = bitField0_;
        result.propertyKey_ = propertyKey_;
        result.colorMap_ = colorMap_;
        result.component_ = component_;
        result.autoRange_ = autoRange_;
        result.useDefaultKey_ = useDefaultKey_;
        result.colorOutOfRange_ = colorOutOfRange_;
        result.useMagnitude_ = useMagnitude_;
        result.displacementMultiplier_ = displacementMultiplier_;
        if (((bitField0_ & 0x00000001) != 0)) {
          range_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.range_ = range_;
        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.MetaOuterClass.Representation) {
          return mergeFrom((Messages.MetaOuterClass.Representation)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(Messages.MetaOuterClass.Representation other) {
        if (other == Messages.MetaOuterClass.Representation.getDefaultInstance()) return this;
        if (!other.getPropertyKey().isEmpty()) {
          propertyKey_ = other.propertyKey_;
          onChanged();
        }
        if (other.getColorMap() != 0) {
          setColorMap(other.getColorMap());
        }
        if (other.getComponent() != 0) {
          setComponent(other.getComponent());
        }
        if (other.getAutoRange() != false) {
          setAutoRange(other.getAutoRange());
        }
        if (other.getUseDefaultKey() != false) {
          setUseDefaultKey(other.getUseDefaultKey());
        }
        if (other.getColorOutOfRange() != false) {
          setColorOutOfRange(other.getColorOutOfRange());
        }
        if (other.getUseMagnitude() != false) {
          setUseMagnitude(other.getUseMagnitude());
        }
        if (other.getDisplacementMultiplier() != 0F) {
          setDisplacementMultiplier(other.getDisplacementMultiplier());
        }
        if (!other.range_.isEmpty()) {
          if (range_.isEmpty()) {
            range_ = other.range_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureRangeIsMutable();
            range_.addAll(other.range_);
          }
          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: {
                propertyKey_ = input.readStringRequireUtf8();

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

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

                break;
              } // case 24
              case 32: {
                autoRange_ = input.readBool();

                break;
              } // case 32
              case 40: {
                useDefaultKey_ = input.readBool();

                break;
              } // case 40
              case 48: {
                colorOutOfRange_ = input.readBool();

                break;
              } // case 48
              case 56: {
                useMagnitude_ = input.readBool();

                break;
              } // case 56
              case 77: {
                displacementMultiplier_ = input.readFloat();

                break;
              } // case 77
              case 85: {
                float v = input.readFloat();
                ensureRangeIsMutable();
                range_.addFloat(v);
                break;
              } // case 85
              case 82: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureRangeIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  range_.addFloat(input.readFloat());
                }
                input.popLimit(limit);
                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 bitField0_;

      private java.lang.Object propertyKey_ = "";
      /**
       * <code>string property_key = 1;</code>
       * @return The propertyKey.
       */
      public java.lang.String getPropertyKey() {
        java.lang.Object ref = propertyKey_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          propertyKey_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string property_key = 1;</code>
       * @return The bytes for propertyKey.
       */
      public com.google.protobuf.ByteString
          getPropertyKeyBytes() {
        java.lang.Object ref = propertyKey_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          propertyKey_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string property_key = 1;</code>
       * @param value The propertyKey to set.
       * @return This builder for chaining.
       */
      public Builder setPropertyKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        propertyKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string property_key = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearPropertyKey() {
        
        propertyKey_ = getDefaultInstance().getPropertyKey();
        onChanged();
        return this;
      }
      /**
       * <code>string property_key = 1;</code>
       * @param value The bytes for propertyKey to set.
       * @return This builder for chaining.
       */
      public Builder setPropertyKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        propertyKey_ = value;
        onChanged();
        return this;
      }

      private int colorMap_ ;
      /**
       * <code>uint32 color_map = 2;</code>
       * @return The colorMap.
       */
      @java.lang.Override
      public int getColorMap() {
        return colorMap_;
      }
      /**
       * <code>uint32 color_map = 2;</code>
       * @param value The colorMap to set.
       * @return This builder for chaining.
       */
      public Builder setColorMap(int value) {
        
        colorMap_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint32 color_map = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearColorMap() {
        
        colorMap_ = 0;
        onChanged();
        return this;
      }

      private int component_ ;
      /**
       * <code>uint32 component = 3;</code>
       * @return The component.
       */
      @java.lang.Override
      public int getComponent() {
        return component_;
      }
      /**
       * <code>uint32 component = 3;</code>
       * @param value The component to set.
       * @return This builder for chaining.
       */
      public Builder setComponent(int value) {
        
        component_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint32 component = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearComponent() {
        
        component_ = 0;
        onChanged();
        return this;
      }

      private boolean autoRange_ ;
      /**
       * <code>bool auto_range = 4;</code>
       * @return The autoRange.
       */
      @java.lang.Override
      public boolean getAutoRange() {
        return autoRange_;
      }
      /**
       * <code>bool auto_range = 4;</code>
       * @param value The autoRange to set.
       * @return This builder for chaining.
       */
      public Builder setAutoRange(boolean value) {
        
        autoRange_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool auto_range = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearAutoRange() {
        
        autoRange_ = false;
        onChanged();
        return this;
      }

      private boolean useDefaultKey_ ;
      /**
       * <code>bool use_default_key = 5;</code>
       * @return The useDefaultKey.
       */
      @java.lang.Override
      public boolean getUseDefaultKey() {
        return useDefaultKey_;
      }
      /**
       * <code>bool use_default_key = 5;</code>
       * @param value The useDefaultKey to set.
       * @return This builder for chaining.
       */
      public Builder setUseDefaultKey(boolean value) {
        
        useDefaultKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool use_default_key = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearUseDefaultKey() {
        
        useDefaultKey_ = false;
        onChanged();
        return this;
      }

      private boolean colorOutOfRange_ ;
      /**
       * <code>bool color_out_of_range = 6;</code>
       * @return The colorOutOfRange.
       */
      @java.lang.Override
      public boolean getColorOutOfRange() {
        return colorOutOfRange_;
      }
      /**
       * <code>bool color_out_of_range = 6;</code>
       * @param value The colorOutOfRange to set.
       * @return This builder for chaining.
       */
      public Builder setColorOutOfRange(boolean value) {
        
        colorOutOfRange_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool color_out_of_range = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearColorOutOfRange() {
        
        colorOutOfRange_ = false;
        onChanged();
        return this;
      }

      private boolean useMagnitude_ ;
      /**
       * <code>bool use_magnitude = 7;</code>
       * @return The useMagnitude.
       */
      @java.lang.Override
      public boolean getUseMagnitude() {
        return useMagnitude_;
      }
      /**
       * <code>bool use_magnitude = 7;</code>
       * @param value The useMagnitude to set.
       * @return This builder for chaining.
       */
      public Builder setUseMagnitude(boolean value) {
        
        useMagnitude_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool use_magnitude = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearUseMagnitude() {
        
        useMagnitude_ = false;
        onChanged();
        return this;
      }

      private float displacementMultiplier_ ;
      /**
       * <pre>
       * </pre>
       *
       * <code>float displacement_multiplier = 9;</code>
       * @return The displacementMultiplier.
       */
      @java.lang.Override
      public float getDisplacementMultiplier() {
        return displacementMultiplier_;
      }
      /**
       * <pre>
       * </pre>
       *
       * <code>float displacement_multiplier = 9;</code>
       * @param value The displacementMultiplier to set.
       * @return This builder for chaining.
       */
      public Builder setDisplacementMultiplier(float value) {
        
        displacementMultiplier_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * </pre>
       *
       * <code>float displacement_multiplier = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearDisplacementMultiplier() {
        
        displacementMultiplier_ = 0F;
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.FloatList range_ = emptyFloatList();
      private void ensureRangeIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          range_ = mutableCopy(range_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated float range = 10;</code>
       * @return A list containing the range.
       */
      public java.util.List<java.lang.Float>
          getRangeList() {
        return ((bitField0_ & 0x00000001) != 0) ?
                 java.util.Collections.unmodifiableList(range_) : range_;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated float range = 10;</code>
       * @return The count of range.
       */
      public int getRangeCount() {
        return range_.size();
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated float range = 10;</code>
       * @param index The index of the element to return.
       * @return The range at the given index.
       */
      public float getRange(int index) {
        return range_.getFloat(index);
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated float range = 10;</code>
       * @param index The index to set the value at.
       * @param value The range to set.
       * @return This builder for chaining.
       */
      public Builder setRange(
          int index, float value) {
        ensureRangeIsMutable();
        range_.setFloat(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated float range = 10;</code>
       * @param value The range to add.
       * @return This builder for chaining.
       */
      public Builder addRange(float value) {
        ensureRangeIsMutable();
        range_.addFloat(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated float range = 10;</code>
       * @param values The range to add.
       * @return This builder for chaining.
       */
      public Builder addAllRange(
          java.lang.Iterable<? extends java.lang.Float> values) {
        ensureRangeIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, range_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated float range = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearRange() {
        range_ = emptyFloatList();
        bitField0_ = (bitField0_ & ~0x00000001);
        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.Representation)
    }

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

    public static Messages.MetaOuterClass.Representation getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Representation>
        PARSER = new com.google.protobuf.AbstractParser<Representation>() {
      @java.lang.Override
      public Representation 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<Representation> parser() {
      return PARSER;
    }

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

    @java.lang.Override
    public Messages.MetaOuterClass.Representation getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

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

    /**
     * <code>.Messages.Zone region = 1;</code>
     * @return Whether the region field is set.
     */
    boolean hasRegion();
    /**
     * <code>.Messages.Zone region = 1;</code>
     * @return The region.
     */
    Messages.Spatial.Zone getRegion();
    /**
     * <code>.Messages.Zone region = 1;</code>
     */
    Messages.Spatial.ZoneOrBuilder getRegionOrBuilder();

    /**
     * <code>.Messages.GraphicsControl control = 2;</code>
     * @return Whether the control field is set.
     */
    boolean hasControl();
    /**
     * <code>.Messages.GraphicsControl control = 2;</code>
     * @return The control.
     */
    Messages.MetaOuterClass.GraphicsControl getControl();
    /**
     * <code>.Messages.GraphicsControl control = 2;</code>
     */
    Messages.MetaOuterClass.GraphicsControlOrBuilder getControlOrBuilder();

    /**
     * <code>.Messages.Representation representation = 3;</code>
     * @return Whether the representation field is set.
     */
    boolean hasRepresentation();
    /**
     * <code>.Messages.Representation representation = 3;</code>
     * @return The representation.
     */
    Messages.MetaOuterClass.Representation getRepresentation();
    /**
     * <code>.Messages.Representation representation = 3;</code>
     */
    Messages.MetaOuterClass.RepresentationOrBuilder getRepresentationOrBuilder();

    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated uint32 points = 5;</code>
     * @return A list containing the points.
     */
    java.util.List<java.lang.Integer> getPointsList();
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated uint32 points = 5;</code>
     * @return The count of points.
     */
    int getPointsCount();
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated uint32 points = 5;</code>
     * @param index The index of the element to return.
     * @return The points at the given index.
     */
    int getPoints(int index);

    /**
     * <code>repeated uint32 lines = 6;</code>
     * @return A list containing the lines.
     */
    java.util.List<java.lang.Integer> getLinesList();
    /**
     * <code>repeated uint32 lines = 6;</code>
     * @return The count of lines.
     */
    int getLinesCount();
    /**
     * <code>repeated uint32 lines = 6;</code>
     * @param index The index of the element to return.
     * @return The lines at the given index.
     */
    int getLines(int index);

    /**
     * <code>repeated uint32 triangles = 7;</code>
     * @return A list containing the triangles.
     */
    java.util.List<java.lang.Integer> getTrianglesList();
    /**
     * <code>repeated uint32 triangles = 7;</code>
     * @return The count of triangles.
     */
    int getTrianglesCount();
    /**
     * <code>repeated uint32 triangles = 7;</code>
     * @param index The index of the element to return.
     * @return The triangles at the given index.
     */
    int getTriangles(int index);

    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 indices_per_element = 8;</code>
     * @return A list containing the indicesPerElement.
     */
    java.util.List<java.lang.Integer> getIndicesPerElementList();
    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 indices_per_element = 8;</code>
     * @return The count of indicesPerElement.
     */
    int getIndicesPerElementCount();
    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 indices_per_element = 8;</code>
     * @param index The index of the element to return.
     * @return The indicesPerElement at the given index.
     */
    int getIndicesPerElement(int index);

    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 elements_to_indices = 9;</code>
     * @return A list containing the elementsToIndices.
     */
    java.util.List<java.lang.Integer> getElementsToIndicesList();
    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 elements_to_indices = 9;</code>
     * @return The count of elementsToIndices.
     */
    int getElementsToIndicesCount();
    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 elements_to_indices = 9;</code>
     * @param index The index of the element to return.
     * @return The elementsToIndices at the given index.
     */
    int getElementsToIndices(int index);

    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 indices_to_elements = 10;</code>
     * @return A list containing the indicesToElements.
     */
    java.util.List<java.lang.Integer> getIndicesToElementsList();
    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 indices_to_elements = 10;</code>
     * @return The count of indicesToElements.
     */
    int getIndicesToElementsCount();
    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 indices_to_elements = 10;</code>
     * @param index The index of the element to return.
     * @return The indicesToElements at the given index.
     */
    int getIndicesToElements(int index);

    /**
     * <pre>
     * optional data such as displacement vectors and positions (if not nodal positions)
     * </pre>
     *
     * <code>repeated .Messages.Vector32 extras = 15;</code>
     */
    java.util.List<Messages.Vector.Vector32> 
        getExtrasList();
    /**
     * <pre>
     * optional data such as displacement vectors and positions (if not nodal positions)
     * </pre>
     *
     * <code>repeated .Messages.Vector32 extras = 15;</code>
     */
    Messages.Vector.Vector32 getExtras(int index);
    /**
     * <pre>
     * optional data such as displacement vectors and positions (if not nodal positions)
     * </pre>
     *
     * <code>repeated .Messages.Vector32 extras = 15;</code>
     */
    int getExtrasCount();
    /**
     * <pre>
     * optional data such as displacement vectors and positions (if not nodal positions)
     * </pre>
     *
     * <code>repeated .Messages.Vector32 extras = 15;</code>
     */
    java.util.List<? extends Messages.Vector.Vector32OrBuilder> 
        getExtrasOrBuilderList();
    /**
     * <pre>
     * optional data such as displacement vectors and positions (if not nodal positions)
     * </pre>
     *
     * <code>repeated .Messages.Vector32 extras = 15;</code>
     */
    Messages.Vector.Vector32OrBuilder getExtrasOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code Messages.Visual}
   */
  public static final class Visual extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:Messages.Visual)
      VisualOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Visual.newBuilder() to construct.
    private Visual(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Visual() {
      points_ = emptyIntList();
      lines_ = emptyIntList();
      triangles_ = emptyIntList();
      indicesPerElement_ = emptyIntList();
      elementsToIndices_ = emptyIntList();
      indicesToElements_ = emptyIntList();
      extras_ = java.util.Collections.emptyList();
    }

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

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

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Messages.MetaOuterClass.internal_static_Messages_Visual_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              Messages.MetaOuterClass.Visual.class, Messages.MetaOuterClass.Visual.Builder.class);
    }

    public static final int REGION_FIELD_NUMBER = 1;
    private Messages.Spatial.Zone region_;
    /**
     * <code>.Messages.Zone region = 1;</code>
     * @return Whether the region field is set.
     */
    @java.lang.Override
    public boolean hasRegion() {
      return region_ != null;
    }
    /**
     * <code>.Messages.Zone region = 1;</code>
     * @return The region.
     */
    @java.lang.Override
    public Messages.Spatial.Zone getRegion() {
      return region_ == null ? Messages.Spatial.Zone.getDefaultInstance() : region_;
    }
    /**
     * <code>.Messages.Zone region = 1;</code>
     */
    @java.lang.Override
    public Messages.Spatial.ZoneOrBuilder getRegionOrBuilder() {
      return getRegion();
    }

    public static final int CONTROL_FIELD_NUMBER = 2;
    private Messages.MetaOuterClass.GraphicsControl control_;
    /**
     * <code>.Messages.GraphicsControl control = 2;</code>
     * @return Whether the control field is set.
     */
    @java.lang.Override
    public boolean hasControl() {
      return control_ != null;
    }
    /**
     * <code>.Messages.GraphicsControl control = 2;</code>
     * @return The control.
     */
    @java.lang.Override
    public Messages.MetaOuterClass.GraphicsControl getControl() {
      return control_ == null ? Messages.MetaOuterClass.GraphicsControl.getDefaultInstance() : control_;
    }
    /**
     * <code>.Messages.GraphicsControl control = 2;</code>
     */
    @java.lang.Override
    public Messages.MetaOuterClass.GraphicsControlOrBuilder getControlOrBuilder() {
      return getControl();
    }

    public static final int REPRESENTATION_FIELD_NUMBER = 3;
    private Messages.MetaOuterClass.Representation representation_;
    /**
     * <code>.Messages.Representation representation = 3;</code>
     * @return Whether the representation field is set.
     */
    @java.lang.Override
    public boolean hasRepresentation() {
      return representation_ != null;
    }
    /**
     * <code>.Messages.Representation representation = 3;</code>
     * @return The representation.
     */
    @java.lang.Override
    public Messages.MetaOuterClass.Representation getRepresentation() {
      return representation_ == null ? Messages.MetaOuterClass.Representation.getDefaultInstance() : representation_;
    }
    /**
     * <code>.Messages.Representation representation = 3;</code>
     */
    @java.lang.Override
    public Messages.MetaOuterClass.RepresentationOrBuilder getRepresentationOrBuilder() {
      return getRepresentation();
    }

    public static final int POINTS_FIELD_NUMBER = 5;
    private com.google.protobuf.Internal.IntList points_;
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated uint32 points = 5;</code>
     * @return A list containing the points.
     */
    @java.lang.Override
    public java.util.List<java.lang.Integer>
        getPointsList() {
      return points_;
    }
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated uint32 points = 5;</code>
     * @return The count of points.
     */
    public int getPointsCount() {
      return points_.size();
    }
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>repeated uint32 points = 5;</code>
     * @param index The index of the element to return.
     * @return The points at the given index.
     */
    public int getPoints(int index) {
      return points_.getInt(index);
    }
    private int pointsMemoizedSerializedSize = -1;

    public static final int LINES_FIELD_NUMBER = 6;
    private com.google.protobuf.Internal.IntList lines_;
    /**
     * <code>repeated uint32 lines = 6;</code>
     * @return A list containing the lines.
     */
    @java.lang.Override
    public java.util.List<java.lang.Integer>
        getLinesList() {
      return lines_;
    }
    /**
     * <code>repeated uint32 lines = 6;</code>
     * @return The count of lines.
     */
    public int getLinesCount() {
      return lines_.size();
    }
    /**
     * <code>repeated uint32 lines = 6;</code>
     * @param index The index of the element to return.
     * @return The lines at the given index.
     */
    public int getLines(int index) {
      return lines_.getInt(index);
    }
    private int linesMemoizedSerializedSize = -1;

    public static final int TRIANGLES_FIELD_NUMBER = 7;
    private com.google.protobuf.Internal.IntList triangles_;
    /**
     * <code>repeated uint32 triangles = 7;</code>
     * @return A list containing the triangles.
     */
    @java.lang.Override
    public java.util.List<java.lang.Integer>
        getTrianglesList() {
      return triangles_;
    }
    /**
     * <code>repeated uint32 triangles = 7;</code>
     * @return The count of triangles.
     */
    public int getTrianglesCount() {
      return triangles_.size();
    }
    /**
     * <code>repeated uint32 triangles = 7;</code>
     * @param index The index of the element to return.
     * @return The triangles at the given index.
     */
    public int getTriangles(int index) {
      return triangles_.getInt(index);
    }
    private int trianglesMemoizedSerializedSize = -1;

    public static final int INDICES_PER_ELEMENT_FIELD_NUMBER = 8;
    private com.google.protobuf.Internal.IntList indicesPerElement_;
    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 indices_per_element = 8;</code>
     * @return A list containing the indicesPerElement.
     */
    @java.lang.Override
    public java.util.List<java.lang.Integer>
        getIndicesPerElementList() {
      return indicesPerElement_;
    }
    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 indices_per_element = 8;</code>
     * @return The count of indicesPerElement.
     */
    public int getIndicesPerElementCount() {
      return indicesPerElement_.size();
    }
    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 indices_per_element = 8;</code>
     * @param index The index of the element to return.
     * @return The indicesPerElement at the given index.
     */
    public int getIndicesPerElement(int index) {
      return indicesPerElement_.getInt(index);
    }
    private int indicesPerElementMemoizedSerializedSize = -1;

    public static final int ELEMENTS_TO_INDICES_FIELD_NUMBER = 9;
    private com.google.protobuf.Internal.IntList elementsToIndices_;
    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 elements_to_indices = 9;</code>
     * @return A list containing the elementsToIndices.
     */
    @java.lang.Override
    public java.util.List<java.lang.Integer>
        getElementsToIndicesList() {
      return elementsToIndices_;
    }
    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 elements_to_indices = 9;</code>
     * @return The count of elementsToIndices.
     */
    public int getElementsToIndicesCount() {
      return elementsToIndices_.size();
    }
    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 elements_to_indices = 9;</code>
     * @param index The index of the element to return.
     * @return The elementsToIndices at the given index.
     */
    public int getElementsToIndices(int index) {
      return elementsToIndices_.getInt(index);
    }
    private int elementsToIndicesMemoizedSerializedSize = -1;

    public static final int INDICES_TO_ELEMENTS_FIELD_NUMBER = 10;
    private com.google.protobuf.Internal.IntList indicesToElements_;
    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 indices_to_elements = 10;</code>
     * @return A list containing the indicesToElements.
     */
    @java.lang.Override
    public java.util.List<java.lang.Integer>
        getIndicesToElementsList() {
      return indicesToElements_;
    }
    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 indices_to_elements = 10;</code>
     * @return The count of indicesToElements.
     */
    public int getIndicesToElementsCount() {
      return indicesToElements_.size();
    }
    /**
     * <pre>
     * only used on composite elements (e.g. QUAD4 represented using triangles)
     * </pre>
     *
     * <code>repeated uint32 indices_to_elements = 10;</code>
     * @param index The index of the element to return.
     * @return The indicesToElements at the given index.
     */
    public int getIndicesToElements(int index) {
      return indicesToElements_.getInt(index);
    }
    private int indicesToElementsMemoizedSerializedSize = -1;

    public static final int EXTRAS_FIELD_NUMBER = 15;
    private java.util.List<Messages.Vector.Vector32> extras_;
    /**
     * <pre>
     * optional data such as displacement vectors and positions (if not nodal positions)
     * </pre>
     *
     * <code>repeated .Messages.Vector32 extras = 15;</code>
     */
    @java.lang.Override
    public java.util.List<Messages.Vector.Vector32> getExtrasList() {
      return extras_;
    }
    /**
     * <pre>
     * optional data such as displacement vectors and positions (if not nodal positions)
     * </pre>
     *
     * <code>repeated .Messages.Vector32 extras = 15;</code>
     */
    @java.lang.Override
    public java.util.List<? extends Messages.Vector.Vector32OrBuilder> 
        getExtrasOrBuilderList() {
      return extras_;
    }
    /**
     * <pre>
     * optional data such as displacement vectors and positions (if not nodal positions)
     * </pre>
     *
     * <code>repeated .Messages.Vector32 extras = 15;</code>
     */
    @java.lang.Override
    public int getExtrasCount() {
      return extras_.size();
    }
    /**
     * <pre>
     * optional data such as displacement vectors and positions (if not nodal positions)
     * </pre>
     *
     * <code>repeated .Messages.Vector32 extras = 15;</code>
     */
    @java.lang.Override
    public Messages.Vector.Vector32 getExtras(int index) {
      return extras_.get(index);
    }
    /**
     * <pre>
     * optional data such as displacement vectors and positions (if not nodal positions)
     * </pre>
     *
     * <code>repeated .Messages.Vector32 extras = 15;</code>
     */
    @java.lang.Override
    public Messages.Vector.Vector32OrBuilder getExtrasOrBuilder(
        int index) {
      return extras_.get(index);
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (region_ != null) {
        output.writeMessage(1, getRegion());
      }
      if (control_ != null) {
        output.writeMessage(2, getControl());
      }
      if (representation_ != null) {
        output.writeMessage(3, getRepresentation());
      }
      if (getPointsList().size() > 0) {
        output.writeUInt32NoTag(42);
        output.writeUInt32NoTag(pointsMemoizedSerializedSize);
      }
      for (int i = 0; i < points_.size(); i++) {
        output.writeUInt32NoTag(points_.getInt(i));
      }
      if (getLinesList().size() > 0) {
        output.writeUInt32NoTag(50);
        output.writeUInt32NoTag(linesMemoizedSerializedSize);
      }
      for (int i = 0; i < lines_.size(); i++) {
        output.writeUInt32NoTag(lines_.getInt(i));
      }
      if (getTrianglesList().size() > 0) {
        output.writeUInt32NoTag(58);
        output.writeUInt32NoTag(trianglesMemoizedSerializedSize);
      }
      for (int i = 0; i < triangles_.size(); i++) {
        output.writeUInt32NoTag(triangles_.getInt(i));
      }
      if (getIndicesPerElementList().size() > 0) {
        output.writeUInt32NoTag(66);
        output.writeUInt32NoTag(indicesPerElementMemoizedSerializedSize);
      }
      for (int i = 0; i < indicesPerElement_.size(); i++) {
        output.writeUInt32NoTag(indicesPerElement_.getInt(i));
      }
      if (getElementsToIndicesList().size() > 0) {
        output.writeUInt32NoTag(74);
        output.writeUInt32NoTag(elementsToIndicesMemoizedSerializedSize);
      }
      for (int i = 0; i < elementsToIndices_.size(); i++) {
        output.writeUInt32NoTag(elementsToIndices_.getInt(i));
      }
      if (getIndicesToElementsList().size() > 0) {
        output.writeUInt32NoTag(82);
        output.writeUInt32NoTag(indicesToElementsMemoizedSerializedSize);
      }
      for (int i = 0; i < indicesToElements_.size(); i++) {
        output.writeUInt32NoTag(indicesToElements_.getInt(i));
      }
      for (int i = 0; i < extras_.size(); i++) {
        output.writeMessage(15, extras_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (region_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getRegion());
      }
      if (control_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getControl());
      }
      if (representation_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getRepresentation());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < points_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(points_.getInt(i));
        }
        size += dataSize;
        if (!getPointsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        pointsMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < lines_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(lines_.getInt(i));
        }
        size += dataSize;
        if (!getLinesList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        linesMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < triangles_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(triangles_.getInt(i));
        }
        size += dataSize;
        if (!getTrianglesList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        trianglesMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < indicesPerElement_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(indicesPerElement_.getInt(i));
        }
        size += dataSize;
        if (!getIndicesPerElementList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        indicesPerElementMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < elementsToIndices_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(elementsToIndices_.getInt(i));
        }
        size += dataSize;
        if (!getElementsToIndicesList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        elementsToIndicesMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < indicesToElements_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(indicesToElements_.getInt(i));
        }
        size += dataSize;
        if (!getIndicesToElementsList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        indicesToElementsMemoizedSerializedSize = dataSize;
      }
      for (int i = 0; i < extras_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(15, extras_.get(i));
      }
      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.MetaOuterClass.Visual)) {
        return super.equals(obj);
      }
      Messages.MetaOuterClass.Visual other = (Messages.MetaOuterClass.Visual) obj;

      if (hasRegion() != other.hasRegion()) return false;
      if (hasRegion()) {
        if (!getRegion()
            .equals(other.getRegion())) return false;
      }
      if (hasControl() != other.hasControl()) return false;
      if (hasControl()) {
        if (!getControl()
            .equals(other.getControl())) return false;
      }
      if (hasRepresentation() != other.hasRepresentation()) return false;
      if (hasRepresentation()) {
        if (!getRepresentation()
            .equals(other.getRepresentation())) return false;
      }
      if (!getPointsList()
          .equals(other.getPointsList())) return false;
      if (!getLinesList()
          .equals(other.getLinesList())) return false;
      if (!getTrianglesList()
          .equals(other.getTrianglesList())) return false;
      if (!getIndicesPerElementList()
          .equals(other.getIndicesPerElementList())) return false;
      if (!getElementsToIndicesList()
          .equals(other.getElementsToIndicesList())) return false;
      if (!getIndicesToElementsList()
          .equals(other.getIndicesToElementsList())) return false;
      if (!getExtrasList()
          .equals(other.getExtrasList())) 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();
      if (hasRegion()) {
        hash = (37 * hash) + REGION_FIELD_NUMBER;
        hash = (53 * hash) + getRegion().hashCode();
      }
      if (hasControl()) {
        hash = (37 * hash) + CONTROL_FIELD_NUMBER;
        hash = (53 * hash) + getControl().hashCode();
      }
      if (hasRepresentation()) {
        hash = (37 * hash) + REPRESENTATION_FIELD_NUMBER;
        hash = (53 * hash) + getRepresentation().hashCode();
      }
      if (getPointsCount() > 0) {
        hash = (37 * hash) + POINTS_FIELD_NUMBER;
        hash = (53 * hash) + getPointsList().hashCode();
      }
      if (getLinesCount() > 0) {
        hash = (37 * hash) + LINES_FIELD_NUMBER;
        hash = (53 * hash) + getLinesList().hashCode();
      }
      if (getTrianglesCount() > 0) {
        hash = (37 * hash) + TRIANGLES_FIELD_NUMBER;
        hash = (53 * hash) + getTrianglesList().hashCode();
      }
      if (getIndicesPerElementCount() > 0) {
        hash = (37 * hash) + INDICES_PER_ELEMENT_FIELD_NUMBER;
        hash = (53 * hash) + getIndicesPerElementList().hashCode();
      }
      if (getElementsToIndicesCount() > 0) {
        hash = (37 * hash) + ELEMENTS_TO_INDICES_FIELD_NUMBER;
        hash = (53 * hash) + getElementsToIndicesList().hashCode();
      }
      if (getIndicesToElementsCount() > 0) {
        hash = (37 * hash) + INDICES_TO_ELEMENTS_FIELD_NUMBER;
        hash = (53 * hash) + getIndicesToElementsList().hashCode();
      }
      if (getExtrasCount() > 0) {
        hash = (37 * hash) + EXTRAS_FIELD_NUMBER;
        hash = (53 * hash) + getExtrasList().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static Messages.MetaOuterClass.Visual parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.Visual parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.Visual parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.Visual parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.Visual parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.Visual parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.Visual parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.Visual 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.MetaOuterClass.Visual parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.Visual 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.MetaOuterClass.Visual parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.Visual 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.MetaOuterClass.Visual 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.Visual}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:Messages.Visual)
        Messages.MetaOuterClass.VisualOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Messages.MetaOuterClass.internal_static_Messages_Visual_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Messages.MetaOuterClass.internal_static_Messages_Visual_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Messages.MetaOuterClass.Visual.class, Messages.MetaOuterClass.Visual.Builder.class);
      }

      // Construct using Messages.MetaOuterClass.Visual.newBuilder()
      private Builder() {

      }

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

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (regionBuilder_ == null) {
          region_ = null;
        } else {
          region_ = null;
          regionBuilder_ = null;
        }
        if (controlBuilder_ == null) {
          control_ = null;
        } else {
          control_ = null;
          controlBuilder_ = null;
        }
        if (representationBuilder_ == null) {
          representation_ = null;
        } else {
          representation_ = null;
          representationBuilder_ = null;
        }
        points_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000001);
        lines_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000002);
        triangles_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000004);
        indicesPerElement_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000008);
        elementsToIndices_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000010);
        indicesToElements_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000020);
        if (extrasBuilder_ == null) {
          extras_ = java.util.Collections.emptyList();
        } else {
          extras_ = null;
          extrasBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }

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

      @java.lang.Override
      public Messages.MetaOuterClass.Visual getDefaultInstanceForType() {
        return Messages.MetaOuterClass.Visual.getDefaultInstance();
      }

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

      @java.lang.Override
      public Messages.MetaOuterClass.Visual buildPartial() {
        Messages.MetaOuterClass.Visual result = new Messages.MetaOuterClass.Visual(this);
        int from_bitField0_ = bitField0_;
        if (regionBuilder_ == null) {
          result.region_ = region_;
        } else {
          result.region_ = regionBuilder_.build();
        }
        if (controlBuilder_ == null) {
          result.control_ = control_;
        } else {
          result.control_ = controlBuilder_.build();
        }
        if (representationBuilder_ == null) {
          result.representation_ = representation_;
        } else {
          result.representation_ = representationBuilder_.build();
        }
        if (((bitField0_ & 0x00000001) != 0)) {
          points_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.points_ = points_;
        if (((bitField0_ & 0x00000002) != 0)) {
          lines_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.lines_ = lines_;
        if (((bitField0_ & 0x00000004) != 0)) {
          triangles_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.triangles_ = triangles_;
        if (((bitField0_ & 0x00000008) != 0)) {
          indicesPerElement_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.indicesPerElement_ = indicesPerElement_;
        if (((bitField0_ & 0x00000010) != 0)) {
          elementsToIndices_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.elementsToIndices_ = elementsToIndices_;
        if (((bitField0_ & 0x00000020) != 0)) {
          indicesToElements_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000020);
        }
        result.indicesToElements_ = indicesToElements_;
        if (extrasBuilder_ == null) {
          if (((bitField0_ & 0x00000040) != 0)) {
            extras_ = java.util.Collections.unmodifiableList(extras_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.extras_ = extras_;
        } else {
          result.extras_ = extrasBuilder_.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.MetaOuterClass.Visual) {
          return mergeFrom((Messages.MetaOuterClass.Visual)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(Messages.MetaOuterClass.Visual other) {
        if (other == Messages.MetaOuterClass.Visual.getDefaultInstance()) return this;
        if (other.hasRegion()) {
          mergeRegion(other.getRegion());
        }
        if (other.hasControl()) {
          mergeControl(other.getControl());
        }
        if (other.hasRepresentation()) {
          mergeRepresentation(other.getRepresentation());
        }
        if (!other.points_.isEmpty()) {
          if (points_.isEmpty()) {
            points_ = other.points_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensurePointsIsMutable();
            points_.addAll(other.points_);
          }
          onChanged();
        }
        if (!other.lines_.isEmpty()) {
          if (lines_.isEmpty()) {
            lines_ = other.lines_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureLinesIsMutable();
            lines_.addAll(other.lines_);
          }
          onChanged();
        }
        if (!other.triangles_.isEmpty()) {
          if (triangles_.isEmpty()) {
            triangles_ = other.triangles_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureTrianglesIsMutable();
            triangles_.addAll(other.triangles_);
          }
          onChanged();
        }
        if (!other.indicesPerElement_.isEmpty()) {
          if (indicesPerElement_.isEmpty()) {
            indicesPerElement_ = other.indicesPerElement_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureIndicesPerElementIsMutable();
            indicesPerElement_.addAll(other.indicesPerElement_);
          }
          onChanged();
        }
        if (!other.elementsToIndices_.isEmpty()) {
          if (elementsToIndices_.isEmpty()) {
            elementsToIndices_ = other.elementsToIndices_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureElementsToIndicesIsMutable();
            elementsToIndices_.addAll(other.elementsToIndices_);
          }
          onChanged();
        }
        if (!other.indicesToElements_.isEmpty()) {
          if (indicesToElements_.isEmpty()) {
            indicesToElements_ = other.indicesToElements_;
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            ensureIndicesToElementsIsMutable();
            indicesToElements_.addAll(other.indicesToElements_);
          }
          onChanged();
        }
        if (extrasBuilder_ == null) {
          if (!other.extras_.isEmpty()) {
            if (extras_.isEmpty()) {
              extras_ = other.extras_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureExtrasIsMutable();
              extras_.addAll(other.extras_);
            }
            onChanged();
          }
        } else {
          if (!other.extras_.isEmpty()) {
            if (extrasBuilder_.isEmpty()) {
              extrasBuilder_.dispose();
              extrasBuilder_ = null;
              extras_ = other.extras_;
              bitField0_ = (bitField0_ & ~0x00000040);
              extrasBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getExtrasFieldBuilder() : null;
            } else {
              extrasBuilder_.addAllMessages(other.extras_);
            }
          }
        }
        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: {
                input.readMessage(
                    getRegionFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 10
              case 18: {
                input.readMessage(
                    getControlFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 18
              case 26: {
                input.readMessage(
                    getRepresentationFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 26
              case 40: {
                int v = input.readUInt32();
                ensurePointsIsMutable();
                points_.addInt(v);
                break;
              } // case 40
              case 42: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensurePointsIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  points_.addInt(input.readUInt32());
                }
                input.popLimit(limit);
                break;
              } // case 42
              case 48: {
                int v = input.readUInt32();
                ensureLinesIsMutable();
                lines_.addInt(v);
                break;
              } // case 48
              case 50: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureLinesIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  lines_.addInt(input.readUInt32());
                }
                input.popLimit(limit);
                break;
              } // case 50
              case 56: {
                int v = input.readUInt32();
                ensureTrianglesIsMutable();
                triangles_.addInt(v);
                break;
              } // case 56
              case 58: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureTrianglesIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  triangles_.addInt(input.readUInt32());
                }
                input.popLimit(limit);
                break;
              } // case 58
              case 64: {
                int v = input.readUInt32();
                ensureIndicesPerElementIsMutable();
                indicesPerElement_.addInt(v);
                break;
              } // case 64
              case 66: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureIndicesPerElementIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  indicesPerElement_.addInt(input.readUInt32());
                }
                input.popLimit(limit);
                break;
              } // case 66
              case 72: {
                int v = input.readUInt32();
                ensureElementsToIndicesIsMutable();
                elementsToIndices_.addInt(v);
                break;
              } // case 72
              case 74: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureElementsToIndicesIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  elementsToIndices_.addInt(input.readUInt32());
                }
                input.popLimit(limit);
                break;
              } // case 74
              case 80: {
                int v = input.readUInt32();
                ensureIndicesToElementsIsMutable();
                indicesToElements_.addInt(v);
                break;
              } // case 80
              case 82: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureIndicesToElementsIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  indicesToElements_.addInt(input.readUInt32());
                }
                input.popLimit(limit);
                break;
              } // case 82
              case 122: {
                Messages.Vector.Vector32 m =
                    input.readMessage(
                        Messages.Vector.Vector32.parser(),
                        extensionRegistry);
                if (extrasBuilder_ == null) {
                  ensureExtrasIsMutable();
                  extras_.add(m);
                } else {
                  extrasBuilder_.addMessage(m);
                }
                break;
              } // case 122
              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 Messages.Spatial.Zone region_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Spatial.Zone, Messages.Spatial.Zone.Builder, Messages.Spatial.ZoneOrBuilder> regionBuilder_;
      /**
       * <code>.Messages.Zone region = 1;</code>
       * @return Whether the region field is set.
       */
      public boolean hasRegion() {
        return regionBuilder_ != null || region_ != null;
      }
      /**
       * <code>.Messages.Zone region = 1;</code>
       * @return The region.
       */
      public Messages.Spatial.Zone getRegion() {
        if (regionBuilder_ == null) {
          return region_ == null ? Messages.Spatial.Zone.getDefaultInstance() : region_;
        } else {
          return regionBuilder_.getMessage();
        }
      }
      /**
       * <code>.Messages.Zone region = 1;</code>
       */
      public Builder setRegion(Messages.Spatial.Zone value) {
        if (regionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          region_ = value;
          onChanged();
        } else {
          regionBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Zone region = 1;</code>
       */
      public Builder setRegion(
          Messages.Spatial.Zone.Builder builderForValue) {
        if (regionBuilder_ == null) {
          region_ = builderForValue.build();
          onChanged();
        } else {
          regionBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.Messages.Zone region = 1;</code>
       */
      public Builder mergeRegion(Messages.Spatial.Zone value) {
        if (regionBuilder_ == null) {
          if (region_ != null) {
            region_ =
              Messages.Spatial.Zone.newBuilder(region_).mergeFrom(value).buildPartial();
          } else {
            region_ = value;
          }
          onChanged();
        } else {
          regionBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Zone region = 1;</code>
       */
      public Builder clearRegion() {
        if (regionBuilder_ == null) {
          region_ = null;
          onChanged();
        } else {
          region_ = null;
          regionBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.Zone region = 1;</code>
       */
      public Messages.Spatial.Zone.Builder getRegionBuilder() {
        
        onChanged();
        return getRegionFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.Zone region = 1;</code>
       */
      public Messages.Spatial.ZoneOrBuilder getRegionOrBuilder() {
        if (regionBuilder_ != null) {
          return regionBuilder_.getMessageOrBuilder();
        } else {
          return region_ == null ?
              Messages.Spatial.Zone.getDefaultInstance() : region_;
        }
      }
      /**
       * <code>.Messages.Zone region = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Spatial.Zone, Messages.Spatial.Zone.Builder, Messages.Spatial.ZoneOrBuilder> 
          getRegionFieldBuilder() {
        if (regionBuilder_ == null) {
          regionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.Spatial.Zone, Messages.Spatial.Zone.Builder, Messages.Spatial.ZoneOrBuilder>(
                  getRegion(),
                  getParentForChildren(),
                  isClean());
          region_ = null;
        }
        return regionBuilder_;
      }

      private Messages.MetaOuterClass.GraphicsControl control_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.MetaOuterClass.GraphicsControl, Messages.MetaOuterClass.GraphicsControl.Builder, Messages.MetaOuterClass.GraphicsControlOrBuilder> controlBuilder_;
      /**
       * <code>.Messages.GraphicsControl control = 2;</code>
       * @return Whether the control field is set.
       */
      public boolean hasControl() {
        return controlBuilder_ != null || control_ != null;
      }
      /**
       * <code>.Messages.GraphicsControl control = 2;</code>
       * @return The control.
       */
      public Messages.MetaOuterClass.GraphicsControl getControl() {
        if (controlBuilder_ == null) {
          return control_ == null ? Messages.MetaOuterClass.GraphicsControl.getDefaultInstance() : control_;
        } else {
          return controlBuilder_.getMessage();
        }
      }
      /**
       * <code>.Messages.GraphicsControl control = 2;</code>
       */
      public Builder setControl(Messages.MetaOuterClass.GraphicsControl value) {
        if (controlBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          control_ = value;
          onChanged();
        } else {
          controlBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.Messages.GraphicsControl control = 2;</code>
       */
      public Builder setControl(
          Messages.MetaOuterClass.GraphicsControl.Builder builderForValue) {
        if (controlBuilder_ == null) {
          control_ = builderForValue.build();
          onChanged();
        } else {
          controlBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.Messages.GraphicsControl control = 2;</code>
       */
      public Builder mergeControl(Messages.MetaOuterClass.GraphicsControl value) {
        if (controlBuilder_ == null) {
          if (control_ != null) {
            control_ =
              Messages.MetaOuterClass.GraphicsControl.newBuilder(control_).mergeFrom(value).buildPartial();
          } else {
            control_ = value;
          }
          onChanged();
        } else {
          controlBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.Messages.GraphicsControl control = 2;</code>
       */
      public Builder clearControl() {
        if (controlBuilder_ == null) {
          control_ = null;
          onChanged();
        } else {
          control_ = null;
          controlBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.GraphicsControl control = 2;</code>
       */
      public Messages.MetaOuterClass.GraphicsControl.Builder getControlBuilder() {
        
        onChanged();
        return getControlFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.GraphicsControl control = 2;</code>
       */
      public Messages.MetaOuterClass.GraphicsControlOrBuilder getControlOrBuilder() {
        if (controlBuilder_ != null) {
          return controlBuilder_.getMessageOrBuilder();
        } else {
          return control_ == null ?
              Messages.MetaOuterClass.GraphicsControl.getDefaultInstance() : control_;
        }
      }
      /**
       * <code>.Messages.GraphicsControl control = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.MetaOuterClass.GraphicsControl, Messages.MetaOuterClass.GraphicsControl.Builder, Messages.MetaOuterClass.GraphicsControlOrBuilder> 
          getControlFieldBuilder() {
        if (controlBuilder_ == null) {
          controlBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.MetaOuterClass.GraphicsControl, Messages.MetaOuterClass.GraphicsControl.Builder, Messages.MetaOuterClass.GraphicsControlOrBuilder>(
                  getControl(),
                  getParentForChildren(),
                  isClean());
          control_ = null;
        }
        return controlBuilder_;
      }

      private Messages.MetaOuterClass.Representation representation_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.MetaOuterClass.Representation, Messages.MetaOuterClass.Representation.Builder, Messages.MetaOuterClass.RepresentationOrBuilder> representationBuilder_;
      /**
       * <code>.Messages.Representation representation = 3;</code>
       * @return Whether the representation field is set.
       */
      public boolean hasRepresentation() {
        return representationBuilder_ != null || representation_ != null;
      }
      /**
       * <code>.Messages.Representation representation = 3;</code>
       * @return The representation.
       */
      public Messages.MetaOuterClass.Representation getRepresentation() {
        if (representationBuilder_ == null) {
          return representation_ == null ? Messages.MetaOuterClass.Representation.getDefaultInstance() : representation_;
        } else {
          return representationBuilder_.getMessage();
        }
      }
      /**
       * <code>.Messages.Representation representation = 3;</code>
       */
      public Builder setRepresentation(Messages.MetaOuterClass.Representation value) {
        if (representationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          representation_ = value;
          onChanged();
        } else {
          representationBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Representation representation = 3;</code>
       */
      public Builder setRepresentation(
          Messages.MetaOuterClass.Representation.Builder builderForValue) {
        if (representationBuilder_ == null) {
          representation_ = builderForValue.build();
          onChanged();
        } else {
          representationBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.Messages.Representation representation = 3;</code>
       */
      public Builder mergeRepresentation(Messages.MetaOuterClass.Representation value) {
        if (representationBuilder_ == null) {
          if (representation_ != null) {
            representation_ =
              Messages.MetaOuterClass.Representation.newBuilder(representation_).mergeFrom(value).buildPartial();
          } else {
            representation_ = value;
          }
          onChanged();
        } else {
          representationBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Representation representation = 3;</code>
       */
      public Builder clearRepresentation() {
        if (representationBuilder_ == null) {
          representation_ = null;
          onChanged();
        } else {
          representation_ = null;
          representationBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.Representation representation = 3;</code>
       */
      public Messages.MetaOuterClass.Representation.Builder getRepresentationBuilder() {
        
        onChanged();
        return getRepresentationFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.Representation representation = 3;</code>
       */
      public Messages.MetaOuterClass.RepresentationOrBuilder getRepresentationOrBuilder() {
        if (representationBuilder_ != null) {
          return representationBuilder_.getMessageOrBuilder();
        } else {
          return representation_ == null ?
              Messages.MetaOuterClass.Representation.getDefaultInstance() : representation_;
        }
      }
      /**
       * <code>.Messages.Representation representation = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.MetaOuterClass.Representation, Messages.MetaOuterClass.Representation.Builder, Messages.MetaOuterClass.RepresentationOrBuilder> 
          getRepresentationFieldBuilder() {
        if (representationBuilder_ == null) {
          representationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.MetaOuterClass.Representation, Messages.MetaOuterClass.Representation.Builder, Messages.MetaOuterClass.RepresentationOrBuilder>(
                  getRepresentation(),
                  getParentForChildren(),
                  isClean());
          representation_ = null;
        }
        return representationBuilder_;
      }

      private com.google.protobuf.Internal.IntList points_ = emptyIntList();
      private void ensurePointsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          points_ = mutableCopy(points_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated uint32 points = 5;</code>
       * @return A list containing the points.
       */
      public java.util.List<java.lang.Integer>
          getPointsList() {
        return ((bitField0_ & 0x00000001) != 0) ?
                 java.util.Collections.unmodifiableList(points_) : points_;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated uint32 points = 5;</code>
       * @return The count of points.
       */
      public int getPointsCount() {
        return points_.size();
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated uint32 points = 5;</code>
       * @param index The index of the element to return.
       * @return The points at the given index.
       */
      public int getPoints(int index) {
        return points_.getInt(index);
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated uint32 points = 5;</code>
       * @param index The index to set the value at.
       * @param value The points to set.
       * @return This builder for chaining.
       */
      public Builder setPoints(
          int index, int value) {
        ensurePointsIsMutable();
        points_.setInt(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated uint32 points = 5;</code>
       * @param value The points to add.
       * @return This builder for chaining.
       */
      public Builder addPoints(int value) {
        ensurePointsIsMutable();
        points_.addInt(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated uint32 points = 5;</code>
       * @param values The points to add.
       * @return This builder for chaining.
       */
      public Builder addAllPoints(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensurePointsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, points_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>repeated uint32 points = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearPoints() {
        points_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.IntList lines_ = emptyIntList();
      private void ensureLinesIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          lines_ = mutableCopy(lines_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated uint32 lines = 6;</code>
       * @return A list containing the lines.
       */
      public java.util.List<java.lang.Integer>
          getLinesList() {
        return ((bitField0_ & 0x00000002) != 0) ?
                 java.util.Collections.unmodifiableList(lines_) : lines_;
      }
      /**
       * <code>repeated uint32 lines = 6;</code>
       * @return The count of lines.
       */
      public int getLinesCount() {
        return lines_.size();
      }
      /**
       * <code>repeated uint32 lines = 6;</code>
       * @param index The index of the element to return.
       * @return The lines at the given index.
       */
      public int getLines(int index) {
        return lines_.getInt(index);
      }
      /**
       * <code>repeated uint32 lines = 6;</code>
       * @param index The index to set the value at.
       * @param value The lines to set.
       * @return This builder for chaining.
       */
      public Builder setLines(
          int index, int value) {
        ensureLinesIsMutable();
        lines_.setInt(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated uint32 lines = 6;</code>
       * @param value The lines to add.
       * @return This builder for chaining.
       */
      public Builder addLines(int value) {
        ensureLinesIsMutable();
        lines_.addInt(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated uint32 lines = 6;</code>
       * @param values The lines to add.
       * @return This builder for chaining.
       */
      public Builder addAllLines(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureLinesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, lines_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated uint32 lines = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearLines() {
        lines_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.IntList triangles_ = emptyIntList();
      private void ensureTrianglesIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          triangles_ = mutableCopy(triangles_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated uint32 triangles = 7;</code>
       * @return A list containing the triangles.
       */
      public java.util.List<java.lang.Integer>
          getTrianglesList() {
        return ((bitField0_ & 0x00000004) != 0) ?
                 java.util.Collections.unmodifiableList(triangles_) : triangles_;
      }
      /**
       * <code>repeated uint32 triangles = 7;</code>
       * @return The count of triangles.
       */
      public int getTrianglesCount() {
        return triangles_.size();
      }
      /**
       * <code>repeated uint32 triangles = 7;</code>
       * @param index The index of the element to return.
       * @return The triangles at the given index.
       */
      public int getTriangles(int index) {
        return triangles_.getInt(index);
      }
      /**
       * <code>repeated uint32 triangles = 7;</code>
       * @param index The index to set the value at.
       * @param value The triangles to set.
       * @return This builder for chaining.
       */
      public Builder setTriangles(
          int index, int value) {
        ensureTrianglesIsMutable();
        triangles_.setInt(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated uint32 triangles = 7;</code>
       * @param value The triangles to add.
       * @return This builder for chaining.
       */
      public Builder addTriangles(int value) {
        ensureTrianglesIsMutable();
        triangles_.addInt(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated uint32 triangles = 7;</code>
       * @param values The triangles to add.
       * @return This builder for chaining.
       */
      public Builder addAllTriangles(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureTrianglesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, triangles_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated uint32 triangles = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearTriangles() {
        triangles_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.IntList indicesPerElement_ = emptyIntList();
      private void ensureIndicesPerElementIsMutable() {
        if (!((bitField0_ & 0x00000008) != 0)) {
          indicesPerElement_ = mutableCopy(indicesPerElement_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 indices_per_element = 8;</code>
       * @return A list containing the indicesPerElement.
       */
      public java.util.List<java.lang.Integer>
          getIndicesPerElementList() {
        return ((bitField0_ & 0x00000008) != 0) ?
                 java.util.Collections.unmodifiableList(indicesPerElement_) : indicesPerElement_;
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 indices_per_element = 8;</code>
       * @return The count of indicesPerElement.
       */
      public int getIndicesPerElementCount() {
        return indicesPerElement_.size();
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 indices_per_element = 8;</code>
       * @param index The index of the element to return.
       * @return The indicesPerElement at the given index.
       */
      public int getIndicesPerElement(int index) {
        return indicesPerElement_.getInt(index);
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 indices_per_element = 8;</code>
       * @param index The index to set the value at.
       * @param value The indicesPerElement to set.
       * @return This builder for chaining.
       */
      public Builder setIndicesPerElement(
          int index, int value) {
        ensureIndicesPerElementIsMutable();
        indicesPerElement_.setInt(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 indices_per_element = 8;</code>
       * @param value The indicesPerElement to add.
       * @return This builder for chaining.
       */
      public Builder addIndicesPerElement(int value) {
        ensureIndicesPerElementIsMutable();
        indicesPerElement_.addInt(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 indices_per_element = 8;</code>
       * @param values The indicesPerElement to add.
       * @return This builder for chaining.
       */
      public Builder addAllIndicesPerElement(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureIndicesPerElementIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, indicesPerElement_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 indices_per_element = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearIndicesPerElement() {
        indicesPerElement_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.IntList elementsToIndices_ = emptyIntList();
      private void ensureElementsToIndicesIsMutable() {
        if (!((bitField0_ & 0x00000010) != 0)) {
          elementsToIndices_ = mutableCopy(elementsToIndices_);
          bitField0_ |= 0x00000010;
         }
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 elements_to_indices = 9;</code>
       * @return A list containing the elementsToIndices.
       */
      public java.util.List<java.lang.Integer>
          getElementsToIndicesList() {
        return ((bitField0_ & 0x00000010) != 0) ?
                 java.util.Collections.unmodifiableList(elementsToIndices_) : elementsToIndices_;
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 elements_to_indices = 9;</code>
       * @return The count of elementsToIndices.
       */
      public int getElementsToIndicesCount() {
        return elementsToIndices_.size();
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 elements_to_indices = 9;</code>
       * @param index The index of the element to return.
       * @return The elementsToIndices at the given index.
       */
      public int getElementsToIndices(int index) {
        return elementsToIndices_.getInt(index);
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 elements_to_indices = 9;</code>
       * @param index The index to set the value at.
       * @param value The elementsToIndices to set.
       * @return This builder for chaining.
       */
      public Builder setElementsToIndices(
          int index, int value) {
        ensureElementsToIndicesIsMutable();
        elementsToIndices_.setInt(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 elements_to_indices = 9;</code>
       * @param value The elementsToIndices to add.
       * @return This builder for chaining.
       */
      public Builder addElementsToIndices(int value) {
        ensureElementsToIndicesIsMutable();
        elementsToIndices_.addInt(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 elements_to_indices = 9;</code>
       * @param values The elementsToIndices to add.
       * @return This builder for chaining.
       */
      public Builder addAllElementsToIndices(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureElementsToIndicesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, elementsToIndices_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 elements_to_indices = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearElementsToIndices() {
        elementsToIndices_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.IntList indicesToElements_ = emptyIntList();
      private void ensureIndicesToElementsIsMutable() {
        if (!((bitField0_ & 0x00000020) != 0)) {
          indicesToElements_ = mutableCopy(indicesToElements_);
          bitField0_ |= 0x00000020;
         }
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 indices_to_elements = 10;</code>
       * @return A list containing the indicesToElements.
       */
      public java.util.List<java.lang.Integer>
          getIndicesToElementsList() {
        return ((bitField0_ & 0x00000020) != 0) ?
                 java.util.Collections.unmodifiableList(indicesToElements_) : indicesToElements_;
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 indices_to_elements = 10;</code>
       * @return The count of indicesToElements.
       */
      public int getIndicesToElementsCount() {
        return indicesToElements_.size();
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 indices_to_elements = 10;</code>
       * @param index The index of the element to return.
       * @return The indicesToElements at the given index.
       */
      public int getIndicesToElements(int index) {
        return indicesToElements_.getInt(index);
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 indices_to_elements = 10;</code>
       * @param index The index to set the value at.
       * @param value The indicesToElements to set.
       * @return This builder for chaining.
       */
      public Builder setIndicesToElements(
          int index, int value) {
        ensureIndicesToElementsIsMutable();
        indicesToElements_.setInt(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 indices_to_elements = 10;</code>
       * @param value The indicesToElements to add.
       * @return This builder for chaining.
       */
      public Builder addIndicesToElements(int value) {
        ensureIndicesToElementsIsMutable();
        indicesToElements_.addInt(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 indices_to_elements = 10;</code>
       * @param values The indicesToElements to add.
       * @return This builder for chaining.
       */
      public Builder addAllIndicesToElements(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureIndicesToElementsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, indicesToElements_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * only used on composite elements (e.g. QUAD4 represented using triangles)
       * </pre>
       *
       * <code>repeated uint32 indices_to_elements = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearIndicesToElements() {
        indicesToElements_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000020);
        onChanged();
        return this;
      }

      private java.util.List<Messages.Vector.Vector32> extras_ =
        java.util.Collections.emptyList();
      private void ensureExtrasIsMutable() {
        if (!((bitField0_ & 0x00000040) != 0)) {
          extras_ = new java.util.ArrayList<Messages.Vector.Vector32>(extras_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          Messages.Vector.Vector32, Messages.Vector.Vector32.Builder, Messages.Vector.Vector32OrBuilder> extrasBuilder_;

      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public java.util.List<Messages.Vector.Vector32> getExtrasList() {
        if (extrasBuilder_ == null) {
          return java.util.Collections.unmodifiableList(extras_);
        } else {
          return extrasBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public int getExtrasCount() {
        if (extrasBuilder_ == null) {
          return extras_.size();
        } else {
          return extrasBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public Messages.Vector.Vector32 getExtras(int index) {
        if (extrasBuilder_ == null) {
          return extras_.get(index);
        } else {
          return extrasBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public Builder setExtras(
          int index, Messages.Vector.Vector32 value) {
        if (extrasBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtrasIsMutable();
          extras_.set(index, value);
          onChanged();
        } else {
          extrasBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public Builder setExtras(
          int index, Messages.Vector.Vector32.Builder builderForValue) {
        if (extrasBuilder_ == null) {
          ensureExtrasIsMutable();
          extras_.set(index, builderForValue.build());
          onChanged();
        } else {
          extrasBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public Builder addExtras(Messages.Vector.Vector32 value) {
        if (extrasBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtrasIsMutable();
          extras_.add(value);
          onChanged();
        } else {
          extrasBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public Builder addExtras(
          int index, Messages.Vector.Vector32 value) {
        if (extrasBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtrasIsMutable();
          extras_.add(index, value);
          onChanged();
        } else {
          extrasBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public Builder addExtras(
          Messages.Vector.Vector32.Builder builderForValue) {
        if (extrasBuilder_ == null) {
          ensureExtrasIsMutable();
          extras_.add(builderForValue.build());
          onChanged();
        } else {
          extrasBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public Builder addExtras(
          int index, Messages.Vector.Vector32.Builder builderForValue) {
        if (extrasBuilder_ == null) {
          ensureExtrasIsMutable();
          extras_.add(index, builderForValue.build());
          onChanged();
        } else {
          extrasBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public Builder addAllExtras(
          java.lang.Iterable<? extends Messages.Vector.Vector32> values) {
        if (extrasBuilder_ == null) {
          ensureExtrasIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, extras_);
          onChanged();
        } else {
          extrasBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public Builder clearExtras() {
        if (extrasBuilder_ == null) {
          extras_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          extrasBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public Builder removeExtras(int index) {
        if (extrasBuilder_ == null) {
          ensureExtrasIsMutable();
          extras_.remove(index);
          onChanged();
        } else {
          extrasBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public Messages.Vector.Vector32.Builder getExtrasBuilder(
          int index) {
        return getExtrasFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public Messages.Vector.Vector32OrBuilder getExtrasOrBuilder(
          int index) {
        if (extrasBuilder_ == null) {
          return extras_.get(index);  } else {
          return extrasBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public java.util.List<? extends Messages.Vector.Vector32OrBuilder> 
           getExtrasOrBuilderList() {
        if (extrasBuilder_ != null) {
          return extrasBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(extras_);
        }
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public Messages.Vector.Vector32.Builder addExtrasBuilder() {
        return getExtrasFieldBuilder().addBuilder(
            Messages.Vector.Vector32.getDefaultInstance());
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public Messages.Vector.Vector32.Builder addExtrasBuilder(
          int index) {
        return getExtrasFieldBuilder().addBuilder(
            index, Messages.Vector.Vector32.getDefaultInstance());
      }
      /**
       * <pre>
       * optional data such as displacement vectors and positions (if not nodal positions)
       * </pre>
       *
       * <code>repeated .Messages.Vector32 extras = 15;</code>
       */
      public java.util.List<Messages.Vector.Vector32.Builder> 
           getExtrasBuilderList() {
        return getExtrasFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          Messages.Vector.Vector32, Messages.Vector.Vector32.Builder, Messages.Vector.Vector32OrBuilder> 
          getExtrasFieldBuilder() {
        if (extrasBuilder_ == null) {
          extrasBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              Messages.Vector.Vector32, Messages.Vector.Vector32.Builder, Messages.Vector.Vector32OrBuilder>(
                  extras_,
                  ((bitField0_ & 0x00000040) != 0),
                  getParentForChildren(),
                  isClean());
          extras_ = null;
        }
        return extrasBuilder_;
      }
      @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.Visual)
    }

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

    public static Messages.MetaOuterClass.Visual getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Visual>
        PARSER = new com.google.protobuf.AbstractParser<Visual>() {
      @java.lang.Override
      public Visual 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<Visual> parser() {
      return PARSER;
    }

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

    @java.lang.Override
    public Messages.MetaOuterClass.Visual getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

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

    /**
     * <pre>
     * unique identifier that persists between sessions
     * </pre>
     *
     * <code>string name = 1;</code>
     * @return The name.
     */
    java.lang.String getName();
    /**
     * <pre>
     * unique identifier that persists between sessions
     * </pre>
     *
     * <code>string name = 1;</code>
     * @return The bytes for name.
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <pre>
     * unique id for each system assigned, valid only within a given session
     * </pre>
     *
     * <code>int64 uid = 2;</code>
     * @return The uid.
     */
    long getUid();

    /**
     * <code>string directory = 3;</code>
     * @return The directory.
     */
    java.lang.String getDirectory();
    /**
     * <code>string directory = 3;</code>
     * @return The bytes for directory.
     */
    com.google.protobuf.ByteString
        getDirectoryBytes();

    /**
     * <code>string symbol = 4;</code>
     * @return The symbol.
     */
    java.lang.String getSymbol();
    /**
     * <code>string symbol = 4;</code>
     * @return The bytes for symbol.
     */
    com.google.protobuf.ByteString
        getSymbolBytes();

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

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

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

    /**
     * <code>string sys_info = 8;</code>
     * @return The sysInfo.
     */
    java.lang.String getSysInfo();
    /**
     * <code>string sys_info = 8;</code>
     * @return The bytes for sysInfo.
     */
    com.google.protobuf.ByteString
        getSysInfoBytes();

    /**
     * <code>string geom_info = 9;</code>
     * @return The geomInfo.
     */
    java.lang.String getGeomInfo();
    /**
     * <code>string geom_info = 9;</code>
     * @return The bytes for geomInfo.
     */
    com.google.protobuf.ByteString
        getGeomInfoBytes();

    /**
     * <code>int64 parent = 10;</code>
     * @return The parent.
     */
    long getParent();

    /**
     * <pre>
     * unix time
     * </pre>
     *
     * <code>int64 created = 11;</code>
     * @return The created.
     */
    long getCreated();

    /**
     * <code>int64 saved = 12;</code>
     * @return The saved.
     */
    long getSaved();

    /**
     * <code>int64 modified = 13;</code>
     * @return The modified.
     */
    long getModified();

    /**
     * <code>uint64 iteration = 14;</code>
     * @return The iteration.
     */
    long getIteration();

    /**
     * <code>uint64 save_interval = 15;</code>
     * @return The saveInterval.
     */
    long getSaveInterval();

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

    /**
     * <code>bool locked = 17;</code>
     * @return The locked.
     */
    boolean getLocked();

    /**
     * <code>bool auto_save = 18;</code>
     * @return The autoSave.
     */
    boolean getAutoSave();

    /**
     * <code>bool lightweight = 19;</code>
     * @return The lightweight.
     */
    boolean getLightweight();

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

    /**
     * <code>.Messages.Revision version = 21;</code>
     * @return Whether the version field is set.
     */
    boolean hasVersion();
    /**
     * <code>.Messages.Revision version = 21;</code>
     * @return The version.
     */
    Messages.Vector.Revision getVersion();
    /**
     * <code>.Messages.Revision version = 21;</code>
     */
    Messages.Vector.RevisionOrBuilder getVersionOrBuilder();

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

    /**
     * <code>string url = 23;</code>
     * @return The url.
     */
    java.lang.String getUrl();
    /**
     * <code>string url = 23;</code>
     * @return The bytes for url.
     */
    com.google.protobuf.ByteString
        getUrlBytes();

    /**
     * <code>.Messages.GraphicsControl appearance = 24;</code>
     * @return Whether the appearance field is set.
     */
    boolean hasAppearance();
    /**
     * <code>.Messages.GraphicsControl appearance = 24;</code>
     * @return The appearance.
     */
    Messages.MetaOuterClass.GraphicsControl getAppearance();
    /**
     * <code>.Messages.GraphicsControl appearance = 24;</code>
     */
    Messages.MetaOuterClass.GraphicsControlOrBuilder getAppearanceOrBuilder();

    /**
     * <pre>
     * uid's (only good within a given session. see concept.proto for persistent relationships)
     * </pre>
     *
     * <code>repeated int64 children = 25;</code>
     * @return A list containing the children.
     */
    java.util.List<java.lang.Long> getChildrenList();
    /**
     * <pre>
     * uid's (only good within a given session. see concept.proto for persistent relationships)
     * </pre>
     *
     * <code>repeated int64 children = 25;</code>
     * @return The count of children.
     */
    int getChildrenCount();
    /**
     * <pre>
     * uid's (only good within a given session. see concept.proto for persistent relationships)
     * </pre>
     *
     * <code>repeated int64 children = 25;</code>
     * @param index The index of the element to return.
     * @return The children at the given index.
     */
    long getChildren(int index);

    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 groups = 26;</code>
     * @return A list containing the groups.
     */
    java.util.List<java.lang.Integer> getGroupsList();
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 groups = 26;</code>
     * @return The count of groups.
     */
    int getGroupsCount();
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 groups = 26;</code>
     * @param index The index of the element to return.
     * @return The groups at the given index.
     */
    int getGroups(int index);

    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 loops = 27;</code>
     * @return A list containing the loops.
     */
    java.util.List<java.lang.Integer> getLoopsList();
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 loops = 27;</code>
     * @return The count of loops.
     */
    int getLoopsCount();
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 loops = 27;</code>
     * @param index The index of the element to return.
     * @return The loops at the given index.
     */
    int getLoops(int index);

    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 surfaces = 28;</code>
     * @return A list containing the surfaces.
     */
    java.util.List<java.lang.Integer> getSurfacesList();
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 surfaces = 28;</code>
     * @return The count of surfaces.
     */
    int getSurfacesCount();
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 surfaces = 28;</code>
     * @param index The index of the element to return.
     * @return The surfaces at the given index.
     */
    int getSurfaces(int index);

    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 volumes = 29;</code>
     * @return A list containing the volumes.
     */
    java.util.List<java.lang.Integer> getVolumesList();
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 volumes = 29;</code>
     * @return The count of volumes.
     */
    int getVolumesCount();
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 volumes = 29;</code>
     * @param index The index of the element to return.
     * @return The volumes at the given index.
     */
    int getVolumes(int index);

    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_transform = 30;</code>
     * @return A list containing the globalTransform.
     */
    java.util.List<java.lang.Double> getGlobalTransformList();
    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_transform = 30;</code>
     * @return The count of globalTransform.
     */
    int getGlobalTransformCount();
    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_transform = 30;</code>
     * @param index The index of the element to return.
     * @return The globalTransform at the given index.
     */
    double getGlobalTransform(int index);

    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_rate = 31;</code>
     * @return A list containing the globalRate.
     */
    java.util.List<java.lang.Double> getGlobalRateList();
    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_rate = 31;</code>
     * @return The count of globalRate.
     */
    int getGlobalRateCount();
    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_rate = 31;</code>
     * @param index The index of the element to return.
     * @return The globalRate at the given index.
     */
    double getGlobalRate(int index);

    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_accel = 32;</code>
     * @return A list containing the globalAccel.
     */
    java.util.List<java.lang.Double> getGlobalAccelList();
    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_accel = 32;</code>
     * @return The count of globalAccel.
     */
    int getGlobalAccelCount();
    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_accel = 32;</code>
     * @param index The index of the element to return.
     * @return The globalAccel at the given index.
     */
    double getGlobalAccel(int index);

    /**
     * <pre>
     * serialized property-keys, used to request Vector32 or Vector64 data
     * </pre>
     *
     * <code>repeated string properties = 33;</code>
     * @return A list containing the properties.
     */
    java.util.List<java.lang.String>
        getPropertiesList();
    /**
     * <pre>
     * serialized property-keys, used to request Vector32 or Vector64 data
     * </pre>
     *
     * <code>repeated string properties = 33;</code>
     * @return The count of properties.
     */
    int getPropertiesCount();
    /**
     * <pre>
     * serialized property-keys, used to request Vector32 or Vector64 data
     * </pre>
     *
     * <code>repeated string properties = 33;</code>
     * @param index The index of the element to return.
     * @return The properties at the given index.
     */
    java.lang.String getProperties(int index);
    /**
     * <pre>
     * serialized property-keys, used to request Vector32 or Vector64 data
     * </pre>
     *
     * <code>repeated string properties = 33;</code>
     * @param index The index of the value to return.
     * @return The bytes of the properties at the given index.
     */
    com.google.protobuf.ByteString
        getPropertiesBytes(int index);

    /**
     * <pre>
     * optional visual media populated by server
     * </pre>
     *
     * <code>repeated .Messages.Visual media = 34;</code>
     */
    java.util.List<Messages.MetaOuterClass.Visual> 
        getMediaList();
    /**
     * <pre>
     * optional visual media populated by server
     * </pre>
     *
     * <code>repeated .Messages.Visual media = 34;</code>
     */
    Messages.MetaOuterClass.Visual getMedia(int index);
    /**
     * <pre>
     * optional visual media populated by server
     * </pre>
     *
     * <code>repeated .Messages.Visual media = 34;</code>
     */
    int getMediaCount();
    /**
     * <pre>
     * optional visual media populated by server
     * </pre>
     *
     * <code>repeated .Messages.Visual media = 34;</code>
     */
    java.util.List<? extends Messages.MetaOuterClass.VisualOrBuilder> 
        getMediaOrBuilderList();
    /**
     * <pre>
     * optional visual media populated by server
     * </pre>
     *
     * <code>repeated .Messages.Visual media = 34;</code>
     */
    Messages.MetaOuterClass.VisualOrBuilder getMediaOrBuilder(
        int index);

    /**
     * <code>repeated float symbol_transform = 35;</code>
     * @return A list containing the symbolTransform.
     */
    java.util.List<java.lang.Float> getSymbolTransformList();
    /**
     * <code>repeated float symbol_transform = 35;</code>
     * @return The count of symbolTransform.
     */
    int getSymbolTransformCount();
    /**
     * <code>repeated float symbol_transform = 35;</code>
     * @param index The index of the element to return.
     * @return The symbolTransform at the given index.
     */
    float getSymbolTransform(int index);

    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>uint32 length_units = 40;</code>
     * @return The lengthUnits.
     */
    int getLengthUnits();
  }
  /**
   * Protobuf type {@code Messages.Meta}
   */
  public static final class Meta extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:Messages.Meta)
      MetaOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Meta.newBuilder() to construct.
    private Meta(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Meta() {
      name_ = "";
      directory_ = "";
      symbol_ = "";
      owner_ = "";
      comments_ = "";
      series_ = "";
      sysInfo_ = "";
      geomInfo_ = "";
      url_ = "";
      children_ = emptyLongList();
      groups_ = emptyIntList();
      loops_ = emptyIntList();
      surfaces_ = emptyIntList();
      volumes_ = emptyIntList();
      globalTransform_ = emptyDoubleList();
      globalRate_ = emptyDoubleList();
      globalAccel_ = emptyDoubleList();
      properties_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      media_ = java.util.Collections.emptyList();
      symbolTransform_ = emptyFloatList();
    }

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

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

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Messages.MetaOuterClass.internal_static_Messages_Meta_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              Messages.MetaOuterClass.Meta.class, Messages.MetaOuterClass.Meta.Builder.class);
    }

    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     * <pre>
     * unique identifier that persists between sessions
     * </pre>
     *
     * <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;
      }
    }
    /**
     * <pre>
     * unique identifier that persists between sessions
     * </pre>
     *
     * <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 UID_FIELD_NUMBER = 2;
    private long uid_;
    /**
     * <pre>
     * unique id for each system assigned, valid only within a given session
     * </pre>
     *
     * <code>int64 uid = 2;</code>
     * @return The uid.
     */
    @java.lang.Override
    public long getUid() {
      return uid_;
    }

    public static final int DIRECTORY_FIELD_NUMBER = 3;
    private volatile java.lang.Object directory_;
    /**
     * <code>string directory = 3;</code>
     * @return The directory.
     */
    @java.lang.Override
    public java.lang.String getDirectory() {
      java.lang.Object ref = directory_;
      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();
        directory_ = s;
        return s;
      }
    }
    /**
     * <code>string directory = 3;</code>
     * @return The bytes for directory.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getDirectoryBytes() {
      java.lang.Object ref = directory_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        directory_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SYMBOL_FIELD_NUMBER = 4;
    private volatile java.lang.Object symbol_;
    /**
     * <code>string symbol = 4;</code>
     * @return The symbol.
     */
    @java.lang.Override
    public java.lang.String getSymbol() {
      java.lang.Object ref = symbol_;
      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();
        symbol_ = s;
        return s;
      }
    }
    /**
     * <code>string symbol = 4;</code>
     * @return The bytes for symbol.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getSymbolBytes() {
      java.lang.Object ref = symbol_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        symbol_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int OWNER_FIELD_NUMBER = 5;
    private volatile java.lang.Object owner_;
    /**
     * <code>string owner = 5;</code>
     * @return The owner.
     */
    @java.lang.Override
    public java.lang.String getOwner() {
      java.lang.Object ref = owner_;
      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();
        owner_ = s;
        return s;
      }
    }
    /**
     * <code>string owner = 5;</code>
     * @return The bytes for owner.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getOwnerBytes() {
      java.lang.Object ref = owner_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        owner_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int COMMENTS_FIELD_NUMBER = 6;
    private volatile java.lang.Object comments_;
    /**
     * <code>string comments = 6;</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 = 6;</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 SERIES_FIELD_NUMBER = 7;
    private volatile java.lang.Object series_;
    /**
     * <code>string series = 7;</code>
     * @return The series.
     */
    @java.lang.Override
    public java.lang.String getSeries() {
      java.lang.Object ref = series_;
      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();
        series_ = s;
        return s;
      }
    }
    /**
     * <code>string series = 7;</code>
     * @return The bytes for series.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getSeriesBytes() {
      java.lang.Object ref = series_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        series_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SYS_INFO_FIELD_NUMBER = 8;
    private volatile java.lang.Object sysInfo_;
    /**
     * <code>string sys_info = 8;</code>
     * @return The sysInfo.
     */
    @java.lang.Override
    public java.lang.String getSysInfo() {
      java.lang.Object ref = sysInfo_;
      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();
        sysInfo_ = s;
        return s;
      }
    }
    /**
     * <code>string sys_info = 8;</code>
     * @return The bytes for sysInfo.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getSysInfoBytes() {
      java.lang.Object ref = sysInfo_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sysInfo_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int GEOM_INFO_FIELD_NUMBER = 9;
    private volatile java.lang.Object geomInfo_;
    /**
     * <code>string geom_info = 9;</code>
     * @return The geomInfo.
     */
    @java.lang.Override
    public java.lang.String getGeomInfo() {
      java.lang.Object ref = geomInfo_;
      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();
        geomInfo_ = s;
        return s;
      }
    }
    /**
     * <code>string geom_info = 9;</code>
     * @return The bytes for geomInfo.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getGeomInfoBytes() {
      java.lang.Object ref = geomInfo_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        geomInfo_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PARENT_FIELD_NUMBER = 10;
    private long parent_;
    /**
     * <code>int64 parent = 10;</code>
     * @return The parent.
     */
    @java.lang.Override
    public long getParent() {
      return parent_;
    }

    public static final int CREATED_FIELD_NUMBER = 11;
    private long created_;
    /**
     * <pre>
     * unix time
     * </pre>
     *
     * <code>int64 created = 11;</code>
     * @return The created.
     */
    @java.lang.Override
    public long getCreated() {
      return created_;
    }

    public static final int SAVED_FIELD_NUMBER = 12;
    private long saved_;
    /**
     * <code>int64 saved = 12;</code>
     * @return The saved.
     */
    @java.lang.Override
    public long getSaved() {
      return saved_;
    }

    public static final int MODIFIED_FIELD_NUMBER = 13;
    private long modified_;
    /**
     * <code>int64 modified = 13;</code>
     * @return The modified.
     */
    @java.lang.Override
    public long getModified() {
      return modified_;
    }

    public static final int ITERATION_FIELD_NUMBER = 14;
    private long iteration_;
    /**
     * <code>uint64 iteration = 14;</code>
     * @return The iteration.
     */
    @java.lang.Override
    public long getIteration() {
      return iteration_;
    }

    public static final int SAVE_INTERVAL_FIELD_NUMBER = 15;
    private long saveInterval_;
    /**
     * <code>uint64 save_interval = 15;</code>
     * @return The saveInterval.
     */
    @java.lang.Override
    public long getSaveInterval() {
      return saveInterval_;
    }

    public static final int ENABLED_FIELD_NUMBER = 16;
    private boolean enabled_;
    /**
     * <code>bool enabled = 16;</code>
     * @return The enabled.
     */
    @java.lang.Override
    public boolean getEnabled() {
      return enabled_;
    }

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

    public static final int AUTO_SAVE_FIELD_NUMBER = 18;
    private boolean autoSave_;
    /**
     * <code>bool auto_save = 18;</code>
     * @return The autoSave.
     */
    @java.lang.Override
    public boolean getAutoSave() {
      return autoSave_;
    }

    public static final int LIGHTWEIGHT_FIELD_NUMBER = 19;
    private boolean lightweight_;
    /**
     * <code>bool lightweight = 19;</code>
     * @return The lightweight.
     */
    @java.lang.Override
    public boolean getLightweight() {
      return lightweight_;
    }

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

    public static final int VERSION_FIELD_NUMBER = 21;
    private Messages.Vector.Revision version_;
    /**
     * <code>.Messages.Revision version = 21;</code>
     * @return Whether the version field is set.
     */
    @java.lang.Override
    public boolean hasVersion() {
      return version_ != null;
    }
    /**
     * <code>.Messages.Revision version = 21;</code>
     * @return The version.
     */
    @java.lang.Override
    public Messages.Vector.Revision getVersion() {
      return version_ == null ? Messages.Vector.Revision.getDefaultInstance() : version_;
    }
    /**
     * <code>.Messages.Revision version = 21;</code>
     */
    @java.lang.Override
    public Messages.Vector.RevisionOrBuilder getVersionOrBuilder() {
      return getVersion();
    }

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

    public static final int URL_FIELD_NUMBER = 23;
    private volatile java.lang.Object url_;
    /**
     * <code>string url = 23;</code>
     * @return The url.
     */
    @java.lang.Override
    public java.lang.String getUrl() {
      java.lang.Object ref = url_;
      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();
        url_ = s;
        return s;
      }
    }
    /**
     * <code>string url = 23;</code>
     * @return The bytes for url.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getUrlBytes() {
      java.lang.Object ref = url_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        url_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int APPEARANCE_FIELD_NUMBER = 24;
    private Messages.MetaOuterClass.GraphicsControl appearance_;
    /**
     * <code>.Messages.GraphicsControl appearance = 24;</code>
     * @return Whether the appearance field is set.
     */
    @java.lang.Override
    public boolean hasAppearance() {
      return appearance_ != null;
    }
    /**
     * <code>.Messages.GraphicsControl appearance = 24;</code>
     * @return The appearance.
     */
    @java.lang.Override
    public Messages.MetaOuterClass.GraphicsControl getAppearance() {
      return appearance_ == null ? Messages.MetaOuterClass.GraphicsControl.getDefaultInstance() : appearance_;
    }
    /**
     * <code>.Messages.GraphicsControl appearance = 24;</code>
     */
    @java.lang.Override
    public Messages.MetaOuterClass.GraphicsControlOrBuilder getAppearanceOrBuilder() {
      return getAppearance();
    }

    public static final int CHILDREN_FIELD_NUMBER = 25;
    private com.google.protobuf.Internal.LongList children_;
    /**
     * <pre>
     * uid's (only good within a given session. see concept.proto for persistent relationships)
     * </pre>
     *
     * <code>repeated int64 children = 25;</code>
     * @return A list containing the children.
     */
    @java.lang.Override
    public java.util.List<java.lang.Long>
        getChildrenList() {
      return children_;
    }
    /**
     * <pre>
     * uid's (only good within a given session. see concept.proto for persistent relationships)
     * </pre>
     *
     * <code>repeated int64 children = 25;</code>
     * @return The count of children.
     */
    public int getChildrenCount() {
      return children_.size();
    }
    /**
     * <pre>
     * uid's (only good within a given session. see concept.proto for persistent relationships)
     * </pre>
     *
     * <code>repeated int64 children = 25;</code>
     * @param index The index of the element to return.
     * @return The children at the given index.
     */
    public long getChildren(int index) {
      return children_.getLong(index);
    }
    private int childrenMemoizedSerializedSize = -1;

    public static final int GROUPS_FIELD_NUMBER = 26;
    private com.google.protobuf.Internal.IntList groups_;
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 groups = 26;</code>
     * @return A list containing the groups.
     */
    @java.lang.Override
    public java.util.List<java.lang.Integer>
        getGroupsList() {
      return groups_;
    }
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 groups = 26;</code>
     * @return The count of groups.
     */
    public int getGroupsCount() {
      return groups_.size();
    }
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 groups = 26;</code>
     * @param index The index of the element to return.
     * @return The groups at the given index.
     */
    public int getGroups(int index) {
      return groups_.getInt(index);
    }
    private int groupsMemoizedSerializedSize = -1;

    public static final int LOOPS_FIELD_NUMBER = 27;
    private com.google.protobuf.Internal.IntList loops_;
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 loops = 27;</code>
     * @return A list containing the loops.
     */
    @java.lang.Override
    public java.util.List<java.lang.Integer>
        getLoopsList() {
      return loops_;
    }
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 loops = 27;</code>
     * @return The count of loops.
     */
    public int getLoopsCount() {
      return loops_.size();
    }
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 loops = 27;</code>
     * @param index The index of the element to return.
     * @return The loops at the given index.
     */
    public int getLoops(int index) {
      return loops_.getInt(index);
    }
    private int loopsMemoizedSerializedSize = -1;

    public static final int SURFACES_FIELD_NUMBER = 28;
    private com.google.protobuf.Internal.IntList surfaces_;
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 surfaces = 28;</code>
     * @return A list containing the surfaces.
     */
    @java.lang.Override
    public java.util.List<java.lang.Integer>
        getSurfacesList() {
      return surfaces_;
    }
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 surfaces = 28;</code>
     * @return The count of surfaces.
     */
    public int getSurfacesCount() {
      return surfaces_.size();
    }
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 surfaces = 28;</code>
     * @param index The index of the element to return.
     * @return The surfaces at the given index.
     */
    public int getSurfaces(int index) {
      return surfaces_.getInt(index);
    }
    private int surfacesMemoizedSerializedSize = -1;

    public static final int VOLUMES_FIELD_NUMBER = 29;
    private com.google.protobuf.Internal.IntList volumes_;
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 volumes = 29;</code>
     * @return A list containing the volumes.
     */
    @java.lang.Override
    public java.util.List<java.lang.Integer>
        getVolumesList() {
      return volumes_;
    }
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 volumes = 29;</code>
     * @return The count of volumes.
     */
    public int getVolumesCount() {
      return volumes_.size();
    }
    /**
     * <pre>
     * region id's
     * </pre>
     *
     * <code>repeated int32 volumes = 29;</code>
     * @param index The index of the element to return.
     * @return The volumes at the given index.
     */
    public int getVolumes(int index) {
      return volumes_.getInt(index);
    }
    private int volumesMemoizedSerializedSize = -1;

    public static final int GLOBAL_TRANSFORM_FIELD_NUMBER = 30;
    private com.google.protobuf.Internal.DoubleList globalTransform_;
    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_transform = 30;</code>
     * @return A list containing the globalTransform.
     */
    @java.lang.Override
    public java.util.List<java.lang.Double>
        getGlobalTransformList() {
      return globalTransform_;
    }
    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_transform = 30;</code>
     * @return The count of globalTransform.
     */
    public int getGlobalTransformCount() {
      return globalTransform_.size();
    }
    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_transform = 30;</code>
     * @param index The index of the element to return.
     * @return The globalTransform at the given index.
     */
    public double getGlobalTransform(int index) {
      return globalTransform_.getDouble(index);
    }
    private int globalTransformMemoizedSerializedSize = -1;

    public static final int GLOBAL_RATE_FIELD_NUMBER = 31;
    private com.google.protobuf.Internal.DoubleList globalRate_;
    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_rate = 31;</code>
     * @return A list containing the globalRate.
     */
    @java.lang.Override
    public java.util.List<java.lang.Double>
        getGlobalRateList() {
      return globalRate_;
    }
    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_rate = 31;</code>
     * @return The count of globalRate.
     */
    public int getGlobalRateCount() {
      return globalRate_.size();
    }
    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_rate = 31;</code>
     * @param index The index of the element to return.
     * @return The globalRate at the given index.
     */
    public double getGlobalRate(int index) {
      return globalRate_.getDouble(index);
    }
    private int globalRateMemoizedSerializedSize = -1;

    public static final int GLOBAL_ACCEL_FIELD_NUMBER = 32;
    private com.google.protobuf.Internal.DoubleList globalAccel_;
    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_accel = 32;</code>
     * @return A list containing the globalAccel.
     */
    @java.lang.Override
    public java.util.List<java.lang.Double>
        getGlobalAccelList() {
      return globalAccel_;
    }
    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_accel = 32;</code>
     * @return The count of globalAccel.
     */
    public int getGlobalAccelCount() {
      return globalAccel_.size();
    }
    /**
     * <pre>
     * double16 (glm::dmat4) global transformation matrix
     * </pre>
     *
     * <code>repeated double global_accel = 32;</code>
     * @param index The index of the element to return.
     * @return The globalAccel at the given index.
     */
    public double getGlobalAccel(int index) {
      return globalAccel_.getDouble(index);
    }
    private int globalAccelMemoizedSerializedSize = -1;

    public static final int PROPERTIES_FIELD_NUMBER = 33;
    private com.google.protobuf.LazyStringList properties_;
    /**
     * <pre>
     * serialized property-keys, used to request Vector32 or Vector64 data
     * </pre>
     *
     * <code>repeated string properties = 33;</code>
     * @return A list containing the properties.
     */
    public com.google.protobuf.ProtocolStringList
        getPropertiesList() {
      return properties_;
    }
    /**
     * <pre>
     * serialized property-keys, used to request Vector32 or Vector64 data
     * </pre>
     *
     * <code>repeated string properties = 33;</code>
     * @return The count of properties.
     */
    public int getPropertiesCount() {
      return properties_.size();
    }
    /**
     * <pre>
     * serialized property-keys, used to request Vector32 or Vector64 data
     * </pre>
     *
     * <code>repeated string properties = 33;</code>
     * @param index The index of the element to return.
     * @return The properties at the given index.
     */
    public java.lang.String getProperties(int index) {
      return properties_.get(index);
    }
    /**
     * <pre>
     * serialized property-keys, used to request Vector32 or Vector64 data
     * </pre>
     *
     * <code>repeated string properties = 33;</code>
     * @param index The index of the value to return.
     * @return The bytes of the properties at the given index.
     */
    public com.google.protobuf.ByteString
        getPropertiesBytes(int index) {
      return properties_.getByteString(index);
    }

    public static final int MEDIA_FIELD_NUMBER = 34;
    private java.util.List<Messages.MetaOuterClass.Visual> media_;
    /**
     * <pre>
     * optional visual media populated by server
     * </pre>
     *
     * <code>repeated .Messages.Visual media = 34;</code>
     */
    @java.lang.Override
    public java.util.List<Messages.MetaOuterClass.Visual> getMediaList() {
      return media_;
    }
    /**
     * <pre>
     * optional visual media populated by server
     * </pre>
     *
     * <code>repeated .Messages.Visual media = 34;</code>
     */
    @java.lang.Override
    public java.util.List<? extends Messages.MetaOuterClass.VisualOrBuilder> 
        getMediaOrBuilderList() {
      return media_;
    }
    /**
     * <pre>
     * optional visual media populated by server
     * </pre>
     *
     * <code>repeated .Messages.Visual media = 34;</code>
     */
    @java.lang.Override
    public int getMediaCount() {
      return media_.size();
    }
    /**
     * <pre>
     * optional visual media populated by server
     * </pre>
     *
     * <code>repeated .Messages.Visual media = 34;</code>
     */
    @java.lang.Override
    public Messages.MetaOuterClass.Visual getMedia(int index) {
      return media_.get(index);
    }
    /**
     * <pre>
     * optional visual media populated by server
     * </pre>
     *
     * <code>repeated .Messages.Visual media = 34;</code>
     */
    @java.lang.Override
    public Messages.MetaOuterClass.VisualOrBuilder getMediaOrBuilder(
        int index) {
      return media_.get(index);
    }

    public static final int SYMBOL_TRANSFORM_FIELD_NUMBER = 35;
    private com.google.protobuf.Internal.FloatList symbolTransform_;
    /**
     * <code>repeated float symbol_transform = 35;</code>
     * @return A list containing the symbolTransform.
     */
    @java.lang.Override
    public java.util.List<java.lang.Float>
        getSymbolTransformList() {
      return symbolTransform_;
    }
    /**
     * <code>repeated float symbol_transform = 35;</code>
     * @return The count of symbolTransform.
     */
    public int getSymbolTransformCount() {
      return symbolTransform_.size();
    }
    /**
     * <code>repeated float symbol_transform = 35;</code>
     * @param index The index of the element to return.
     * @return The symbolTransform at the given index.
     */
    public float getSymbolTransform(int index) {
      return symbolTransform_.getFloat(index);
    }
    private int symbolTransformMemoizedSerializedSize = -1;

    public static final int LENGTH_UNITS_FIELD_NUMBER = 40;
    private int lengthUnits_;
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>uint32 length_units = 40;</code>
     * @return The lengthUnits.
     */
    @java.lang.Override
    public int getLengthUnits() {
      return lengthUnits_;
    }

    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 (uid_ != 0L) {
        output.writeInt64(2, uid_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(directory_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, directory_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(symbol_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, symbol_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(owner_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, owner_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(comments_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, comments_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(series_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, series_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sysInfo_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, sysInfo_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(geomInfo_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 9, geomInfo_);
      }
      if (parent_ != 0L) {
        output.writeInt64(10, parent_);
      }
      if (created_ != 0L) {
        output.writeInt64(11, created_);
      }
      if (saved_ != 0L) {
        output.writeInt64(12, saved_);
      }
      if (modified_ != 0L) {
        output.writeInt64(13, modified_);
      }
      if (iteration_ != 0L) {
        output.writeUInt64(14, iteration_);
      }
      if (saveInterval_ != 0L) {
        output.writeUInt64(15, saveInterval_);
      }
      if (enabled_ != false) {
        output.writeBool(16, enabled_);
      }
      if (locked_ != false) {
        output.writeBool(17, locked_);
      }
      if (autoSave_ != false) {
        output.writeBool(18, autoSave_);
      }
      if (lightweight_ != false) {
        output.writeBool(19, lightweight_);
      }
      if (revision_ != null) {
        output.writeMessage(20, getRevision());
      }
      if (version_ != null) {
        output.writeMessage(21, getVersion());
      }
      if (bounds_ != null) {
        output.writeMessage(22, getBounds());
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(url_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 23, url_);
      }
      if (appearance_ != null) {
        output.writeMessage(24, getAppearance());
      }
      if (getChildrenList().size() > 0) {
        output.writeUInt32NoTag(202);
        output.writeUInt32NoTag(childrenMemoizedSerializedSize);
      }
      for (int i = 0; i < children_.size(); i++) {
        output.writeInt64NoTag(children_.getLong(i));
      }
      if (getGroupsList().size() > 0) {
        output.writeUInt32NoTag(210);
        output.writeUInt32NoTag(groupsMemoizedSerializedSize);
      }
      for (int i = 0; i < groups_.size(); i++) {
        output.writeInt32NoTag(groups_.getInt(i));
      }
      if (getLoopsList().size() > 0) {
        output.writeUInt32NoTag(218);
        output.writeUInt32NoTag(loopsMemoizedSerializedSize);
      }
      for (int i = 0; i < loops_.size(); i++) {
        output.writeInt32NoTag(loops_.getInt(i));
      }
      if (getSurfacesList().size() > 0) {
        output.writeUInt32NoTag(226);
        output.writeUInt32NoTag(surfacesMemoizedSerializedSize);
      }
      for (int i = 0; i < surfaces_.size(); i++) {
        output.writeInt32NoTag(surfaces_.getInt(i));
      }
      if (getVolumesList().size() > 0) {
        output.writeUInt32NoTag(234);
        output.writeUInt32NoTag(volumesMemoizedSerializedSize);
      }
      for (int i = 0; i < volumes_.size(); i++) {
        output.writeInt32NoTag(volumes_.getInt(i));
      }
      if (getGlobalTransformList().size() > 0) {
        output.writeUInt32NoTag(242);
        output.writeUInt32NoTag(globalTransformMemoizedSerializedSize);
      }
      for (int i = 0; i < globalTransform_.size(); i++) {
        output.writeDoubleNoTag(globalTransform_.getDouble(i));
      }
      if (getGlobalRateList().size() > 0) {
        output.writeUInt32NoTag(250);
        output.writeUInt32NoTag(globalRateMemoizedSerializedSize);
      }
      for (int i = 0; i < globalRate_.size(); i++) {
        output.writeDoubleNoTag(globalRate_.getDouble(i));
      }
      if (getGlobalAccelList().size() > 0) {
        output.writeUInt32NoTag(258);
        output.writeUInt32NoTag(globalAccelMemoizedSerializedSize);
      }
      for (int i = 0; i < globalAccel_.size(); i++) {
        output.writeDoubleNoTag(globalAccel_.getDouble(i));
      }
      for (int i = 0; i < properties_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 33, properties_.getRaw(i));
      }
      for (int i = 0; i < media_.size(); i++) {
        output.writeMessage(34, media_.get(i));
      }
      if (getSymbolTransformList().size() > 0) {
        output.writeUInt32NoTag(282);
        output.writeUInt32NoTag(symbolTransformMemoizedSerializedSize);
      }
      for (int i = 0; i < symbolTransform_.size(); i++) {
        output.writeFloatNoTag(symbolTransform_.getFloat(i));
      }
      if (lengthUnits_ != 0) {
        output.writeUInt32(40, lengthUnits_);
      }
      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 (uid_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, uid_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(directory_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, directory_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(symbol_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, symbol_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(owner_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, owner_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(comments_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, comments_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(series_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, series_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(sysInfo_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, sysInfo_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(geomInfo_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, geomInfo_);
      }
      if (parent_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(10, parent_);
      }
      if (created_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(11, created_);
      }
      if (saved_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(12, saved_);
      }
      if (modified_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(13, modified_);
      }
      if (iteration_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(14, iteration_);
      }
      if (saveInterval_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(15, saveInterval_);
      }
      if (enabled_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(16, enabled_);
      }
      if (locked_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(17, locked_);
      }
      if (autoSave_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(18, autoSave_);
      }
      if (lightweight_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(19, lightweight_);
      }
      if (revision_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(20, getRevision());
      }
      if (version_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(21, getVersion());
      }
      if (bounds_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(22, getBounds());
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(url_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(23, url_);
      }
      if (appearance_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(24, getAppearance());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < children_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt64SizeNoTag(children_.getLong(i));
        }
        size += dataSize;
        if (!getChildrenList().isEmpty()) {
          size += 2;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        childrenMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < groups_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(groups_.getInt(i));
        }
        size += dataSize;
        if (!getGroupsList().isEmpty()) {
          size += 2;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        groupsMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < loops_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(loops_.getInt(i));
        }
        size += dataSize;
        if (!getLoopsList().isEmpty()) {
          size += 2;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        loopsMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < surfaces_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(surfaces_.getInt(i));
        }
        size += dataSize;
        if (!getSurfacesList().isEmpty()) {
          size += 2;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        surfacesMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < volumes_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(volumes_.getInt(i));
        }
        size += dataSize;
        if (!getVolumesList().isEmpty()) {
          size += 2;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        volumesMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        dataSize = 8 * getGlobalTransformList().size();
        size += dataSize;
        if (!getGlobalTransformList().isEmpty()) {
          size += 2;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        globalTransformMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        dataSize = 8 * getGlobalRateList().size();
        size += dataSize;
        if (!getGlobalRateList().isEmpty()) {
          size += 2;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        globalRateMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        dataSize = 8 * getGlobalAccelList().size();
        size += dataSize;
        if (!getGlobalAccelList().isEmpty()) {
          size += 2;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        globalAccelMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        for (int i = 0; i < properties_.size(); i++) {
          dataSize += computeStringSizeNoTag(properties_.getRaw(i));
        }
        size += dataSize;
        size += 2 * getPropertiesList().size();
      }
      for (int i = 0; i < media_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(34, media_.get(i));
      }
      {
        int dataSize = 0;
        dataSize = 4 * getSymbolTransformList().size();
        size += dataSize;
        if (!getSymbolTransformList().isEmpty()) {
          size += 2;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        symbolTransformMemoizedSerializedSize = dataSize;
      }
      if (lengthUnits_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(40, lengthUnits_);
      }
      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.MetaOuterClass.Meta)) {
        return super.equals(obj);
      }
      Messages.MetaOuterClass.Meta other = (Messages.MetaOuterClass.Meta) obj;

      if (!getName()
          .equals(other.getName())) return false;
      if (getUid()
          != other.getUid()) return false;
      if (!getDirectory()
          .equals(other.getDirectory())) return false;
      if (!getSymbol()
          .equals(other.getSymbol())) return false;
      if (!getOwner()
          .equals(other.getOwner())) return false;
      if (!getComments()
          .equals(other.getComments())) return false;
      if (!getSeries()
          .equals(other.getSeries())) return false;
      if (!getSysInfo()
          .equals(other.getSysInfo())) return false;
      if (!getGeomInfo()
          .equals(other.getGeomInfo())) return false;
      if (getParent()
          != other.getParent()) return false;
      if (getCreated()
          != other.getCreated()) return false;
      if (getSaved()
          != other.getSaved()) return false;
      if (getModified()
          != other.getModified()) return false;
      if (getIteration()
          != other.getIteration()) return false;
      if (getSaveInterval()
          != other.getSaveInterval()) return false;
      if (getEnabled()
          != other.getEnabled()) return false;
      if (getLocked()
          != other.getLocked()) return false;
      if (getAutoSave()
          != other.getAutoSave()) return false;
      if (getLightweight()
          != other.getLightweight()) return false;
      if (hasRevision() != other.hasRevision()) return false;
      if (hasRevision()) {
        if (!getRevision()
            .equals(other.getRevision())) return false;
      }
      if (hasVersion() != other.hasVersion()) return false;
      if (hasVersion()) {
        if (!getVersion()
            .equals(other.getVersion())) return false;
      }
      if (hasBounds() != other.hasBounds()) return false;
      if (hasBounds()) {
        if (!getBounds()
            .equals(other.getBounds())) return false;
      }
      if (!getUrl()
          .equals(other.getUrl())) return false;
      if (hasAppearance() != other.hasAppearance()) return false;
      if (hasAppearance()) {
        if (!getAppearance()
            .equals(other.getAppearance())) return false;
      }
      if (!getChildrenList()
          .equals(other.getChildrenList())) return false;
      if (!getGroupsList()
          .equals(other.getGroupsList())) return false;
      if (!getLoopsList()
          .equals(other.getLoopsList())) return false;
      if (!getSurfacesList()
          .equals(other.getSurfacesList())) return false;
      if (!getVolumesList()
          .equals(other.getVolumesList())) return false;
      if (!getGlobalTransformList()
          .equals(other.getGlobalTransformList())) return false;
      if (!getGlobalRateList()
          .equals(other.getGlobalRateList())) return false;
      if (!getGlobalAccelList()
          .equals(other.getGlobalAccelList())) return false;
      if (!getPropertiesList()
          .equals(other.getPropertiesList())) return false;
      if (!getMediaList()
          .equals(other.getMediaList())) return false;
      if (!getSymbolTransformList()
          .equals(other.getSymbolTransformList())) return false;
      if (getLengthUnits()
          != other.getLengthUnits()) 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) + UID_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getUid());
      hash = (37 * hash) + DIRECTORY_FIELD_NUMBER;
      hash = (53 * hash) + getDirectory().hashCode();
      hash = (37 * hash) + SYMBOL_FIELD_NUMBER;
      hash = (53 * hash) + getSymbol().hashCode();
      hash = (37 * hash) + OWNER_FIELD_NUMBER;
      hash = (53 * hash) + getOwner().hashCode();
      hash = (37 * hash) + COMMENTS_FIELD_NUMBER;
      hash = (53 * hash) + getComments().hashCode();
      hash = (37 * hash) + SERIES_FIELD_NUMBER;
      hash = (53 * hash) + getSeries().hashCode();
      hash = (37 * hash) + SYS_INFO_FIELD_NUMBER;
      hash = (53 * hash) + getSysInfo().hashCode();
      hash = (37 * hash) + GEOM_INFO_FIELD_NUMBER;
      hash = (53 * hash) + getGeomInfo().hashCode();
      hash = (37 * hash) + PARENT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getParent());
      hash = (37 * hash) + CREATED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getCreated());
      hash = (37 * hash) + SAVED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getSaved());
      hash = (37 * hash) + MODIFIED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getModified());
      hash = (37 * hash) + ITERATION_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getIteration());
      hash = (37 * hash) + SAVE_INTERVAL_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getSaveInterval());
      hash = (37 * hash) + ENABLED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getEnabled());
      hash = (37 * hash) + LOCKED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getLocked());
      hash = (37 * hash) + AUTO_SAVE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getAutoSave());
      hash = (37 * hash) + LIGHTWEIGHT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getLightweight());
      if (hasRevision()) {
        hash = (37 * hash) + REVISION_FIELD_NUMBER;
        hash = (53 * hash) + getRevision().hashCode();
      }
      if (hasVersion()) {
        hash = (37 * hash) + VERSION_FIELD_NUMBER;
        hash = (53 * hash) + getVersion().hashCode();
      }
      if (hasBounds()) {
        hash = (37 * hash) + BOUNDS_FIELD_NUMBER;
        hash = (53 * hash) + getBounds().hashCode();
      }
      hash = (37 * hash) + URL_FIELD_NUMBER;
      hash = (53 * hash) + getUrl().hashCode();
      if (hasAppearance()) {
        hash = (37 * hash) + APPEARANCE_FIELD_NUMBER;
        hash = (53 * hash) + getAppearance().hashCode();
      }
      if (getChildrenCount() > 0) {
        hash = (37 * hash) + CHILDREN_FIELD_NUMBER;
        hash = (53 * hash) + getChildrenList().hashCode();
      }
      if (getGroupsCount() > 0) {
        hash = (37 * hash) + GROUPS_FIELD_NUMBER;
        hash = (53 * hash) + getGroupsList().hashCode();
      }
      if (getLoopsCount() > 0) {
        hash = (37 * hash) + LOOPS_FIELD_NUMBER;
        hash = (53 * hash) + getLoopsList().hashCode();
      }
      if (getSurfacesCount() > 0) {
        hash = (37 * hash) + SURFACES_FIELD_NUMBER;
        hash = (53 * hash) + getSurfacesList().hashCode();
      }
      if (getVolumesCount() > 0) {
        hash = (37 * hash) + VOLUMES_FIELD_NUMBER;
        hash = (53 * hash) + getVolumesList().hashCode();
      }
      if (getGlobalTransformCount() > 0) {
        hash = (37 * hash) + GLOBAL_TRANSFORM_FIELD_NUMBER;
        hash = (53 * hash) + getGlobalTransformList().hashCode();
      }
      if (getGlobalRateCount() > 0) {
        hash = (37 * hash) + GLOBAL_RATE_FIELD_NUMBER;
        hash = (53 * hash) + getGlobalRateList().hashCode();
      }
      if (getGlobalAccelCount() > 0) {
        hash = (37 * hash) + GLOBAL_ACCEL_FIELD_NUMBER;
        hash = (53 * hash) + getGlobalAccelList().hashCode();
      }
      if (getPropertiesCount() > 0) {
        hash = (37 * hash) + PROPERTIES_FIELD_NUMBER;
        hash = (53 * hash) + getPropertiesList().hashCode();
      }
      if (getMediaCount() > 0) {
        hash = (37 * hash) + MEDIA_FIELD_NUMBER;
        hash = (53 * hash) + getMediaList().hashCode();
      }
      if (getSymbolTransformCount() > 0) {
        hash = (37 * hash) + SYMBOL_TRANSFORM_FIELD_NUMBER;
        hash = (53 * hash) + getSymbolTransformList().hashCode();
      }
      hash = (37 * hash) + LENGTH_UNITS_FIELD_NUMBER;
      hash = (53 * hash) + getLengthUnits();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static Messages.MetaOuterClass.Meta parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.Meta parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.Meta parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.Meta parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.Meta parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.Meta parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.Meta parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.Meta 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.MetaOuterClass.Meta parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.Meta 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.MetaOuterClass.Meta parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.Meta 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.MetaOuterClass.Meta 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.Meta}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:Messages.Meta)
        Messages.MetaOuterClass.MetaOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Messages.MetaOuterClass.internal_static_Messages_Meta_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Messages.MetaOuterClass.internal_static_Messages_Meta_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Messages.MetaOuterClass.Meta.class, Messages.MetaOuterClass.Meta.Builder.class);
      }

      // Construct using Messages.MetaOuterClass.Meta.newBuilder()
      private Builder() {

      }

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

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

        uid_ = 0L;

        directory_ = "";

        symbol_ = "";

        owner_ = "";

        comments_ = "";

        series_ = "";

        sysInfo_ = "";

        geomInfo_ = "";

        parent_ = 0L;

        created_ = 0L;

        saved_ = 0L;

        modified_ = 0L;

        iteration_ = 0L;

        saveInterval_ = 0L;

        enabled_ = false;

        locked_ = false;

        autoSave_ = false;

        lightweight_ = false;

        if (revisionBuilder_ == null) {
          revision_ = null;
        } else {
          revision_ = null;
          revisionBuilder_ = null;
        }
        if (versionBuilder_ == null) {
          version_ = null;
        } else {
          version_ = null;
          versionBuilder_ = null;
        }
        if (boundsBuilder_ == null) {
          bounds_ = null;
        } else {
          bounds_ = null;
          boundsBuilder_ = null;
        }
        url_ = "";

        if (appearanceBuilder_ == null) {
          appearance_ = null;
        } else {
          appearance_ = null;
          appearanceBuilder_ = null;
        }
        children_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000001);
        groups_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000002);
        loops_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000004);
        surfaces_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000008);
        volumes_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000010);
        globalTransform_ = emptyDoubleList();
        bitField0_ = (bitField0_ & ~0x00000020);
        globalRate_ = emptyDoubleList();
        bitField0_ = (bitField0_ & ~0x00000040);
        globalAccel_ = emptyDoubleList();
        bitField0_ = (bitField0_ & ~0x00000080);
        properties_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000100);
        if (mediaBuilder_ == null) {
          media_ = java.util.Collections.emptyList();
        } else {
          media_ = null;
          mediaBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        symbolTransform_ = emptyFloatList();
        bitField0_ = (bitField0_ & ~0x00000400);
        lengthUnits_ = 0;

        return this;
      }

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

      @java.lang.Override
      public Messages.MetaOuterClass.Meta getDefaultInstanceForType() {
        return Messages.MetaOuterClass.Meta.getDefaultInstance();
      }

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

      @java.lang.Override
      public Messages.MetaOuterClass.Meta buildPartial() {
        Messages.MetaOuterClass.Meta result = new Messages.MetaOuterClass.Meta(this);
        int from_bitField0_ = bitField0_;
        result.name_ = name_;
        result.uid_ = uid_;
        result.directory_ = directory_;
        result.symbol_ = symbol_;
        result.owner_ = owner_;
        result.comments_ = comments_;
        result.series_ = series_;
        result.sysInfo_ = sysInfo_;
        result.geomInfo_ = geomInfo_;
        result.parent_ = parent_;
        result.created_ = created_;
        result.saved_ = saved_;
        result.modified_ = modified_;
        result.iteration_ = iteration_;
        result.saveInterval_ = saveInterval_;
        result.enabled_ = enabled_;
        result.locked_ = locked_;
        result.autoSave_ = autoSave_;
        result.lightweight_ = lightweight_;
        if (revisionBuilder_ == null) {
          result.revision_ = revision_;
        } else {
          result.revision_ = revisionBuilder_.build();
        }
        if (versionBuilder_ == null) {
          result.version_ = version_;
        } else {
          result.version_ = versionBuilder_.build();
        }
        if (boundsBuilder_ == null) {
          result.bounds_ = bounds_;
        } else {
          result.bounds_ = boundsBuilder_.build();
        }
        result.url_ = url_;
        if (appearanceBuilder_ == null) {
          result.appearance_ = appearance_;
        } else {
          result.appearance_ = appearanceBuilder_.build();
        }
        if (((bitField0_ & 0x00000001) != 0)) {
          children_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.children_ = children_;
        if (((bitField0_ & 0x00000002) != 0)) {
          groups_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.groups_ = groups_;
        if (((bitField0_ & 0x00000004) != 0)) {
          loops_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.loops_ = loops_;
        if (((bitField0_ & 0x00000008) != 0)) {
          surfaces_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.surfaces_ = surfaces_;
        if (((bitField0_ & 0x00000010) != 0)) {
          volumes_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.volumes_ = volumes_;
        if (((bitField0_ & 0x00000020) != 0)) {
          globalTransform_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000020);
        }
        result.globalTransform_ = globalTransform_;
        if (((bitField0_ & 0x00000040) != 0)) {
          globalRate_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000040);
        }
        result.globalRate_ = globalRate_;
        if (((bitField0_ & 0x00000080) != 0)) {
          globalAccel_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000080);
        }
        result.globalAccel_ = globalAccel_;
        if (((bitField0_ & 0x00000100) != 0)) {
          properties_ = properties_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000100);
        }
        result.properties_ = properties_;
        if (mediaBuilder_ == null) {
          if (((bitField0_ & 0x00000200) != 0)) {
            media_ = java.util.Collections.unmodifiableList(media_);
            bitField0_ = (bitField0_ & ~0x00000200);
          }
          result.media_ = media_;
        } else {
          result.media_ = mediaBuilder_.build();
        }
        if (((bitField0_ & 0x00000400) != 0)) {
          symbolTransform_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000400);
        }
        result.symbolTransform_ = symbolTransform_;
        result.lengthUnits_ = lengthUnits_;
        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.MetaOuterClass.Meta) {
          return mergeFrom((Messages.MetaOuterClass.Meta)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(Messages.MetaOuterClass.Meta other) {
        if (other == Messages.MetaOuterClass.Meta.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (other.getUid() != 0L) {
          setUid(other.getUid());
        }
        if (!other.getDirectory().isEmpty()) {
          directory_ = other.directory_;
          onChanged();
        }
        if (!other.getSymbol().isEmpty()) {
          symbol_ = other.symbol_;
          onChanged();
        }
        if (!other.getOwner().isEmpty()) {
          owner_ = other.owner_;
          onChanged();
        }
        if (!other.getComments().isEmpty()) {
          comments_ = other.comments_;
          onChanged();
        }
        if (!other.getSeries().isEmpty()) {
          series_ = other.series_;
          onChanged();
        }
        if (!other.getSysInfo().isEmpty()) {
          sysInfo_ = other.sysInfo_;
          onChanged();
        }
        if (!other.getGeomInfo().isEmpty()) {
          geomInfo_ = other.geomInfo_;
          onChanged();
        }
        if (other.getParent() != 0L) {
          setParent(other.getParent());
        }
        if (other.getCreated() != 0L) {
          setCreated(other.getCreated());
        }
        if (other.getSaved() != 0L) {
          setSaved(other.getSaved());
        }
        if (other.getModified() != 0L) {
          setModified(other.getModified());
        }
        if (other.getIteration() != 0L) {
          setIteration(other.getIteration());
        }
        if (other.getSaveInterval() != 0L) {
          setSaveInterval(other.getSaveInterval());
        }
        if (other.getEnabled() != false) {
          setEnabled(other.getEnabled());
        }
        if (other.getLocked() != false) {
          setLocked(other.getLocked());
        }
        if (other.getAutoSave() != false) {
          setAutoSave(other.getAutoSave());
        }
        if (other.getLightweight() != false) {
          setLightweight(other.getLightweight());
        }
        if (other.hasRevision()) {
          mergeRevision(other.getRevision());
        }
        if (other.hasVersion()) {
          mergeVersion(other.getVersion());
        }
        if (other.hasBounds()) {
          mergeBounds(other.getBounds());
        }
        if (!other.getUrl().isEmpty()) {
          url_ = other.url_;
          onChanged();
        }
        if (other.hasAppearance()) {
          mergeAppearance(other.getAppearance());
        }
        if (!other.children_.isEmpty()) {
          if (children_.isEmpty()) {
            children_ = other.children_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureChildrenIsMutable();
            children_.addAll(other.children_);
          }
          onChanged();
        }
        if (!other.groups_.isEmpty()) {
          if (groups_.isEmpty()) {
            groups_ = other.groups_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureGroupsIsMutable();
            groups_.addAll(other.groups_);
          }
          onChanged();
        }
        if (!other.loops_.isEmpty()) {
          if (loops_.isEmpty()) {
            loops_ = other.loops_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureLoopsIsMutable();
            loops_.addAll(other.loops_);
          }
          onChanged();
        }
        if (!other.surfaces_.isEmpty()) {
          if (surfaces_.isEmpty()) {
            surfaces_ = other.surfaces_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureSurfacesIsMutable();
            surfaces_.addAll(other.surfaces_);
          }
          onChanged();
        }
        if (!other.volumes_.isEmpty()) {
          if (volumes_.isEmpty()) {
            volumes_ = other.volumes_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureVolumesIsMutable();
            volumes_.addAll(other.volumes_);
          }
          onChanged();
        }
        if (!other.globalTransform_.isEmpty()) {
          if (globalTransform_.isEmpty()) {
            globalTransform_ = other.globalTransform_;
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            ensureGlobalTransformIsMutable();
            globalTransform_.addAll(other.globalTransform_);
          }
          onChanged();
        }
        if (!other.globalRate_.isEmpty()) {
          if (globalRate_.isEmpty()) {
            globalRate_ = other.globalRate_;
            bitField0_ = (bitField0_ & ~0x00000040);
          } else {
            ensureGlobalRateIsMutable();
            globalRate_.addAll(other.globalRate_);
          }
          onChanged();
        }
        if (!other.globalAccel_.isEmpty()) {
          if (globalAccel_.isEmpty()) {
            globalAccel_ = other.globalAccel_;
            bitField0_ = (bitField0_ & ~0x00000080);
          } else {
            ensureGlobalAccelIsMutable();
            globalAccel_.addAll(other.globalAccel_);
          }
          onChanged();
        }
        if (!other.properties_.isEmpty()) {
          if (properties_.isEmpty()) {
            properties_ = other.properties_;
            bitField0_ = (bitField0_ & ~0x00000100);
          } else {
            ensurePropertiesIsMutable();
            properties_.addAll(other.properties_);
          }
          onChanged();
        }
        if (mediaBuilder_ == null) {
          if (!other.media_.isEmpty()) {
            if (media_.isEmpty()) {
              media_ = other.media_;
              bitField0_ = (bitField0_ & ~0x00000200);
            } else {
              ensureMediaIsMutable();
              media_.addAll(other.media_);
            }
            onChanged();
          }
        } else {
          if (!other.media_.isEmpty()) {
            if (mediaBuilder_.isEmpty()) {
              mediaBuilder_.dispose();
              mediaBuilder_ = null;
              media_ = other.media_;
              bitField0_ = (bitField0_ & ~0x00000200);
              mediaBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getMediaFieldBuilder() : null;
            } else {
              mediaBuilder_.addAllMessages(other.media_);
            }
          }
        }
        if (!other.symbolTransform_.isEmpty()) {
          if (symbolTransform_.isEmpty()) {
            symbolTransform_ = other.symbolTransform_;
            bitField0_ = (bitField0_ & ~0x00000400);
          } else {
            ensureSymbolTransformIsMutable();
            symbolTransform_.addAll(other.symbolTransform_);
          }
          onChanged();
        }
        if (other.getLengthUnits() != 0) {
          setLengthUnits(other.getLengthUnits());
        }
        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: {
                uid_ = input.readInt64();

                break;
              } // case 16
              case 26: {
                directory_ = input.readStringRequireUtf8();

                break;
              } // case 26
              case 34: {
                symbol_ = input.readStringRequireUtf8();

                break;
              } // case 34
              case 42: {
                owner_ = input.readStringRequireUtf8();

                break;
              } // case 42
              case 50: {
                comments_ = input.readStringRequireUtf8();

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

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

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

                break;
              } // case 74
              case 80: {
                parent_ = input.readInt64();

                break;
              } // case 80
              case 88: {
                created_ = input.readInt64();

                break;
              } // case 88
              case 96: {
                saved_ = input.readInt64();

                break;
              } // case 96
              case 104: {
                modified_ = input.readInt64();

                break;
              } // case 104
              case 112: {
                iteration_ = input.readUInt64();

                break;
              } // case 112
              case 120: {
                saveInterval_ = input.readUInt64();

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

                break;
              } // case 128
              case 136: {
                locked_ = input.readBool();

                break;
              } // case 136
              case 144: {
                autoSave_ = input.readBool();

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

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

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

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

                break;
              } // case 178
              case 186: {
                url_ = input.readStringRequireUtf8();

                break;
              } // case 186
              case 194: {
                input.readMessage(
                    getAppearanceFieldBuilder().getBuilder(),
                    extensionRegistry);

                break;
              } // case 194
              case 200: {
                long v = input.readInt64();
                ensureChildrenIsMutable();
                children_.addLong(v);
                break;
              } // case 200
              case 202: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureChildrenIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  children_.addLong(input.readInt64());
                }
                input.popLimit(limit);
                break;
              } // case 202
              case 208: {
                int v = input.readInt32();
                ensureGroupsIsMutable();
                groups_.addInt(v);
                break;
              } // case 208
              case 210: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureGroupsIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  groups_.addInt(input.readInt32());
                }
                input.popLimit(limit);
                break;
              } // case 210
              case 216: {
                int v = input.readInt32();
                ensureLoopsIsMutable();
                loops_.addInt(v);
                break;
              } // case 216
              case 218: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureLoopsIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  loops_.addInt(input.readInt32());
                }
                input.popLimit(limit);
                break;
              } // case 218
              case 224: {
                int v = input.readInt32();
                ensureSurfacesIsMutable();
                surfaces_.addInt(v);
                break;
              } // case 224
              case 226: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureSurfacesIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  surfaces_.addInt(input.readInt32());
                }
                input.popLimit(limit);
                break;
              } // case 226
              case 232: {
                int v = input.readInt32();
                ensureVolumesIsMutable();
                volumes_.addInt(v);
                break;
              } // case 232
              case 234: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureVolumesIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  volumes_.addInt(input.readInt32());
                }
                input.popLimit(limit);
                break;
              } // case 234
              case 241: {
                double v = input.readDouble();
                ensureGlobalTransformIsMutable();
                globalTransform_.addDouble(v);
                break;
              } // case 241
              case 242: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureGlobalTransformIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  globalTransform_.addDouble(input.readDouble());
                }
                input.popLimit(limit);
                break;
              } // case 242
              case 249: {
                double v = input.readDouble();
                ensureGlobalRateIsMutable();
                globalRate_.addDouble(v);
                break;
              } // case 249
              case 250: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureGlobalRateIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  globalRate_.addDouble(input.readDouble());
                }
                input.popLimit(limit);
                break;
              } // case 250
              case 257: {
                double v = input.readDouble();
                ensureGlobalAccelIsMutable();
                globalAccel_.addDouble(v);
                break;
              } // case 257
              case 258: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureGlobalAccelIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  globalAccel_.addDouble(input.readDouble());
                }
                input.popLimit(limit);
                break;
              } // case 258
              case 266: {
                java.lang.String s = input.readStringRequireUtf8();
                ensurePropertiesIsMutable();
                properties_.add(s);
                break;
              } // case 266
              case 274: {
                Messages.MetaOuterClass.Visual m =
                    input.readMessage(
                        Messages.MetaOuterClass.Visual.parser(),
                        extensionRegistry);
                if (mediaBuilder_ == null) {
                  ensureMediaIsMutable();
                  media_.add(m);
                } else {
                  mediaBuilder_.addMessage(m);
                }
                break;
              } // case 274
              case 285: {
                float v = input.readFloat();
                ensureSymbolTransformIsMutable();
                symbolTransform_.addFloat(v);
                break;
              } // case 285
              case 282: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureSymbolTransformIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  symbolTransform_.addFloat(input.readFloat());
                }
                input.popLimit(limit);
                break;
              } // case 282
              case 320: {
                lengthUnits_ = input.readUInt32();

                break;
              } // case 320
              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_ = "";
      /**
       * <pre>
       * unique identifier that persists between sessions
       * </pre>
       *
       * <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;
        }
      }
      /**
       * <pre>
       * unique identifier that persists between sessions
       * </pre>
       *
       * <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;
        }
      }
      /**
       * <pre>
       * unique identifier that persists between sessions
       * </pre>
       *
       * <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;
      }
      /**
       * <pre>
       * unique identifier that persists between sessions
       * </pre>
       *
       * <code>string name = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearName() {
        
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * unique identifier that persists between sessions
       * </pre>
       *
       * <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 long uid_ ;
      /**
       * <pre>
       * unique id for each system assigned, valid only within a given session
       * </pre>
       *
       * <code>int64 uid = 2;</code>
       * @return The uid.
       */
      @java.lang.Override
      public long getUid() {
        return uid_;
      }
      /**
       * <pre>
       * unique id for each system assigned, valid only within a given session
       * </pre>
       *
       * <code>int64 uid = 2;</code>
       * @param value The uid to set.
       * @return This builder for chaining.
       */
      public Builder setUid(long value) {
        
        uid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * unique id for each system assigned, valid only within a given session
       * </pre>
       *
       * <code>int64 uid = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearUid() {
        
        uid_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object directory_ = "";
      /**
       * <code>string directory = 3;</code>
       * @return The directory.
       */
      public java.lang.String getDirectory() {
        java.lang.Object ref = directory_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          directory_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string directory = 3;</code>
       * @return The bytes for directory.
       */
      public com.google.protobuf.ByteString
          getDirectoryBytes() {
        java.lang.Object ref = directory_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          directory_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string directory = 3;</code>
       * @param value The directory to set.
       * @return This builder for chaining.
       */
      public Builder setDirectory(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        directory_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string directory = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearDirectory() {
        
        directory_ = getDefaultInstance().getDirectory();
        onChanged();
        return this;
      }
      /**
       * <code>string directory = 3;</code>
       * @param value The bytes for directory to set.
       * @return This builder for chaining.
       */
      public Builder setDirectoryBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        directory_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object symbol_ = "";
      /**
       * <code>string symbol = 4;</code>
       * @return The symbol.
       */
      public java.lang.String getSymbol() {
        java.lang.Object ref = symbol_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          symbol_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string symbol = 4;</code>
       * @return The bytes for symbol.
       */
      public com.google.protobuf.ByteString
          getSymbolBytes() {
        java.lang.Object ref = symbol_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          symbol_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string symbol = 4;</code>
       * @param value The symbol to set.
       * @return This builder for chaining.
       */
      public Builder setSymbol(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        symbol_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string symbol = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearSymbol() {
        
        symbol_ = getDefaultInstance().getSymbol();
        onChanged();
        return this;
      }
      /**
       * <code>string symbol = 4;</code>
       * @param value The bytes for symbol to set.
       * @return This builder for chaining.
       */
      public Builder setSymbolBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        symbol_ = value;
        onChanged();
        return this;
      }

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

      private java.lang.Object comments_ = "";
      /**
       * <code>string comments = 6;</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 = 6;</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 = 6;</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 = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearComments() {
        
        comments_ = getDefaultInstance().getComments();
        onChanged();
        return this;
      }
      /**
       * <code>string comments = 6;</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 series_ = "";
      /**
       * <code>string series = 7;</code>
       * @return The series.
       */
      public java.lang.String getSeries() {
        java.lang.Object ref = series_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          series_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string series = 7;</code>
       * @return The bytes for series.
       */
      public com.google.protobuf.ByteString
          getSeriesBytes() {
        java.lang.Object ref = series_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          series_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string series = 7;</code>
       * @param value The series to set.
       * @return This builder for chaining.
       */
      public Builder setSeries(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        series_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string series = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearSeries() {
        
        series_ = getDefaultInstance().getSeries();
        onChanged();
        return this;
      }
      /**
       * <code>string series = 7;</code>
       * @param value The bytes for series to set.
       * @return This builder for chaining.
       */
      public Builder setSeriesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        series_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object sysInfo_ = "";
      /**
       * <code>string sys_info = 8;</code>
       * @return The sysInfo.
       */
      public java.lang.String getSysInfo() {
        java.lang.Object ref = sysInfo_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          sysInfo_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string sys_info = 8;</code>
       * @return The bytes for sysInfo.
       */
      public com.google.protobuf.ByteString
          getSysInfoBytes() {
        java.lang.Object ref = sysInfo_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sysInfo_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string sys_info = 8;</code>
       * @param value The sysInfo to set.
       * @return This builder for chaining.
       */
      public Builder setSysInfo(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        sysInfo_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string sys_info = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearSysInfo() {
        
        sysInfo_ = getDefaultInstance().getSysInfo();
        onChanged();
        return this;
      }
      /**
       * <code>string sys_info = 8;</code>
       * @param value The bytes for sysInfo to set.
       * @return This builder for chaining.
       */
      public Builder setSysInfoBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        sysInfo_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object geomInfo_ = "";
      /**
       * <code>string geom_info = 9;</code>
       * @return The geomInfo.
       */
      public java.lang.String getGeomInfo() {
        java.lang.Object ref = geomInfo_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          geomInfo_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string geom_info = 9;</code>
       * @return The bytes for geomInfo.
       */
      public com.google.protobuf.ByteString
          getGeomInfoBytes() {
        java.lang.Object ref = geomInfo_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          geomInfo_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string geom_info = 9;</code>
       * @param value The geomInfo to set.
       * @return This builder for chaining.
       */
      public Builder setGeomInfo(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        geomInfo_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string geom_info = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearGeomInfo() {
        
        geomInfo_ = getDefaultInstance().getGeomInfo();
        onChanged();
        return this;
      }
      /**
       * <code>string geom_info = 9;</code>
       * @param value The bytes for geomInfo to set.
       * @return This builder for chaining.
       */
      public Builder setGeomInfoBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        geomInfo_ = value;
        onChanged();
        return this;
      }

      private long parent_ ;
      /**
       * <code>int64 parent = 10;</code>
       * @return The parent.
       */
      @java.lang.Override
      public long getParent() {
        return parent_;
      }
      /**
       * <code>int64 parent = 10;</code>
       * @param value The parent to set.
       * @return This builder for chaining.
       */
      public Builder setParent(long value) {
        
        parent_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int64 parent = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearParent() {
        
        parent_ = 0L;
        onChanged();
        return this;
      }

      private long created_ ;
      /**
       * <pre>
       * unix time
       * </pre>
       *
       * <code>int64 created = 11;</code>
       * @return The created.
       */
      @java.lang.Override
      public long getCreated() {
        return created_;
      }
      /**
       * <pre>
       * unix time
       * </pre>
       *
       * <code>int64 created = 11;</code>
       * @param value The created to set.
       * @return This builder for chaining.
       */
      public Builder setCreated(long value) {
        
        created_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * unix time
       * </pre>
       *
       * <code>int64 created = 11;</code>
       * @return This builder for chaining.
       */
      public Builder clearCreated() {
        
        created_ = 0L;
        onChanged();
        return this;
      }

      private long saved_ ;
      /**
       * <code>int64 saved = 12;</code>
       * @return The saved.
       */
      @java.lang.Override
      public long getSaved() {
        return saved_;
      }
      /**
       * <code>int64 saved = 12;</code>
       * @param value The saved to set.
       * @return This builder for chaining.
       */
      public Builder setSaved(long value) {
        
        saved_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int64 saved = 12;</code>
       * @return This builder for chaining.
       */
      public Builder clearSaved() {
        
        saved_ = 0L;
        onChanged();
        return this;
      }

      private long modified_ ;
      /**
       * <code>int64 modified = 13;</code>
       * @return The modified.
       */
      @java.lang.Override
      public long getModified() {
        return modified_;
      }
      /**
       * <code>int64 modified = 13;</code>
       * @param value The modified to set.
       * @return This builder for chaining.
       */
      public Builder setModified(long value) {
        
        modified_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int64 modified = 13;</code>
       * @return This builder for chaining.
       */
      public Builder clearModified() {
        
        modified_ = 0L;
        onChanged();
        return this;
      }

      private long iteration_ ;
      /**
       * <code>uint64 iteration = 14;</code>
       * @return The iteration.
       */
      @java.lang.Override
      public long getIteration() {
        return iteration_;
      }
      /**
       * <code>uint64 iteration = 14;</code>
       * @param value The iteration to set.
       * @return This builder for chaining.
       */
      public Builder setIteration(long value) {
        
        iteration_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint64 iteration = 14;</code>
       * @return This builder for chaining.
       */
      public Builder clearIteration() {
        
        iteration_ = 0L;
        onChanged();
        return this;
      }

      private long saveInterval_ ;
      /**
       * <code>uint64 save_interval = 15;</code>
       * @return The saveInterval.
       */
      @java.lang.Override
      public long getSaveInterval() {
        return saveInterval_;
      }
      /**
       * <code>uint64 save_interval = 15;</code>
       * @param value The saveInterval to set.
       * @return This builder for chaining.
       */
      public Builder setSaveInterval(long value) {
        
        saveInterval_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint64 save_interval = 15;</code>
       * @return This builder for chaining.
       */
      public Builder clearSaveInterval() {
        
        saveInterval_ = 0L;
        onChanged();
        return this;
      }

      private boolean enabled_ ;
      /**
       * <code>bool enabled = 16;</code>
       * @return The enabled.
       */
      @java.lang.Override
      public boolean getEnabled() {
        return enabled_;
      }
      /**
       * <code>bool enabled = 16;</code>
       * @param value The enabled to set.
       * @return This builder for chaining.
       */
      public Builder setEnabled(boolean value) {
        
        enabled_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool enabled = 16;</code>
       * @return This builder for chaining.
       */
      public Builder clearEnabled() {
        
        enabled_ = false;
        onChanged();
        return this;
      }

      private boolean locked_ ;
      /**
       * <code>bool locked = 17;</code>
       * @return The locked.
       */
      @java.lang.Override
      public boolean getLocked() {
        return locked_;
      }
      /**
       * <code>bool locked = 17;</code>
       * @param value The locked to set.
       * @return This builder for chaining.
       */
      public Builder setLocked(boolean value) {
        
        locked_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool locked = 17;</code>
       * @return This builder for chaining.
       */
      public Builder clearLocked() {
        
        locked_ = false;
        onChanged();
        return this;
      }

      private boolean autoSave_ ;
      /**
       * <code>bool auto_save = 18;</code>
       * @return The autoSave.
       */
      @java.lang.Override
      public boolean getAutoSave() {
        return autoSave_;
      }
      /**
       * <code>bool auto_save = 18;</code>
       * @param value The autoSave to set.
       * @return This builder for chaining.
       */
      public Builder setAutoSave(boolean value) {
        
        autoSave_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool auto_save = 18;</code>
       * @return This builder for chaining.
       */
      public Builder clearAutoSave() {
        
        autoSave_ = false;
        onChanged();
        return this;
      }

      private boolean lightweight_ ;
      /**
       * <code>bool lightweight = 19;</code>
       * @return The lightweight.
       */
      @java.lang.Override
      public boolean getLightweight() {
        return lightweight_;
      }
      /**
       * <code>bool lightweight = 19;</code>
       * @param value The lightweight to set.
       * @return This builder for chaining.
       */
      public Builder setLightweight(boolean value) {
        
        lightweight_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool lightweight = 19;</code>
       * @return This builder for chaining.
       */
      public Builder clearLightweight() {
        
        lightweight_ = false;
        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 = 20;</code>
       * @return Whether the revision field is set.
       */
      public boolean hasRevision() {
        return revisionBuilder_ != null || revision_ != null;
      }
      /**
       * <code>.Messages.Revision revision = 20;</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 = 20;</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 = 20;</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 = 20;</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 = 20;</code>
       */
      public Builder clearRevision() {
        if (revisionBuilder_ == null) {
          revision_ = null;
          onChanged();
        } else {
          revision_ = null;
          revisionBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.Revision revision = 20;</code>
       */
      public Messages.Vector.Revision.Builder getRevisionBuilder() {
        
        onChanged();
        return getRevisionFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.Revision revision = 20;</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 = 20;</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 Messages.Vector.Revision version_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Revision, Messages.Vector.Revision.Builder, Messages.Vector.RevisionOrBuilder> versionBuilder_;
      /**
       * <code>.Messages.Revision version = 21;</code>
       * @return Whether the version field is set.
       */
      public boolean hasVersion() {
        return versionBuilder_ != null || version_ != null;
      }
      /**
       * <code>.Messages.Revision version = 21;</code>
       * @return The version.
       */
      public Messages.Vector.Revision getVersion() {
        if (versionBuilder_ == null) {
          return version_ == null ? Messages.Vector.Revision.getDefaultInstance() : version_;
        } else {
          return versionBuilder_.getMessage();
        }
      }
      /**
       * <code>.Messages.Revision version = 21;</code>
       */
      public Builder setVersion(Messages.Vector.Revision value) {
        if (versionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          version_ = value;
          onChanged();
        } else {
          versionBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Revision version = 21;</code>
       */
      public Builder setVersion(
          Messages.Vector.Revision.Builder builderForValue) {
        if (versionBuilder_ == null) {
          version_ = builderForValue.build();
          onChanged();
        } else {
          versionBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.Messages.Revision version = 21;</code>
       */
      public Builder mergeVersion(Messages.Vector.Revision value) {
        if (versionBuilder_ == null) {
          if (version_ != null) {
            version_ =
              Messages.Vector.Revision.newBuilder(version_).mergeFrom(value).buildPartial();
          } else {
            version_ = value;
          }
          onChanged();
        } else {
          versionBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.Messages.Revision version = 21;</code>
       */
      public Builder clearVersion() {
        if (versionBuilder_ == null) {
          version_ = null;
          onChanged();
        } else {
          version_ = null;
          versionBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.Revision version = 21;</code>
       */
      public Messages.Vector.Revision.Builder getVersionBuilder() {
        
        onChanged();
        return getVersionFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.Revision version = 21;</code>
       */
      public Messages.Vector.RevisionOrBuilder getVersionOrBuilder() {
        if (versionBuilder_ != null) {
          return versionBuilder_.getMessageOrBuilder();
        } else {
          return version_ == null ?
              Messages.Vector.Revision.getDefaultInstance() : version_;
        }
      }
      /**
       * <code>.Messages.Revision version = 21;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.Vector.Revision, Messages.Vector.Revision.Builder, Messages.Vector.RevisionOrBuilder> 
          getVersionFieldBuilder() {
        if (versionBuilder_ == null) {
          versionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.Vector.Revision, Messages.Vector.Revision.Builder, Messages.Vector.RevisionOrBuilder>(
                  getVersion(),
                  getParentForChildren(),
                  isClean());
          version_ = null;
        }
        return versionBuilder_;
      }

      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 = 22;</code>
       * @return Whether the bounds field is set.
       */
      public boolean hasBounds() {
        return boundsBuilder_ != null || bounds_ != null;
      }
      /**
       * <code>.Messages.Extrema bounds = 22;</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 = 22;</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 = 22;</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 = 22;</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 = 22;</code>
       */
      public Builder clearBounds() {
        if (boundsBuilder_ == null) {
          bounds_ = null;
          onChanged();
        } else {
          bounds_ = null;
          boundsBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.Extrema bounds = 22;</code>
       */
      public Messages.Vector.Extrema.Builder getBoundsBuilder() {
        
        onChanged();
        return getBoundsFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.Extrema bounds = 22;</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 = 22;</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 java.lang.Object url_ = "";
      /**
       * <code>string url = 23;</code>
       * @return The url.
       */
      public java.lang.String getUrl() {
        java.lang.Object ref = url_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          url_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string url = 23;</code>
       * @return The bytes for url.
       */
      public com.google.protobuf.ByteString
          getUrlBytes() {
        java.lang.Object ref = url_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          url_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string url = 23;</code>
       * @param value The url to set.
       * @return This builder for chaining.
       */
      public Builder setUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        url_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string url = 23;</code>
       * @return This builder for chaining.
       */
      public Builder clearUrl() {
        
        url_ = getDefaultInstance().getUrl();
        onChanged();
        return this;
      }
      /**
       * <code>string url = 23;</code>
       * @param value The bytes for url to set.
       * @return This builder for chaining.
       */
      public Builder setUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        url_ = value;
        onChanged();
        return this;
      }

      private Messages.MetaOuterClass.GraphicsControl appearance_;
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.MetaOuterClass.GraphicsControl, Messages.MetaOuterClass.GraphicsControl.Builder, Messages.MetaOuterClass.GraphicsControlOrBuilder> appearanceBuilder_;
      /**
       * <code>.Messages.GraphicsControl appearance = 24;</code>
       * @return Whether the appearance field is set.
       */
      public boolean hasAppearance() {
        return appearanceBuilder_ != null || appearance_ != null;
      }
      /**
       * <code>.Messages.GraphicsControl appearance = 24;</code>
       * @return The appearance.
       */
      public Messages.MetaOuterClass.GraphicsControl getAppearance() {
        if (appearanceBuilder_ == null) {
          return appearance_ == null ? Messages.MetaOuterClass.GraphicsControl.getDefaultInstance() : appearance_;
        } else {
          return appearanceBuilder_.getMessage();
        }
      }
      /**
       * <code>.Messages.GraphicsControl appearance = 24;</code>
       */
      public Builder setAppearance(Messages.MetaOuterClass.GraphicsControl value) {
        if (appearanceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          appearance_ = value;
          onChanged();
        } else {
          appearanceBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.Messages.GraphicsControl appearance = 24;</code>
       */
      public Builder setAppearance(
          Messages.MetaOuterClass.GraphicsControl.Builder builderForValue) {
        if (appearanceBuilder_ == null) {
          appearance_ = builderForValue.build();
          onChanged();
        } else {
          appearanceBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.Messages.GraphicsControl appearance = 24;</code>
       */
      public Builder mergeAppearance(Messages.MetaOuterClass.GraphicsControl value) {
        if (appearanceBuilder_ == null) {
          if (appearance_ != null) {
            appearance_ =
              Messages.MetaOuterClass.GraphicsControl.newBuilder(appearance_).mergeFrom(value).buildPartial();
          } else {
            appearance_ = value;
          }
          onChanged();
        } else {
          appearanceBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.Messages.GraphicsControl appearance = 24;</code>
       */
      public Builder clearAppearance() {
        if (appearanceBuilder_ == null) {
          appearance_ = null;
          onChanged();
        } else {
          appearance_ = null;
          appearanceBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.Messages.GraphicsControl appearance = 24;</code>
       */
      public Messages.MetaOuterClass.GraphicsControl.Builder getAppearanceBuilder() {
        
        onChanged();
        return getAppearanceFieldBuilder().getBuilder();
      }
      /**
       * <code>.Messages.GraphicsControl appearance = 24;</code>
       */
      public Messages.MetaOuterClass.GraphicsControlOrBuilder getAppearanceOrBuilder() {
        if (appearanceBuilder_ != null) {
          return appearanceBuilder_.getMessageOrBuilder();
        } else {
          return appearance_ == null ?
              Messages.MetaOuterClass.GraphicsControl.getDefaultInstance() : appearance_;
        }
      }
      /**
       * <code>.Messages.GraphicsControl appearance = 24;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          Messages.MetaOuterClass.GraphicsControl, Messages.MetaOuterClass.GraphicsControl.Builder, Messages.MetaOuterClass.GraphicsControlOrBuilder> 
          getAppearanceFieldBuilder() {
        if (appearanceBuilder_ == null) {
          appearanceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              Messages.MetaOuterClass.GraphicsControl, Messages.MetaOuterClass.GraphicsControl.Builder, Messages.MetaOuterClass.GraphicsControlOrBuilder>(
                  getAppearance(),
                  getParentForChildren(),
                  isClean());
          appearance_ = null;
        }
        return appearanceBuilder_;
      }

      private com.google.protobuf.Internal.LongList children_ = emptyLongList();
      private void ensureChildrenIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          children_ = mutableCopy(children_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       * uid's (only good within a given session. see concept.proto for persistent relationships)
       * </pre>
       *
       * <code>repeated int64 children = 25;</code>
       * @return A list containing the children.
       */
      public java.util.List<java.lang.Long>
          getChildrenList() {
        return ((bitField0_ & 0x00000001) != 0) ?
                 java.util.Collections.unmodifiableList(children_) : children_;
      }
      /**
       * <pre>
       * uid's (only good within a given session. see concept.proto for persistent relationships)
       * </pre>
       *
       * <code>repeated int64 children = 25;</code>
       * @return The count of children.
       */
      public int getChildrenCount() {
        return children_.size();
      }
      /**
       * <pre>
       * uid's (only good within a given session. see concept.proto for persistent relationships)
       * </pre>
       *
       * <code>repeated int64 children = 25;</code>
       * @param index The index of the element to return.
       * @return The children at the given index.
       */
      public long getChildren(int index) {
        return children_.getLong(index);
      }
      /**
       * <pre>
       * uid's (only good within a given session. see concept.proto for persistent relationships)
       * </pre>
       *
       * <code>repeated int64 children = 25;</code>
       * @param index The index to set the value at.
       * @param value The children to set.
       * @return This builder for chaining.
       */
      public Builder setChildren(
          int index, long value) {
        ensureChildrenIsMutable();
        children_.setLong(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * uid's (only good within a given session. see concept.proto for persistent relationships)
       * </pre>
       *
       * <code>repeated int64 children = 25;</code>
       * @param value The children to add.
       * @return This builder for chaining.
       */
      public Builder addChildren(long value) {
        ensureChildrenIsMutable();
        children_.addLong(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * uid's (only good within a given session. see concept.proto for persistent relationships)
       * </pre>
       *
       * <code>repeated int64 children = 25;</code>
       * @param values The children to add.
       * @return This builder for chaining.
       */
      public Builder addAllChildren(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureChildrenIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, children_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * uid's (only good within a given session. see concept.proto for persistent relationships)
       * </pre>
       *
       * <code>repeated int64 children = 25;</code>
       * @return This builder for chaining.
       */
      public Builder clearChildren() {
        children_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.IntList groups_ = emptyIntList();
      private void ensureGroupsIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          groups_ = mutableCopy(groups_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 groups = 26;</code>
       * @return A list containing the groups.
       */
      public java.util.List<java.lang.Integer>
          getGroupsList() {
        return ((bitField0_ & 0x00000002) != 0) ?
                 java.util.Collections.unmodifiableList(groups_) : groups_;
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 groups = 26;</code>
       * @return The count of groups.
       */
      public int getGroupsCount() {
        return groups_.size();
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 groups = 26;</code>
       * @param index The index of the element to return.
       * @return The groups at the given index.
       */
      public int getGroups(int index) {
        return groups_.getInt(index);
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 groups = 26;</code>
       * @param index The index to set the value at.
       * @param value The groups to set.
       * @return This builder for chaining.
       */
      public Builder setGroups(
          int index, int value) {
        ensureGroupsIsMutable();
        groups_.setInt(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 groups = 26;</code>
       * @param value The groups to add.
       * @return This builder for chaining.
       */
      public Builder addGroups(int value) {
        ensureGroupsIsMutable();
        groups_.addInt(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 groups = 26;</code>
       * @param values The groups to add.
       * @return This builder for chaining.
       */
      public Builder addAllGroups(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureGroupsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, groups_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 groups = 26;</code>
       * @return This builder for chaining.
       */
      public Builder clearGroups() {
        groups_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.IntList loops_ = emptyIntList();
      private void ensureLoopsIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          loops_ = mutableCopy(loops_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 loops = 27;</code>
       * @return A list containing the loops.
       */
      public java.util.List<java.lang.Integer>
          getLoopsList() {
        return ((bitField0_ & 0x00000004) != 0) ?
                 java.util.Collections.unmodifiableList(loops_) : loops_;
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 loops = 27;</code>
       * @return The count of loops.
       */
      public int getLoopsCount() {
        return loops_.size();
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 loops = 27;</code>
       * @param index The index of the element to return.
       * @return The loops at the given index.
       */
      public int getLoops(int index) {
        return loops_.getInt(index);
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 loops = 27;</code>
       * @param index The index to set the value at.
       * @param value The loops to set.
       * @return This builder for chaining.
       */
      public Builder setLoops(
          int index, int value) {
        ensureLoopsIsMutable();
        loops_.setInt(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 loops = 27;</code>
       * @param value The loops to add.
       * @return This builder for chaining.
       */
      public Builder addLoops(int value) {
        ensureLoopsIsMutable();
        loops_.addInt(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 loops = 27;</code>
       * @param values The loops to add.
       * @return This builder for chaining.
       */
      public Builder addAllLoops(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureLoopsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, loops_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 loops = 27;</code>
       * @return This builder for chaining.
       */
      public Builder clearLoops() {
        loops_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.IntList surfaces_ = emptyIntList();
      private void ensureSurfacesIsMutable() {
        if (!((bitField0_ & 0x00000008) != 0)) {
          surfaces_ = mutableCopy(surfaces_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 surfaces = 28;</code>
       * @return A list containing the surfaces.
       */
      public java.util.List<java.lang.Integer>
          getSurfacesList() {
        return ((bitField0_ & 0x00000008) != 0) ?
                 java.util.Collections.unmodifiableList(surfaces_) : surfaces_;
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 surfaces = 28;</code>
       * @return The count of surfaces.
       */
      public int getSurfacesCount() {
        return surfaces_.size();
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 surfaces = 28;</code>
       * @param index The index of the element to return.
       * @return The surfaces at the given index.
       */
      public int getSurfaces(int index) {
        return surfaces_.getInt(index);
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 surfaces = 28;</code>
       * @param index The index to set the value at.
       * @param value The surfaces to set.
       * @return This builder for chaining.
       */
      public Builder setSurfaces(
          int index, int value) {
        ensureSurfacesIsMutable();
        surfaces_.setInt(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 surfaces = 28;</code>
       * @param value The surfaces to add.
       * @return This builder for chaining.
       */
      public Builder addSurfaces(int value) {
        ensureSurfacesIsMutable();
        surfaces_.addInt(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 surfaces = 28;</code>
       * @param values The surfaces to add.
       * @return This builder for chaining.
       */
      public Builder addAllSurfaces(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureSurfacesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, surfaces_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 surfaces = 28;</code>
       * @return This builder for chaining.
       */
      public Builder clearSurfaces() {
        surfaces_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.IntList volumes_ = emptyIntList();
      private void ensureVolumesIsMutable() {
        if (!((bitField0_ & 0x00000010) != 0)) {
          volumes_ = mutableCopy(volumes_);
          bitField0_ |= 0x00000010;
         }
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 volumes = 29;</code>
       * @return A list containing the volumes.
       */
      public java.util.List<java.lang.Integer>
          getVolumesList() {
        return ((bitField0_ & 0x00000010) != 0) ?
                 java.util.Collections.unmodifiableList(volumes_) : volumes_;
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 volumes = 29;</code>
       * @return The count of volumes.
       */
      public int getVolumesCount() {
        return volumes_.size();
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 volumes = 29;</code>
       * @param index The index of the element to return.
       * @return The volumes at the given index.
       */
      public int getVolumes(int index) {
        return volumes_.getInt(index);
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 volumes = 29;</code>
       * @param index The index to set the value at.
       * @param value The volumes to set.
       * @return This builder for chaining.
       */
      public Builder setVolumes(
          int index, int value) {
        ensureVolumesIsMutable();
        volumes_.setInt(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 volumes = 29;</code>
       * @param value The volumes to add.
       * @return This builder for chaining.
       */
      public Builder addVolumes(int value) {
        ensureVolumesIsMutable();
        volumes_.addInt(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 volumes = 29;</code>
       * @param values The volumes to add.
       * @return This builder for chaining.
       */
      public Builder addAllVolumes(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureVolumesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, volumes_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * region id's
       * </pre>
       *
       * <code>repeated int32 volumes = 29;</code>
       * @return This builder for chaining.
       */
      public Builder clearVolumes() {
        volumes_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.DoubleList globalTransform_ = emptyDoubleList();
      private void ensureGlobalTransformIsMutable() {
        if (!((bitField0_ & 0x00000020) != 0)) {
          globalTransform_ = mutableCopy(globalTransform_);
          bitField0_ |= 0x00000020;
         }
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_transform = 30;</code>
       * @return A list containing the globalTransform.
       */
      public java.util.List<java.lang.Double>
          getGlobalTransformList() {
        return ((bitField0_ & 0x00000020) != 0) ?
                 java.util.Collections.unmodifiableList(globalTransform_) : globalTransform_;
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_transform = 30;</code>
       * @return The count of globalTransform.
       */
      public int getGlobalTransformCount() {
        return globalTransform_.size();
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_transform = 30;</code>
       * @param index The index of the element to return.
       * @return The globalTransform at the given index.
       */
      public double getGlobalTransform(int index) {
        return globalTransform_.getDouble(index);
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_transform = 30;</code>
       * @param index The index to set the value at.
       * @param value The globalTransform to set.
       * @return This builder for chaining.
       */
      public Builder setGlobalTransform(
          int index, double value) {
        ensureGlobalTransformIsMutable();
        globalTransform_.setDouble(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_transform = 30;</code>
       * @param value The globalTransform to add.
       * @return This builder for chaining.
       */
      public Builder addGlobalTransform(double value) {
        ensureGlobalTransformIsMutable();
        globalTransform_.addDouble(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_transform = 30;</code>
       * @param values The globalTransform to add.
       * @return This builder for chaining.
       */
      public Builder addAllGlobalTransform(
          java.lang.Iterable<? extends java.lang.Double> values) {
        ensureGlobalTransformIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, globalTransform_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_transform = 30;</code>
       * @return This builder for chaining.
       */
      public Builder clearGlobalTransform() {
        globalTransform_ = emptyDoubleList();
        bitField0_ = (bitField0_ & ~0x00000020);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.DoubleList globalRate_ = emptyDoubleList();
      private void ensureGlobalRateIsMutable() {
        if (!((bitField0_ & 0x00000040) != 0)) {
          globalRate_ = mutableCopy(globalRate_);
          bitField0_ |= 0x00000040;
         }
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_rate = 31;</code>
       * @return A list containing the globalRate.
       */
      public java.util.List<java.lang.Double>
          getGlobalRateList() {
        return ((bitField0_ & 0x00000040) != 0) ?
                 java.util.Collections.unmodifiableList(globalRate_) : globalRate_;
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_rate = 31;</code>
       * @return The count of globalRate.
       */
      public int getGlobalRateCount() {
        return globalRate_.size();
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_rate = 31;</code>
       * @param index The index of the element to return.
       * @return The globalRate at the given index.
       */
      public double getGlobalRate(int index) {
        return globalRate_.getDouble(index);
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_rate = 31;</code>
       * @param index The index to set the value at.
       * @param value The globalRate to set.
       * @return This builder for chaining.
       */
      public Builder setGlobalRate(
          int index, double value) {
        ensureGlobalRateIsMutable();
        globalRate_.setDouble(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_rate = 31;</code>
       * @param value The globalRate to add.
       * @return This builder for chaining.
       */
      public Builder addGlobalRate(double value) {
        ensureGlobalRateIsMutable();
        globalRate_.addDouble(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_rate = 31;</code>
       * @param values The globalRate to add.
       * @return This builder for chaining.
       */
      public Builder addAllGlobalRate(
          java.lang.Iterable<? extends java.lang.Double> values) {
        ensureGlobalRateIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, globalRate_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_rate = 31;</code>
       * @return This builder for chaining.
       */
      public Builder clearGlobalRate() {
        globalRate_ = emptyDoubleList();
        bitField0_ = (bitField0_ & ~0x00000040);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.DoubleList globalAccel_ = emptyDoubleList();
      private void ensureGlobalAccelIsMutable() {
        if (!((bitField0_ & 0x00000080) != 0)) {
          globalAccel_ = mutableCopy(globalAccel_);
          bitField0_ |= 0x00000080;
         }
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_accel = 32;</code>
       * @return A list containing the globalAccel.
       */
      public java.util.List<java.lang.Double>
          getGlobalAccelList() {
        return ((bitField0_ & 0x00000080) != 0) ?
                 java.util.Collections.unmodifiableList(globalAccel_) : globalAccel_;
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_accel = 32;</code>
       * @return The count of globalAccel.
       */
      public int getGlobalAccelCount() {
        return globalAccel_.size();
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_accel = 32;</code>
       * @param index The index of the element to return.
       * @return The globalAccel at the given index.
       */
      public double getGlobalAccel(int index) {
        return globalAccel_.getDouble(index);
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_accel = 32;</code>
       * @param index The index to set the value at.
       * @param value The globalAccel to set.
       * @return This builder for chaining.
       */
      public Builder setGlobalAccel(
          int index, double value) {
        ensureGlobalAccelIsMutable();
        globalAccel_.setDouble(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_accel = 32;</code>
       * @param value The globalAccel to add.
       * @return This builder for chaining.
       */
      public Builder addGlobalAccel(double value) {
        ensureGlobalAccelIsMutable();
        globalAccel_.addDouble(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_accel = 32;</code>
       * @param values The globalAccel to add.
       * @return This builder for chaining.
       */
      public Builder addAllGlobalAccel(
          java.lang.Iterable<? extends java.lang.Double> values) {
        ensureGlobalAccelIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, globalAccel_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * double16 (glm::dmat4) global transformation matrix
       * </pre>
       *
       * <code>repeated double global_accel = 32;</code>
       * @return This builder for chaining.
       */
      public Builder clearGlobalAccel() {
        globalAccel_ = emptyDoubleList();
        bitField0_ = (bitField0_ & ~0x00000080);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList properties_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensurePropertiesIsMutable() {
        if (!((bitField0_ & 0x00000100) != 0)) {
          properties_ = new com.google.protobuf.LazyStringArrayList(properties_);
          bitField0_ |= 0x00000100;
         }
      }
      /**
       * <pre>
       * serialized property-keys, used to request Vector32 or Vector64 data
       * </pre>
       *
       * <code>repeated string properties = 33;</code>
       * @return A list containing the properties.
       */
      public com.google.protobuf.ProtocolStringList
          getPropertiesList() {
        return properties_.getUnmodifiableView();
      }
      /**
       * <pre>
       * serialized property-keys, used to request Vector32 or Vector64 data
       * </pre>
       *
       * <code>repeated string properties = 33;</code>
       * @return The count of properties.
       */
      public int getPropertiesCount() {
        return properties_.size();
      }
      /**
       * <pre>
       * serialized property-keys, used to request Vector32 or Vector64 data
       * </pre>
       *
       * <code>repeated string properties = 33;</code>
       * @param index The index of the element to return.
       * @return The properties at the given index.
       */
      public java.lang.String getProperties(int index) {
        return properties_.get(index);
      }
      /**
       * <pre>
       * serialized property-keys, used to request Vector32 or Vector64 data
       * </pre>
       *
       * <code>repeated string properties = 33;</code>
       * @param index The index of the value to return.
       * @return The bytes of the properties at the given index.
       */
      public com.google.protobuf.ByteString
          getPropertiesBytes(int index) {
        return properties_.getByteString(index);
      }
      /**
       * <pre>
       * serialized property-keys, used to request Vector32 or Vector64 data
       * </pre>
       *
       * <code>repeated string properties = 33;</code>
       * @param index The index to set the value at.
       * @param value The properties to set.
       * @return This builder for chaining.
       */
      public Builder setProperties(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensurePropertiesIsMutable();
        properties_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * serialized property-keys, used to request Vector32 or Vector64 data
       * </pre>
       *
       * <code>repeated string properties = 33;</code>
       * @param value The properties to add.
       * @return This builder for chaining.
       */
      public Builder addProperties(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensurePropertiesIsMutable();
        properties_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * serialized property-keys, used to request Vector32 or Vector64 data
       * </pre>
       *
       * <code>repeated string properties = 33;</code>
       * @param values The properties to add.
       * @return This builder for chaining.
       */
      public Builder addAllProperties(
          java.lang.Iterable<java.lang.String> values) {
        ensurePropertiesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, properties_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * serialized property-keys, used to request Vector32 or Vector64 data
       * </pre>
       *
       * <code>repeated string properties = 33;</code>
       * @return This builder for chaining.
       */
      public Builder clearProperties() {
        properties_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000100);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * serialized property-keys, used to request Vector32 or Vector64 data
       * </pre>
       *
       * <code>repeated string properties = 33;</code>
       * @param value The bytes of the properties to add.
       * @return This builder for chaining.
       */
      public Builder addPropertiesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensurePropertiesIsMutable();
        properties_.add(value);
        onChanged();
        return this;
      }

      private java.util.List<Messages.MetaOuterClass.Visual> media_ =
        java.util.Collections.emptyList();
      private void ensureMediaIsMutable() {
        if (!((bitField0_ & 0x00000200) != 0)) {
          media_ = new java.util.ArrayList<Messages.MetaOuterClass.Visual>(media_);
          bitField0_ |= 0x00000200;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          Messages.MetaOuterClass.Visual, Messages.MetaOuterClass.Visual.Builder, Messages.MetaOuterClass.VisualOrBuilder> mediaBuilder_;

      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public java.util.List<Messages.MetaOuterClass.Visual> getMediaList() {
        if (mediaBuilder_ == null) {
          return java.util.Collections.unmodifiableList(media_);
        } else {
          return mediaBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public int getMediaCount() {
        if (mediaBuilder_ == null) {
          return media_.size();
        } else {
          return mediaBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public Messages.MetaOuterClass.Visual getMedia(int index) {
        if (mediaBuilder_ == null) {
          return media_.get(index);
        } else {
          return mediaBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public Builder setMedia(
          int index, Messages.MetaOuterClass.Visual value) {
        if (mediaBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMediaIsMutable();
          media_.set(index, value);
          onChanged();
        } else {
          mediaBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public Builder setMedia(
          int index, Messages.MetaOuterClass.Visual.Builder builderForValue) {
        if (mediaBuilder_ == null) {
          ensureMediaIsMutable();
          media_.set(index, builderForValue.build());
          onChanged();
        } else {
          mediaBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public Builder addMedia(Messages.MetaOuterClass.Visual value) {
        if (mediaBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMediaIsMutable();
          media_.add(value);
          onChanged();
        } else {
          mediaBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public Builder addMedia(
          int index, Messages.MetaOuterClass.Visual value) {
        if (mediaBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMediaIsMutable();
          media_.add(index, value);
          onChanged();
        } else {
          mediaBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public Builder addMedia(
          Messages.MetaOuterClass.Visual.Builder builderForValue) {
        if (mediaBuilder_ == null) {
          ensureMediaIsMutable();
          media_.add(builderForValue.build());
          onChanged();
        } else {
          mediaBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public Builder addMedia(
          int index, Messages.MetaOuterClass.Visual.Builder builderForValue) {
        if (mediaBuilder_ == null) {
          ensureMediaIsMutable();
          media_.add(index, builderForValue.build());
          onChanged();
        } else {
          mediaBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public Builder addAllMedia(
          java.lang.Iterable<? extends Messages.MetaOuterClass.Visual> values) {
        if (mediaBuilder_ == null) {
          ensureMediaIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, media_);
          onChanged();
        } else {
          mediaBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public Builder clearMedia() {
        if (mediaBuilder_ == null) {
          media_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
          onChanged();
        } else {
          mediaBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public Builder removeMedia(int index) {
        if (mediaBuilder_ == null) {
          ensureMediaIsMutable();
          media_.remove(index);
          onChanged();
        } else {
          mediaBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public Messages.MetaOuterClass.Visual.Builder getMediaBuilder(
          int index) {
        return getMediaFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public Messages.MetaOuterClass.VisualOrBuilder getMediaOrBuilder(
          int index) {
        if (mediaBuilder_ == null) {
          return media_.get(index);  } else {
          return mediaBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public java.util.List<? extends Messages.MetaOuterClass.VisualOrBuilder> 
           getMediaOrBuilderList() {
        if (mediaBuilder_ != null) {
          return mediaBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(media_);
        }
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public Messages.MetaOuterClass.Visual.Builder addMediaBuilder() {
        return getMediaFieldBuilder().addBuilder(
            Messages.MetaOuterClass.Visual.getDefaultInstance());
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public Messages.MetaOuterClass.Visual.Builder addMediaBuilder(
          int index) {
        return getMediaFieldBuilder().addBuilder(
            index, Messages.MetaOuterClass.Visual.getDefaultInstance());
      }
      /**
       * <pre>
       * optional visual media populated by server
       * </pre>
       *
       * <code>repeated .Messages.Visual media = 34;</code>
       */
      public java.util.List<Messages.MetaOuterClass.Visual.Builder> 
           getMediaBuilderList() {
        return getMediaFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          Messages.MetaOuterClass.Visual, Messages.MetaOuterClass.Visual.Builder, Messages.MetaOuterClass.VisualOrBuilder> 
          getMediaFieldBuilder() {
        if (mediaBuilder_ == null) {
          mediaBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              Messages.MetaOuterClass.Visual, Messages.MetaOuterClass.Visual.Builder, Messages.MetaOuterClass.VisualOrBuilder>(
                  media_,
                  ((bitField0_ & 0x00000200) != 0),
                  getParentForChildren(),
                  isClean());
          media_ = null;
        }
        return mediaBuilder_;
      }

      private com.google.protobuf.Internal.FloatList symbolTransform_ = emptyFloatList();
      private void ensureSymbolTransformIsMutable() {
        if (!((bitField0_ & 0x00000400) != 0)) {
          symbolTransform_ = mutableCopy(symbolTransform_);
          bitField0_ |= 0x00000400;
         }
      }
      /**
       * <code>repeated float symbol_transform = 35;</code>
       * @return A list containing the symbolTransform.
       */
      public java.util.List<java.lang.Float>
          getSymbolTransformList() {
        return ((bitField0_ & 0x00000400) != 0) ?
                 java.util.Collections.unmodifiableList(symbolTransform_) : symbolTransform_;
      }
      /**
       * <code>repeated float symbol_transform = 35;</code>
       * @return The count of symbolTransform.
       */
      public int getSymbolTransformCount() {
        return symbolTransform_.size();
      }
      /**
       * <code>repeated float symbol_transform = 35;</code>
       * @param index The index of the element to return.
       * @return The symbolTransform at the given index.
       */
      public float getSymbolTransform(int index) {
        return symbolTransform_.getFloat(index);
      }
      /**
       * <code>repeated float symbol_transform = 35;</code>
       * @param index The index to set the value at.
       * @param value The symbolTransform to set.
       * @return This builder for chaining.
       */
      public Builder setSymbolTransform(
          int index, float value) {
        ensureSymbolTransformIsMutable();
        symbolTransform_.setFloat(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated float symbol_transform = 35;</code>
       * @param value The symbolTransform to add.
       * @return This builder for chaining.
       */
      public Builder addSymbolTransform(float value) {
        ensureSymbolTransformIsMutable();
        symbolTransform_.addFloat(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated float symbol_transform = 35;</code>
       * @param values The symbolTransform to add.
       * @return This builder for chaining.
       */
      public Builder addAllSymbolTransform(
          java.lang.Iterable<? extends java.lang.Float> values) {
        ensureSymbolTransformIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, symbolTransform_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated float symbol_transform = 35;</code>
       * @return This builder for chaining.
       */
      public Builder clearSymbolTransform() {
        symbolTransform_ = emptyFloatList();
        bitField0_ = (bitField0_ & ~0x00000400);
        onChanged();
        return this;
      }

      private int lengthUnits_ ;
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>uint32 length_units = 40;</code>
       * @return The lengthUnits.
       */
      @java.lang.Override
      public int getLengthUnits() {
        return lengthUnits_;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>uint32 length_units = 40;</code>
       * @param value The lengthUnits to set.
       * @return This builder for chaining.
       */
      public Builder setLengthUnits(int value) {
        
        lengthUnits_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>uint32 length_units = 40;</code>
       * @return This builder for chaining.
       */
      public Builder clearLengthUnits() {
        
        lengthUnits_ = 0;
        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.Meta)
    }

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

    public static Messages.MetaOuterClass.Meta getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Meta>
        PARSER = new com.google.protobuf.AbstractParser<Meta>() {
      @java.lang.Override
      public Meta 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<Meta> parser() {
      return PARSER;
    }

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

    @java.lang.Override
    public Messages.MetaOuterClass.Meta getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SliceControlOrBuilder extends
      // @@protoc_insertion_point(interface_extends:Messages.SliceControl)
      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>repeated double center = 2;</code>
     * @return A list containing the center.
     */
    java.util.List<java.lang.Double> getCenterList();
    /**
     * <code>repeated double center = 2;</code>
     * @return The count of center.
     */
    int getCenterCount();
    /**
     * <code>repeated double center = 2;</code>
     * @param index The index of the element to return.
     * @return The center at the given index.
     */
    double getCenter(int index);

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

    /**
     * <code>bool intersect = 4;</code>
     * @return The intersect.
     */
    boolean getIntersect();

    /**
     * <code>bool negative = 5;</code>
     * @return The negative.
     */
    boolean getNegative();

    /**
     * <code>bool positive = 6;</code>
     * @return The positive.
     */
    boolean getPositive();
  }
  /**
   * Protobuf type {@code Messages.SliceControl}
   */
  public static final class SliceControl extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:Messages.SliceControl)
      SliceControlOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SliceControl.newBuilder() to construct.
    private SliceControl(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SliceControl() {
      name_ = "";
      center_ = emptyDoubleList();
      normal_ = emptyDoubleList();
    }

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

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

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Messages.MetaOuterClass.internal_static_Messages_SliceControl_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              Messages.MetaOuterClass.SliceControl.class, Messages.MetaOuterClass.SliceControl.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 CENTER_FIELD_NUMBER = 2;
    private com.google.protobuf.Internal.DoubleList center_;
    /**
     * <code>repeated double center = 2;</code>
     * @return A list containing the center.
     */
    @java.lang.Override
    public java.util.List<java.lang.Double>
        getCenterList() {
      return center_;
    }
    /**
     * <code>repeated double center = 2;</code>
     * @return The count of center.
     */
    public int getCenterCount() {
      return center_.size();
    }
    /**
     * <code>repeated double center = 2;</code>
     * @param index The index of the element to return.
     * @return The center at the given index.
     */
    public double getCenter(int index) {
      return center_.getDouble(index);
    }
    private int centerMemoizedSerializedSize = -1;

    public static final int NORMAL_FIELD_NUMBER = 3;
    private com.google.protobuf.Internal.DoubleList normal_;
    /**
     * <code>repeated double normal = 3;</code>
     * @return A list containing the normal.
     */
    @java.lang.Override
    public java.util.List<java.lang.Double>
        getNormalList() {
      return normal_;
    }
    /**
     * <code>repeated double normal = 3;</code>
     * @return The count of normal.
     */
    public int getNormalCount() {
      return normal_.size();
    }
    /**
     * <code>repeated double normal = 3;</code>
     * @param index The index of the element to return.
     * @return The normal at the given index.
     */
    public double getNormal(int index) {
      return normal_.getDouble(index);
    }
    private int normalMemoizedSerializedSize = -1;

    public static final int INTERSECT_FIELD_NUMBER = 4;
    private boolean intersect_;
    /**
     * <code>bool intersect = 4;</code>
     * @return The intersect.
     */
    @java.lang.Override
    public boolean getIntersect() {
      return intersect_;
    }

    public static final int NEGATIVE_FIELD_NUMBER = 5;
    private boolean negative_;
    /**
     * <code>bool negative = 5;</code>
     * @return The negative.
     */
    @java.lang.Override
    public boolean getNegative() {
      return negative_;
    }

    public static final int POSITIVE_FIELD_NUMBER = 6;
    private boolean positive_;
    /**
     * <code>bool positive = 6;</code>
     * @return The positive.
     */
    @java.lang.Override
    public boolean getPositive() {
      return positive_;
    }

    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 (getCenterList().size() > 0) {
        output.writeUInt32NoTag(18);
        output.writeUInt32NoTag(centerMemoizedSerializedSize);
      }
      for (int i = 0; i < center_.size(); i++) {
        output.writeDoubleNoTag(center_.getDouble(i));
      }
      if (getNormalList().size() > 0) {
        output.writeUInt32NoTag(26);
        output.writeUInt32NoTag(normalMemoizedSerializedSize);
      }
      for (int i = 0; i < normal_.size(); i++) {
        output.writeDoubleNoTag(normal_.getDouble(i));
      }
      if (intersect_ != false) {
        output.writeBool(4, intersect_);
      }
      if (negative_ != false) {
        output.writeBool(5, negative_);
      }
      if (positive_ != false) {
        output.writeBool(6, positive_);
      }
      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_);
      }
      {
        int dataSize = 0;
        dataSize = 8 * getCenterList().size();
        size += dataSize;
        if (!getCenterList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        centerMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        dataSize = 8 * getNormalList().size();
        size += dataSize;
        if (!getNormalList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        normalMemoizedSerializedSize = dataSize;
      }
      if (intersect_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, intersect_);
      }
      if (negative_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, negative_);
      }
      if (positive_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, positive_);
      }
      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.MetaOuterClass.SliceControl)) {
        return super.equals(obj);
      }
      Messages.MetaOuterClass.SliceControl other = (Messages.MetaOuterClass.SliceControl) obj;

      if (!getName()
          .equals(other.getName())) return false;
      if (!getCenterList()
          .equals(other.getCenterList())) return false;
      if (!getNormalList()
          .equals(other.getNormalList())) return false;
      if (getIntersect()
          != other.getIntersect()) return false;
      if (getNegative()
          != other.getNegative()) return false;
      if (getPositive()
          != other.getPositive()) 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();
      if (getCenterCount() > 0) {
        hash = (37 * hash) + CENTER_FIELD_NUMBER;
        hash = (53 * hash) + getCenterList().hashCode();
      }
      if (getNormalCount() > 0) {
        hash = (37 * hash) + NORMAL_FIELD_NUMBER;
        hash = (53 * hash) + getNormalList().hashCode();
      }
      hash = (37 * hash) + INTERSECT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getIntersect());
      hash = (37 * hash) + NEGATIVE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getNegative());
      hash = (37 * hash) + POSITIVE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getPositive());
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static Messages.MetaOuterClass.SliceControl parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.SliceControl parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.SliceControl parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.SliceControl parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.SliceControl parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.SliceControl parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.SliceControl parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.SliceControl 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.MetaOuterClass.SliceControl parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.SliceControl 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.MetaOuterClass.SliceControl parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.SliceControl 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.MetaOuterClass.SliceControl 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.SliceControl}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:Messages.SliceControl)
        Messages.MetaOuterClass.SliceControlOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Messages.MetaOuterClass.internal_static_Messages_SliceControl_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Messages.MetaOuterClass.internal_static_Messages_SliceControl_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Messages.MetaOuterClass.SliceControl.class, Messages.MetaOuterClass.SliceControl.Builder.class);
      }

      // Construct using Messages.MetaOuterClass.SliceControl.newBuilder()
      private Builder() {

      }

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

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

        center_ = emptyDoubleList();
        bitField0_ = (bitField0_ & ~0x00000001);
        normal_ = emptyDoubleList();
        bitField0_ = (bitField0_ & ~0x00000002);
        intersect_ = false;

        negative_ = false;

        positive_ = false;

        return this;
      }

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

      @java.lang.Override
      public Messages.MetaOuterClass.SliceControl getDefaultInstanceForType() {
        return Messages.MetaOuterClass.SliceControl.getDefaultInstance();
      }

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

      @java.lang.Override
      public Messages.MetaOuterClass.SliceControl buildPartial() {
        Messages.MetaOuterClass.SliceControl result = new Messages.MetaOuterClass.SliceControl(this);
        int from_bitField0_ = bitField0_;
        result.name_ = name_;
        if (((bitField0_ & 0x00000001) != 0)) {
          center_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.center_ = center_;
        if (((bitField0_ & 0x00000002) != 0)) {
          normal_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.normal_ = normal_;
        result.intersect_ = intersect_;
        result.negative_ = negative_;
        result.positive_ = positive_;
        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.MetaOuterClass.SliceControl) {
          return mergeFrom((Messages.MetaOuterClass.SliceControl)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(Messages.MetaOuterClass.SliceControl other) {
        if (other == Messages.MetaOuterClass.SliceControl.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (!other.center_.isEmpty()) {
          if (center_.isEmpty()) {
            center_ = other.center_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureCenterIsMutable();
            center_.addAll(other.center_);
          }
          onChanged();
        }
        if (!other.normal_.isEmpty()) {
          if (normal_.isEmpty()) {
            normal_ = other.normal_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureNormalIsMutable();
            normal_.addAll(other.normal_);
          }
          onChanged();
        }
        if (other.getIntersect() != false) {
          setIntersect(other.getIntersect());
        }
        if (other.getNegative() != false) {
          setNegative(other.getNegative());
        }
        if (other.getPositive() != false) {
          setPositive(other.getPositive());
        }
        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 17: {
                double v = input.readDouble();
                ensureCenterIsMutable();
                center_.addDouble(v);
                break;
              } // case 17
              case 18: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureCenterIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  center_.addDouble(input.readDouble());
                }
                input.popLimit(limit);
                break;
              } // case 18
              case 25: {
                double v = input.readDouble();
                ensureNormalIsMutable();
                normal_.addDouble(v);
                break;
              } // case 25
              case 26: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureNormalIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  normal_.addDouble(input.readDouble());
                }
                input.popLimit(limit);
                break;
              } // case 26
              case 32: {
                intersect_ = input.readBool();

                break;
              } // case 32
              case 40: {
                negative_ = input.readBool();

                break;
              } // case 40
              case 48: {
                positive_ = input.readBool();

                break;
              } // case 48
              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 com.google.protobuf.Internal.DoubleList center_ = emptyDoubleList();
      private void ensureCenterIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          center_ = mutableCopy(center_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated double center = 2;</code>
       * @return A list containing the center.
       */
      public java.util.List<java.lang.Double>
          getCenterList() {
        return ((bitField0_ & 0x00000001) != 0) ?
                 java.util.Collections.unmodifiableList(center_) : center_;
      }
      /**
       * <code>repeated double center = 2;</code>
       * @return The count of center.
       */
      public int getCenterCount() {
        return center_.size();
      }
      /**
       * <code>repeated double center = 2;</code>
       * @param index The index of the element to return.
       * @return The center at the given index.
       */
      public double getCenter(int index) {
        return center_.getDouble(index);
      }
      /**
       * <code>repeated double center = 2;</code>
       * @param index The index to set the value at.
       * @param value The center to set.
       * @return This builder for chaining.
       */
      public Builder setCenter(
          int index, double value) {
        ensureCenterIsMutable();
        center_.setDouble(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double center = 2;</code>
       * @param value The center to add.
       * @return This builder for chaining.
       */
      public Builder addCenter(double value) {
        ensureCenterIsMutable();
        center_.addDouble(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double center = 2;</code>
       * @param values The center to add.
       * @return This builder for chaining.
       */
      public Builder addAllCenter(
          java.lang.Iterable<? extends java.lang.Double> values) {
        ensureCenterIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, center_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double center = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearCenter() {
        center_ = emptyDoubleList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.DoubleList normal_ = emptyDoubleList();
      private void ensureNormalIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          normal_ = mutableCopy(normal_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated double normal = 3;</code>
       * @return A list containing the normal.
       */
      public java.util.List<java.lang.Double>
          getNormalList() {
        return ((bitField0_ & 0x00000002) != 0) ?
                 java.util.Collections.unmodifiableList(normal_) : normal_;
      }
      /**
       * <code>repeated double normal = 3;</code>
       * @return The count of normal.
       */
      public int getNormalCount() {
        return normal_.size();
      }
      /**
       * <code>repeated double normal = 3;</code>
       * @param index The index of the element to return.
       * @return The normal at the given index.
       */
      public double getNormal(int index) {
        return normal_.getDouble(index);
      }
      /**
       * <code>repeated double normal = 3;</code>
       * @param index The index to set the value at.
       * @param value The normal to set.
       * @return This builder for chaining.
       */
      public Builder setNormal(
          int index, double value) {
        ensureNormalIsMutable();
        normal_.setDouble(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double normal = 3;</code>
       * @param value The normal to add.
       * @return This builder for chaining.
       */
      public Builder addNormal(double value) {
        ensureNormalIsMutable();
        normal_.addDouble(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double normal = 3;</code>
       * @param values The normal to add.
       * @return This builder for chaining.
       */
      public Builder addAllNormal(
          java.lang.Iterable<? extends java.lang.Double> values) {
        ensureNormalIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, normal_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double normal = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearNormal() {
        normal_ = emptyDoubleList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }

      private boolean intersect_ ;
      /**
       * <code>bool intersect = 4;</code>
       * @return The intersect.
       */
      @java.lang.Override
      public boolean getIntersect() {
        return intersect_;
      }
      /**
       * <code>bool intersect = 4;</code>
       * @param value The intersect to set.
       * @return This builder for chaining.
       */
      public Builder setIntersect(boolean value) {
        
        intersect_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool intersect = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearIntersect() {
        
        intersect_ = false;
        onChanged();
        return this;
      }

      private boolean negative_ ;
      /**
       * <code>bool negative = 5;</code>
       * @return The negative.
       */
      @java.lang.Override
      public boolean getNegative() {
        return negative_;
      }
      /**
       * <code>bool negative = 5;</code>
       * @param value The negative to set.
       * @return This builder for chaining.
       */
      public Builder setNegative(boolean value) {
        
        negative_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool negative = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearNegative() {
        
        negative_ = false;
        onChanged();
        return this;
      }

      private boolean positive_ ;
      /**
       * <code>bool positive = 6;</code>
       * @return The positive.
       */
      @java.lang.Override
      public boolean getPositive() {
        return positive_;
      }
      /**
       * <code>bool positive = 6;</code>
       * @param value The positive to set.
       * @return This builder for chaining.
       */
      public Builder setPositive(boolean value) {
        
        positive_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool positive = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearPositive() {
        
        positive_ = 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.SliceControl)
    }

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

    public static Messages.MetaOuterClass.SliceControl getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<SliceControl>
        PARSER = new com.google.protobuf.AbstractParser<SliceControl>() {
      @java.lang.Override
      public SliceControl 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<SliceControl> parser() {
      return PARSER;
    }

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

    @java.lang.Override
    public Messages.MetaOuterClass.SliceControl getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

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

    /**
     * <pre>
     *global position of interest that is being tracked, xyz of length 3
     * </pre>
     *
     * <code>repeated float subject = 1;</code>
     * @return A list containing the subject.
     */
    java.util.List<java.lang.Float> getSubjectList();
    /**
     * <pre>
     *global position of interest that is being tracked, xyz of length 3
     * </pre>
     *
     * <code>repeated float subject = 1;</code>
     * @return The count of subject.
     */
    int getSubjectCount();
    /**
     * <pre>
     *global position of interest that is being tracked, xyz of length 3
     * </pre>
     *
     * <code>repeated float subject = 1;</code>
     * @param index The index of the element to return.
     * @return The subject at the given index.
     */
    float getSubject(int index);

    /**
     * <pre>
     *global offset that camera might be centered on, dydxdz of length 3
     * </pre>
     *
     * <code>repeated float offset = 2;</code>
     * @return A list containing the offset.
     */
    java.util.List<java.lang.Float> getOffsetList();
    /**
     * <pre>
     *global offset that camera might be centered on, dydxdz of length 3
     * </pre>
     *
     * <code>repeated float offset = 2;</code>
     * @return The count of offset.
     */
    int getOffsetCount();
    /**
     * <pre>
     *global offset that camera might be centered on, dydxdz of length 3
     * </pre>
     *
     * <code>repeated float offset = 2;</code>
     * @param index The index of the element to return.
     * @return The offset at the given index.
     */
    float getOffset(int index);

    /**
     * <pre>
     *viewer/camera angle, of length 3 (6 for future stereoscopic)
     * </pre>
     *
     * <code>repeated float angle = 3;</code>
     * @return A list containing the angle.
     */
    java.util.List<java.lang.Float> getAngleList();
    /**
     * <pre>
     *viewer/camera angle, of length 3 (6 for future stereoscopic)
     * </pre>
     *
     * <code>repeated float angle = 3;</code>
     * @return The count of angle.
     */
    int getAngleCount();
    /**
     * <pre>
     *viewer/camera angle, of length 3 (6 for future stereoscopic)
     * </pre>
     *
     * <code>repeated float angle = 3;</code>
     * @param index The index of the element to return.
     * @return The angle at the given index.
     */
    float getAngle(int index);

    /**
     * <code>float scene_time = 4;</code>
     * @return The sceneTime.
     */
    float getSceneTime();

    /**
     * <code>float magnification = 5;</code>
     * @return The magnification.
     */
    float getMagnification();

    /**
     * <code>float time_constant = 6;</code>
     * @return The timeConstant.
     */
    float getTimeConstant();

    /**
     * <code>float pan_sensitivity = 7;</code>
     * @return The panSensitivity.
     */
    float getPanSensitivity();

    /**
     * <code>float rotation_sensitivity = 8;</code>
     * @return The rotationSensitivity.
     */
    float getRotationSensitivity();

    /**
     * <code>float zoom_sensitivity = 9;</code>
     * @return The zoomSensitivity.
     */
    float getZoomSensitivity();

    /**
     * <code>float znear = 10;</code>
     * @return The znear.
     */
    float getZnear();

    /**
     * <code>float zfar = 11;</code>
     * @return The zfar.
     */
    float getZfar();

    /**
     * <pre>
     * angle of view of focal lens (perspective mode)
     * </pre>
     *
     * <code>float aov = 12;</code>
     * @return The aov.
     */
    float getAov();

    /**
     * <code>repeated uint32 resolution = 13;</code>
     * @return A list containing the resolution.
     */
    java.util.List<java.lang.Integer> getResolutionList();
    /**
     * <code>repeated uint32 resolution = 13;</code>
     * @return The count of resolution.
     */
    int getResolutionCount();
    /**
     * <code>repeated uint32 resolution = 13;</code>
     * @param index The index of the element to return.
     * @return The resolution at the given index.
     */
    int getResolution(int index);

    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>bool perspective = 15;</code>
     * @return The perspective.
     */
    boolean getPerspective();

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

    /**
     * <code>bool orbit = 17;</code>
     * @return The orbit.
     */
    boolean getOrbit();

    /**
     * <code>bool follow = 18;</code>
     * @return The follow.
     */
    boolean getFollow();
  }
  /**
   * Protobuf type {@code Messages.CameraControl}
   */
  public static final class CameraControl extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:Messages.CameraControl)
      CameraControlOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use CameraControl.newBuilder() to construct.
    private CameraControl(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CameraControl() {
      subject_ = emptyFloatList();
      offset_ = emptyFloatList();
      angle_ = emptyFloatList();
      resolution_ = emptyIntList();
    }

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

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

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Messages.MetaOuterClass.internal_static_Messages_CameraControl_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              Messages.MetaOuterClass.CameraControl.class, Messages.MetaOuterClass.CameraControl.Builder.class);
    }

    public static final int SUBJECT_FIELD_NUMBER = 1;
    private com.google.protobuf.Internal.FloatList subject_;
    /**
     * <pre>
     *global position of interest that is being tracked, xyz of length 3
     * </pre>
     *
     * <code>repeated float subject = 1;</code>
     * @return A list containing the subject.
     */
    @java.lang.Override
    public java.util.List<java.lang.Float>
        getSubjectList() {
      return subject_;
    }
    /**
     * <pre>
     *global position of interest that is being tracked, xyz of length 3
     * </pre>
     *
     * <code>repeated float subject = 1;</code>
     * @return The count of subject.
     */
    public int getSubjectCount() {
      return subject_.size();
    }
    /**
     * <pre>
     *global position of interest that is being tracked, xyz of length 3
     * </pre>
     *
     * <code>repeated float subject = 1;</code>
     * @param index The index of the element to return.
     * @return The subject at the given index.
     */
    public float getSubject(int index) {
      return subject_.getFloat(index);
    }
    private int subjectMemoizedSerializedSize = -1;

    public static final int OFFSET_FIELD_NUMBER = 2;
    private com.google.protobuf.Internal.FloatList offset_;
    /**
     * <pre>
     *global offset that camera might be centered on, dydxdz of length 3
     * </pre>
     *
     * <code>repeated float offset = 2;</code>
     * @return A list containing the offset.
     */
    @java.lang.Override
    public java.util.List<java.lang.Float>
        getOffsetList() {
      return offset_;
    }
    /**
     * <pre>
     *global offset that camera might be centered on, dydxdz of length 3
     * </pre>
     *
     * <code>repeated float offset = 2;</code>
     * @return The count of offset.
     */
    public int getOffsetCount() {
      return offset_.size();
    }
    /**
     * <pre>
     *global offset that camera might be centered on, dydxdz of length 3
     * </pre>
     *
     * <code>repeated float offset = 2;</code>
     * @param index The index of the element to return.
     * @return The offset at the given index.
     */
    public float getOffset(int index) {
      return offset_.getFloat(index);
    }
    private int offsetMemoizedSerializedSize = -1;

    public static final int ANGLE_FIELD_NUMBER = 3;
    private com.google.protobuf.Internal.FloatList angle_;
    /**
     * <pre>
     *viewer/camera angle, of length 3 (6 for future stereoscopic)
     * </pre>
     *
     * <code>repeated float angle = 3;</code>
     * @return A list containing the angle.
     */
    @java.lang.Override
    public java.util.List<java.lang.Float>
        getAngleList() {
      return angle_;
    }
    /**
     * <pre>
     *viewer/camera angle, of length 3 (6 for future stereoscopic)
     * </pre>
     *
     * <code>repeated float angle = 3;</code>
     * @return The count of angle.
     */
    public int getAngleCount() {
      return angle_.size();
    }
    /**
     * <pre>
     *viewer/camera angle, of length 3 (6 for future stereoscopic)
     * </pre>
     *
     * <code>repeated float angle = 3;</code>
     * @param index The index of the element to return.
     * @return The angle at the given index.
     */
    public float getAngle(int index) {
      return angle_.getFloat(index);
    }
    private int angleMemoizedSerializedSize = -1;

    public static final int SCENE_TIME_FIELD_NUMBER = 4;
    private float sceneTime_;
    /**
     * <code>float scene_time = 4;</code>
     * @return The sceneTime.
     */
    @java.lang.Override
    public float getSceneTime() {
      return sceneTime_;
    }

    public static final int MAGNIFICATION_FIELD_NUMBER = 5;
    private float magnification_;
    /**
     * <code>float magnification = 5;</code>
     * @return The magnification.
     */
    @java.lang.Override
    public float getMagnification() {
      return magnification_;
    }

    public static final int TIME_CONSTANT_FIELD_NUMBER = 6;
    private float timeConstant_;
    /**
     * <code>float time_constant = 6;</code>
     * @return The timeConstant.
     */
    @java.lang.Override
    public float getTimeConstant() {
      return timeConstant_;
    }

    public static final int PAN_SENSITIVITY_FIELD_NUMBER = 7;
    private float panSensitivity_;
    /**
     * <code>float pan_sensitivity = 7;</code>
     * @return The panSensitivity.
     */
    @java.lang.Override
    public float getPanSensitivity() {
      return panSensitivity_;
    }

    public static final int ROTATION_SENSITIVITY_FIELD_NUMBER = 8;
    private float rotationSensitivity_;
    /**
     * <code>float rotation_sensitivity = 8;</code>
     * @return The rotationSensitivity.
     */
    @java.lang.Override
    public float getRotationSensitivity() {
      return rotationSensitivity_;
    }

    public static final int ZOOM_SENSITIVITY_FIELD_NUMBER = 9;
    private float zoomSensitivity_;
    /**
     * <code>float zoom_sensitivity = 9;</code>
     * @return The zoomSensitivity.
     */
    @java.lang.Override
    public float getZoomSensitivity() {
      return zoomSensitivity_;
    }

    public static final int ZNEAR_FIELD_NUMBER = 10;
    private float znear_;
    /**
     * <code>float znear = 10;</code>
     * @return The znear.
     */
    @java.lang.Override
    public float getZnear() {
      return znear_;
    }

    public static final int ZFAR_FIELD_NUMBER = 11;
    private float zfar_;
    /**
     * <code>float zfar = 11;</code>
     * @return The zfar.
     */
    @java.lang.Override
    public float getZfar() {
      return zfar_;
    }

    public static final int AOV_FIELD_NUMBER = 12;
    private float aov_;
    /**
     * <pre>
     * angle of view of focal lens (perspective mode)
     * </pre>
     *
     * <code>float aov = 12;</code>
     * @return The aov.
     */
    @java.lang.Override
    public float getAov() {
      return aov_;
    }

    public static final int RESOLUTION_FIELD_NUMBER = 13;
    private com.google.protobuf.Internal.IntList resolution_;
    /**
     * <code>repeated uint32 resolution = 13;</code>
     * @return A list containing the resolution.
     */
    @java.lang.Override
    public java.util.List<java.lang.Integer>
        getResolutionList() {
      return resolution_;
    }
    /**
     * <code>repeated uint32 resolution = 13;</code>
     * @return The count of resolution.
     */
    public int getResolutionCount() {
      return resolution_.size();
    }
    /**
     * <code>repeated uint32 resolution = 13;</code>
     * @param index The index of the element to return.
     * @return The resolution at the given index.
     */
    public int getResolution(int index) {
      return resolution_.getInt(index);
    }
    private int resolutionMemoizedSerializedSize = -1;

    public static final int PERSPECTIVE_FIELD_NUMBER = 15;
    private boolean perspective_;
    /**
     * <pre>
     *reserved
     * </pre>
     *
     * <code>bool perspective = 15;</code>
     * @return The perspective.
     */
    @java.lang.Override
    public boolean getPerspective() {
      return perspective_;
    }

    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 ORBIT_FIELD_NUMBER = 17;
    private boolean orbit_;
    /**
     * <code>bool orbit = 17;</code>
     * @return The orbit.
     */
    @java.lang.Override
    public boolean getOrbit() {
      return orbit_;
    }

    public static final int FOLLOW_FIELD_NUMBER = 18;
    private boolean follow_;
    /**
     * <code>bool follow = 18;</code>
     * @return The follow.
     */
    @java.lang.Override
    public boolean getFollow() {
      return follow_;
    }

    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 (getSubjectList().size() > 0) {
        output.writeUInt32NoTag(10);
        output.writeUInt32NoTag(subjectMemoizedSerializedSize);
      }
      for (int i = 0; i < subject_.size(); i++) {
        output.writeFloatNoTag(subject_.getFloat(i));
      }
      if (getOffsetList().size() > 0) {
        output.writeUInt32NoTag(18);
        output.writeUInt32NoTag(offsetMemoizedSerializedSize);
      }
      for (int i = 0; i < offset_.size(); i++) {
        output.writeFloatNoTag(offset_.getFloat(i));
      }
      if (getAngleList().size() > 0) {
        output.writeUInt32NoTag(26);
        output.writeUInt32NoTag(angleMemoizedSerializedSize);
      }
      for (int i = 0; i < angle_.size(); i++) {
        output.writeFloatNoTag(angle_.getFloat(i));
      }
      if (java.lang.Float.floatToRawIntBits(sceneTime_) != 0) {
        output.writeFloat(4, sceneTime_);
      }
      if (java.lang.Float.floatToRawIntBits(magnification_) != 0) {
        output.writeFloat(5, magnification_);
      }
      if (java.lang.Float.floatToRawIntBits(timeConstant_) != 0) {
        output.writeFloat(6, timeConstant_);
      }
      if (java.lang.Float.floatToRawIntBits(panSensitivity_) != 0) {
        output.writeFloat(7, panSensitivity_);
      }
      if (java.lang.Float.floatToRawIntBits(rotationSensitivity_) != 0) {
        output.writeFloat(8, rotationSensitivity_);
      }
      if (java.lang.Float.floatToRawIntBits(zoomSensitivity_) != 0) {
        output.writeFloat(9, zoomSensitivity_);
      }
      if (java.lang.Float.floatToRawIntBits(znear_) != 0) {
        output.writeFloat(10, znear_);
      }
      if (java.lang.Float.floatToRawIntBits(zfar_) != 0) {
        output.writeFloat(11, zfar_);
      }
      if (java.lang.Float.floatToRawIntBits(aov_) != 0) {
        output.writeFloat(12, aov_);
      }
      if (getResolutionList().size() > 0) {
        output.writeUInt32NoTag(106);
        output.writeUInt32NoTag(resolutionMemoizedSerializedSize);
      }
      for (int i = 0; i < resolution_.size(); i++) {
        output.writeUInt32NoTag(resolution_.getInt(i));
      }
      if (perspective_ != false) {
        output.writeBool(15, perspective_);
      }
      if (smooth_ != false) {
        output.writeBool(16, smooth_);
      }
      if (orbit_ != false) {
        output.writeBool(17, orbit_);
      }
      if (follow_ != false) {
        output.writeBool(18, follow_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      {
        int dataSize = 0;
        dataSize = 4 * getSubjectList().size();
        size += dataSize;
        if (!getSubjectList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        subjectMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        dataSize = 4 * getOffsetList().size();
        size += dataSize;
        if (!getOffsetList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        offsetMemoizedSerializedSize = dataSize;
      }
      {
        int dataSize = 0;
        dataSize = 4 * getAngleList().size();
        size += dataSize;
        if (!getAngleList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        angleMemoizedSerializedSize = dataSize;
      }
      if (java.lang.Float.floatToRawIntBits(sceneTime_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(4, sceneTime_);
      }
      if (java.lang.Float.floatToRawIntBits(magnification_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(5, magnification_);
      }
      if (java.lang.Float.floatToRawIntBits(timeConstant_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(6, timeConstant_);
      }
      if (java.lang.Float.floatToRawIntBits(panSensitivity_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(7, panSensitivity_);
      }
      if (java.lang.Float.floatToRawIntBits(rotationSensitivity_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(8, rotationSensitivity_);
      }
      if (java.lang.Float.floatToRawIntBits(zoomSensitivity_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(9, zoomSensitivity_);
      }
      if (java.lang.Float.floatToRawIntBits(znear_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(10, znear_);
      }
      if (java.lang.Float.floatToRawIntBits(zfar_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(11, zfar_);
      }
      if (java.lang.Float.floatToRawIntBits(aov_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(12, aov_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < resolution_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(resolution_.getInt(i));
        }
        size += dataSize;
        if (!getResolutionList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        resolutionMemoizedSerializedSize = dataSize;
      }
      if (perspective_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(15, perspective_);
      }
      if (smooth_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(16, smooth_);
      }
      if (orbit_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(17, orbit_);
      }
      if (follow_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(18, follow_);
      }
      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.MetaOuterClass.CameraControl)) {
        return super.equals(obj);
      }
      Messages.MetaOuterClass.CameraControl other = (Messages.MetaOuterClass.CameraControl) obj;

      if (!getSubjectList()
          .equals(other.getSubjectList())) return false;
      if (!getOffsetList()
          .equals(other.getOffsetList())) return false;
      if (!getAngleList()
          .equals(other.getAngleList())) return false;
      if (java.lang.Float.floatToIntBits(getSceneTime())
          != java.lang.Float.floatToIntBits(
              other.getSceneTime())) return false;
      if (java.lang.Float.floatToIntBits(getMagnification())
          != java.lang.Float.floatToIntBits(
              other.getMagnification())) return false;
      if (java.lang.Float.floatToIntBits(getTimeConstant())
          != java.lang.Float.floatToIntBits(
              other.getTimeConstant())) return false;
      if (java.lang.Float.floatToIntBits(getPanSensitivity())
          != java.lang.Float.floatToIntBits(
              other.getPanSensitivity())) return false;
      if (java.lang.Float.floatToIntBits(getRotationSensitivity())
          != java.lang.Float.floatToIntBits(
              other.getRotationSensitivity())) return false;
      if (java.lang.Float.floatToIntBits(getZoomSensitivity())
          != java.lang.Float.floatToIntBits(
              other.getZoomSensitivity())) return false;
      if (java.lang.Float.floatToIntBits(getZnear())
          != java.lang.Float.floatToIntBits(
              other.getZnear())) return false;
      if (java.lang.Float.floatToIntBits(getZfar())
          != java.lang.Float.floatToIntBits(
              other.getZfar())) return false;
      if (java.lang.Float.floatToIntBits(getAov())
          != java.lang.Float.floatToIntBits(
              other.getAov())) return false;
      if (!getResolutionList()
          .equals(other.getResolutionList())) return false;
      if (getPerspective()
          != other.getPerspective()) return false;
      if (getSmooth()
          != other.getSmooth()) return false;
      if (getOrbit()
          != other.getOrbit()) return false;
      if (getFollow()
          != other.getFollow()) 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();
      if (getSubjectCount() > 0) {
        hash = (37 * hash) + SUBJECT_FIELD_NUMBER;
        hash = (53 * hash) + getSubjectList().hashCode();
      }
      if (getOffsetCount() > 0) {
        hash = (37 * hash) + OFFSET_FIELD_NUMBER;
        hash = (53 * hash) + getOffsetList().hashCode();
      }
      if (getAngleCount() > 0) {
        hash = (37 * hash) + ANGLE_FIELD_NUMBER;
        hash = (53 * hash) + getAngleList().hashCode();
      }
      hash = (37 * hash) + SCENE_TIME_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getSceneTime());
      hash = (37 * hash) + MAGNIFICATION_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getMagnification());
      hash = (37 * hash) + TIME_CONSTANT_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getTimeConstant());
      hash = (37 * hash) + PAN_SENSITIVITY_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getPanSensitivity());
      hash = (37 * hash) + ROTATION_SENSITIVITY_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getRotationSensitivity());
      hash = (37 * hash) + ZOOM_SENSITIVITY_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getZoomSensitivity());
      hash = (37 * hash) + ZNEAR_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getZnear());
      hash = (37 * hash) + ZFAR_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getZfar());
      hash = (37 * hash) + AOV_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getAov());
      if (getResolutionCount() > 0) {
        hash = (37 * hash) + RESOLUTION_FIELD_NUMBER;
        hash = (53 * hash) + getResolutionList().hashCode();
      }
      hash = (37 * hash) + PERSPECTIVE_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getPerspective());
      hash = (37 * hash) + SMOOTH_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getSmooth());
      hash = (37 * hash) + ORBIT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getOrbit());
      hash = (37 * hash) + FOLLOW_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getFollow());
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static Messages.MetaOuterClass.CameraControl parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.CameraControl parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.CameraControl parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.CameraControl parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.CameraControl parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static Messages.MetaOuterClass.CameraControl parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static Messages.MetaOuterClass.CameraControl parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.CameraControl 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.MetaOuterClass.CameraControl parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.CameraControl 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.MetaOuterClass.CameraControl parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static Messages.MetaOuterClass.CameraControl 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.MetaOuterClass.CameraControl 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.CameraControl}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:Messages.CameraControl)
        Messages.MetaOuterClass.CameraControlOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Messages.MetaOuterClass.internal_static_Messages_CameraControl_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Messages.MetaOuterClass.internal_static_Messages_CameraControl_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                Messages.MetaOuterClass.CameraControl.class, Messages.MetaOuterClass.CameraControl.Builder.class);
      }

      // Construct using Messages.MetaOuterClass.CameraControl.newBuilder()
      private Builder() {

      }

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

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        subject_ = emptyFloatList();
        bitField0_ = (bitField0_ & ~0x00000001);
        offset_ = emptyFloatList();
        bitField0_ = (bitField0_ & ~0x00000002);
        angle_ = emptyFloatList();
        bitField0_ = (bitField0_ & ~0x00000004);
        sceneTime_ = 0F;

        magnification_ = 0F;

        timeConstant_ = 0F;

        panSensitivity_ = 0F;

        rotationSensitivity_ = 0F;

        zoomSensitivity_ = 0F;

        znear_ = 0F;

        zfar_ = 0F;

        aov_ = 0F;

        resolution_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000008);
        perspective_ = false;

        smooth_ = false;

        orbit_ = false;

        follow_ = false;

        return this;
      }

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

      @java.lang.Override
      public Messages.MetaOuterClass.CameraControl getDefaultInstanceForType() {
        return Messages.MetaOuterClass.CameraControl.getDefaultInstance();
      }

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

      @java.lang.Override
      public Messages.MetaOuterClass.CameraControl buildPartial() {
        Messages.MetaOuterClass.CameraControl result = new Messages.MetaOuterClass.CameraControl(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) != 0)) {
          subject_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.subject_ = subject_;
        if (((bitField0_ & 0x00000002) != 0)) {
          offset_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.offset_ = offset_;
        if (((bitField0_ & 0x00000004) != 0)) {
          angle_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.angle_ = angle_;
        result.sceneTime_ = sceneTime_;
        result.magnification_ = magnification_;
        result.timeConstant_ = timeConstant_;
        result.panSensitivity_ = panSensitivity_;
        result.rotationSensitivity_ = rotationSensitivity_;
        result.zoomSensitivity_ = zoomSensitivity_;
        result.znear_ = znear_;
        result.zfar_ = zfar_;
        result.aov_ = aov_;
        if (((bitField0_ & 0x00000008) != 0)) {
          resolution_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.resolution_ = resolution_;
        result.perspective_ = perspective_;
        result.smooth_ = smooth_;
        result.orbit_ = orbit_;
        result.follow_ = follow_;
        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.MetaOuterClass.CameraControl) {
          return mergeFrom((Messages.MetaOuterClass.CameraControl)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(Messages.MetaOuterClass.CameraControl other) {
        if (other == Messages.MetaOuterClass.CameraControl.getDefaultInstance()) return this;
        if (!other.subject_.isEmpty()) {
          if (subject_.isEmpty()) {
            subject_ = other.subject_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureSubjectIsMutable();
            subject_.addAll(other.subject_);
          }
          onChanged();
        }
        if (!other.offset_.isEmpty()) {
          if (offset_.isEmpty()) {
            offset_ = other.offset_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureOffsetIsMutable();
            offset_.addAll(other.offset_);
          }
          onChanged();
        }
        if (!other.angle_.isEmpty()) {
          if (angle_.isEmpty()) {
            angle_ = other.angle_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureAngleIsMutable();
            angle_.addAll(other.angle_);
          }
          onChanged();
        }
        if (other.getSceneTime() != 0F) {
          setSceneTime(other.getSceneTime());
        }
        if (other.getMagnification() != 0F) {
          setMagnification(other.getMagnification());
        }
        if (other.getTimeConstant() != 0F) {
          setTimeConstant(other.getTimeConstant());
        }
        if (other.getPanSensitivity() != 0F) {
          setPanSensitivity(other.getPanSensitivity());
        }
        if (other.getRotationSensitivity() != 0F) {
          setRotationSensitivity(other.getRotationSensitivity());
        }
        if (other.getZoomSensitivity() != 0F) {
          setZoomSensitivity(other.getZoomSensitivity());
        }
        if (other.getZnear() != 0F) {
          setZnear(other.getZnear());
        }
        if (other.getZfar() != 0F) {
          setZfar(other.getZfar());
        }
        if (other.getAov() != 0F) {
          setAov(other.getAov());
        }
        if (!other.resolution_.isEmpty()) {
          if (resolution_.isEmpty()) {
            resolution_ = other.resolution_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureResolutionIsMutable();
            resolution_.addAll(other.resolution_);
          }
          onChanged();
        }
        if (other.getPerspective() != false) {
          setPerspective(other.getPerspective());
        }
        if (other.getSmooth() != false) {
          setSmooth(other.getSmooth());
        }
        if (other.getOrbit() != false) {
          setOrbit(other.getOrbit());
        }
        if (other.getFollow() != false) {
          setFollow(other.getFollow());
        }
        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 13: {
                float v = input.readFloat();
                ensureSubjectIsMutable();
                subject_.addFloat(v);
                break;
              } // case 13
              case 10: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureSubjectIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  subject_.addFloat(input.readFloat());
                }
                input.popLimit(limit);
                break;
              } // case 10
              case 21: {
                float v = input.readFloat();
                ensureOffsetIsMutable();
                offset_.addFloat(v);
                break;
              } // case 21
              case 18: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureOffsetIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  offset_.addFloat(input.readFloat());
                }
                input.popLimit(limit);
                break;
              } // case 18
              case 29: {
                float v = input.readFloat();
                ensureAngleIsMutable();
                angle_.addFloat(v);
                break;
              } // case 29
              case 26: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureAngleIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  angle_.addFloat(input.readFloat());
                }
                input.popLimit(limit);
                break;
              } // case 26
              case 37: {
                sceneTime_ = input.readFloat();

                break;
              } // case 37
              case 45: {
                magnification_ = input.readFloat();

                break;
              } // case 45
              case 53: {
                timeConstant_ = input.readFloat();

                break;
              } // case 53
              case 61: {
                panSensitivity_ = input.readFloat();

                break;
              } // case 61
              case 69: {
                rotationSensitivity_ = input.readFloat();

                break;
              } // case 69
              case 77: {
                zoomSensitivity_ = input.readFloat();

                break;
              } // case 77
              case 85: {
                znear_ = input.readFloat();

                break;
              } // case 85
              case 93: {
                zfar_ = input.readFloat();

                break;
              } // case 93
              case 101: {
                aov_ = input.readFloat();

                break;
              } // case 101
              case 104: {
                int v = input.readUInt32();
                ensureResolutionIsMutable();
                resolution_.addInt(v);
                break;
              } // case 104
              case 106: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                ensureResolutionIsMutable();
                while (input.getBytesUntilLimit() > 0) {
                  resolution_.addInt(input.readUInt32());
                }
                input.popLimit(limit);
                break;
              } // case 106
              case 120: {
                perspective_ = input.readBool();

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

                break;
              } // case 128
              case 136: {
                orbit_ = input.readBool();

                break;
              } // case 136
              case 144: {
                follow_ = input.readBool();

                break;
              } // case 144
              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 com.google.protobuf.Internal.FloatList subject_ = emptyFloatList();
      private void ensureSubjectIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          subject_ = mutableCopy(subject_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       *global position of interest that is being tracked, xyz of length 3
       * </pre>
       *
       * <code>repeated float subject = 1;</code>
       * @return A list containing the subject.
       */
      public java.util.List<java.lang.Float>
          getSubjectList() {
        return ((bitField0_ & 0x00000001) != 0) ?
                 java.util.Collections.unmodifiableList(subject_) : subject_;
      }
      /**
       * <pre>
       *global position of interest that is being tracked, xyz of length 3
       * </pre>
       *
       * <code>repeated float subject = 1;</code>
       * @return The count of subject.
       */
      public int getSubjectCount() {
        return subject_.size();
      }
      /**
       * <pre>
       *global position of interest that is being tracked, xyz of length 3
       * </pre>
       *
       * <code>repeated float subject = 1;</code>
       * @param index The index of the element to return.
       * @return The subject at the given index.
       */
      public float getSubject(int index) {
        return subject_.getFloat(index);
      }
      /**
       * <pre>
       *global position of interest that is being tracked, xyz of length 3
       * </pre>
       *
       * <code>repeated float subject = 1;</code>
       * @param index The index to set the value at.
       * @param value The subject to set.
       * @return This builder for chaining.
       */
      public Builder setSubject(
          int index, float value) {
        ensureSubjectIsMutable();
        subject_.setFloat(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *global position of interest that is being tracked, xyz of length 3
       * </pre>
       *
       * <code>repeated float subject = 1;</code>
       * @param value The subject to add.
       * @return This builder for chaining.
       */
      public Builder addSubject(float value) {
        ensureSubjectIsMutable();
        subject_.addFloat(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *global position of interest that is being tracked, xyz of length 3
       * </pre>
       *
       * <code>repeated float subject = 1;</code>
       * @param values The subject to add.
       * @return This builder for chaining.
       */
      public Builder addAllSubject(
          java.lang.Iterable<? extends java.lang.Float> values) {
        ensureSubjectIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, subject_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *global position of interest that is being tracked, xyz of length 3
       * </pre>
       *
       * <code>repeated float subject = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearSubject() {
        subject_ = emptyFloatList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.FloatList offset_ = emptyFloatList();
      private void ensureOffsetIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          offset_ = mutableCopy(offset_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <pre>
       *global offset that camera might be centered on, dydxdz of length 3
       * </pre>
       *
       * <code>repeated float offset = 2;</code>
       * @return A list containing the offset.
       */
      public java.util.List<java.lang.Float>
          getOffsetList() {
        return ((bitField0_ & 0x00000002) != 0) ?
                 java.util.Collections.unmodifiableList(offset_) : offset_;
      }
      /**
       * <pre>
       *global offset that camera might be centered on, dydxdz of length 3
       * </pre>
       *
       * <code>repeated float offset = 2;</code>
       * @return The count of offset.
       */
      public int getOffsetCount() {
        return offset_.size();
      }
      /**
       * <pre>
       *global offset that camera might be centered on, dydxdz of length 3
       * </pre>
       *
       * <code>repeated float offset = 2;</code>
       * @param index The index of the element to return.
       * @return The offset at the given index.
       */
      public float getOffset(int index) {
        return offset_.getFloat(index);
      }
      /**
       * <pre>
       *global offset that camera might be centered on, dydxdz of length 3
       * </pre>
       *
       * <code>repeated float offset = 2;</code>
       * @param index The index to set the value at.
       * @param value The offset to set.
       * @return This builder for chaining.
       */
      public Builder setOffset(
          int index, float value) {
        ensureOffsetIsMutable();
        offset_.setFloat(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *global offset that camera might be centered on, dydxdz of length 3
       * </pre>
       *
       * <code>repeated float offset = 2;</code>
       * @param value The offset to add.
       * @return This builder for chaining.
       */
      public Builder addOffset(float value) {
        ensureOffsetIsMutable();
        offset_.addFloat(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *global offset that camera might be centered on, dydxdz of length 3
       * </pre>
       *
       * <code>repeated float offset = 2;</code>
       * @param values The offset to add.
       * @return This builder for chaining.
       */
      public Builder addAllOffset(
          java.lang.Iterable<? extends java.lang.Float> values) {
        ensureOffsetIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, offset_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *global offset that camera might be centered on, dydxdz of length 3
       * </pre>
       *
       * <code>repeated float offset = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearOffset() {
        offset_ = emptyFloatList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.FloatList angle_ = emptyFloatList();
      private void ensureAngleIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          angle_ = mutableCopy(angle_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <pre>
       *viewer/camera angle, of length 3 (6 for future stereoscopic)
       * </pre>
       *
       * <code>repeated float angle = 3;</code>
       * @return A list containing the angle.
       */
      public java.util.List<java.lang.Float>
          getAngleList() {
        return ((bitField0_ & 0x00000004) != 0) ?
                 java.util.Collections.unmodifiableList(angle_) : angle_;
      }
      /**
       * <pre>
       *viewer/camera angle, of length 3 (6 for future stereoscopic)
       * </pre>
       *
       * <code>repeated float angle = 3;</code>
       * @return The count of angle.
       */
      public int getAngleCount() {
        return angle_.size();
      }
      /**
       * <pre>
       *viewer/camera angle, of length 3 (6 for future stereoscopic)
       * </pre>
       *
       * <code>repeated float angle = 3;</code>
       * @param index The index of the element to return.
       * @return The angle at the given index.
       */
      public float getAngle(int index) {
        return angle_.getFloat(index);
      }
      /**
       * <pre>
       *viewer/camera angle, of length 3 (6 for future stereoscopic)
       * </pre>
       *
       * <code>repeated float angle = 3;</code>
       * @param index The index to set the value at.
       * @param value The angle to set.
       * @return This builder for chaining.
       */
      public Builder setAngle(
          int index, float value) {
        ensureAngleIsMutable();
        angle_.setFloat(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *viewer/camera angle, of length 3 (6 for future stereoscopic)
       * </pre>
       *
       * <code>repeated float angle = 3;</code>
       * @param value The angle to add.
       * @return This builder for chaining.
       */
      public Builder addAngle(float value) {
        ensureAngleIsMutable();
        angle_.addFloat(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *viewer/camera angle, of length 3 (6 for future stereoscopic)
       * </pre>
       *
       * <code>repeated float angle = 3;</code>
       * @param values The angle to add.
       * @return This builder for chaining.
       */
      public Builder addAllAngle(
          java.lang.Iterable<? extends java.lang.Float> values) {
        ensureAngleIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, angle_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       *viewer/camera angle, of length 3 (6 for future stereoscopic)
       * </pre>
       *
       * <code>repeated float angle = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearAngle() {
        angle_ = emptyFloatList();
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }

      private float sceneTime_ ;
      /**
       * <code>float scene_time = 4;</code>
       * @return The sceneTime.
       */
      @java.lang.Override
      public float getSceneTime() {
        return sceneTime_;
      }
      /**
       * <code>float scene_time = 4;</code>
       * @param value The sceneTime to set.
       * @return This builder for chaining.
       */
      public Builder setSceneTime(float value) {
        
        sceneTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>float scene_time = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearSceneTime() {
        
        sceneTime_ = 0F;
        onChanged();
        return this;
      }

      private float magnification_ ;
      /**
       * <code>float magnification = 5;</code>
       * @return The magnification.
       */
      @java.lang.Override
      public float getMagnification() {
        return magnification_;
      }
      /**
       * <code>float magnification = 5;</code>
       * @param value The magnification to set.
       * @return This builder for chaining.
       */
      public Builder setMagnification(float value) {
        
        magnification_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>float magnification = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearMagnification() {
        
        magnification_ = 0F;
        onChanged();
        return this;
      }

      private float timeConstant_ ;
      /**
       * <code>float time_constant = 6;</code>
       * @return The timeConstant.
       */
      @java.lang.Override
      public float getTimeConstant() {
        return timeConstant_;
      }
      /**
       * <code>float time_constant = 6;</code>
       * @param value The timeConstant to set.
       * @return This builder for chaining.
       */
      public Builder setTimeConstant(float value) {
        
        timeConstant_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>float time_constant = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimeConstant() {
        
        timeConstant_ = 0F;
        onChanged();
        return this;
      }

      private float panSensitivity_ ;
      /**
       * <code>float pan_sensitivity = 7;</code>
       * @return The panSensitivity.
       */
      @java.lang.Override
      public float getPanSensitivity() {
        return panSensitivity_;
      }
      /**
       * <code>float pan_sensitivity = 7;</code>
       * @param value The panSensitivity to set.
       * @return This builder for chaining.
       */
      public Builder setPanSensitivity(float value) {
        
        panSensitivity_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>float pan_sensitivity = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearPanSensitivity() {
        
        panSensitivity_ = 0F;
        onChanged();
        return this;
      }

      private float rotationSensitivity_ ;
      /**
       * <code>float rotation_sensitivity = 8;</code>
       * @return The rotationSensitivity.
       */
      @java.lang.Override
      public float getRotationSensitivity() {
        return rotationSensitivity_;
      }
      /**
       * <code>float rotation_sensitivity = 8;</code>
       * @param value The rotationSensitivity to set.
       * @return This builder for chaining.
       */
      public Builder setRotationSensitivity(float value) {
        
        rotationSensitivity_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>float rotation_sensitivity = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearRotationSensitivity() {
        
        rotationSensitivity_ = 0F;
        onChanged();
        return this;
      }

      private float zoomSensitivity_ ;
      /**
       * <code>float zoom_sensitivity = 9;</code>
       * @return The zoomSensitivity.
       */
      @java.lang.Override
      public float getZoomSensitivity() {
        return zoomSensitivity_;
      }
      /**
       * <code>float zoom_sensitivity = 9;</code>
       * @param value The zoomSensitivity to set.
       * @return This builder for chaining.
       */
      public Builder setZoomSensitivity(float value) {
        
        zoomSensitivity_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>float zoom_sensitivity = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearZoomSensitivity() {
        
        zoomSensitivity_ = 0F;
        onChanged();
        return this;
      }

      private float znear_ ;
      /**
       * <code>float znear = 10;</code>
       * @return The znear.
       */
      @java.lang.Override
      public float getZnear() {
        return znear_;
      }
      /**
       * <code>float znear = 10;</code>
       * @param value The znear to set.
       * @return This builder for chaining.
       */
      public Builder setZnear(float value) {
        
        znear_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>float znear = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearZnear() {
        
        znear_ = 0F;
        onChanged();
        return this;
      }

      private float zfar_ ;
      /**
       * <code>float zfar = 11;</code>
       * @return The zfar.
       */
      @java.lang.Override
      public float getZfar() {
        return zfar_;
      }
      /**
       * <code>float zfar = 11;</code>
       * @param value The zfar to set.
       * @return This builder for chaining.
       */
      public Builder setZfar(float value) {
        
        zfar_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>float zfar = 11;</code>
       * @return This builder for chaining.
       */
      public Builder clearZfar() {
        
        zfar_ = 0F;
        onChanged();
        return this;
      }

      private float aov_ ;
      /**
       * <pre>
       * angle of view of focal lens (perspective mode)
       * </pre>
       *
       * <code>float aov = 12;</code>
       * @return The aov.
       */
      @java.lang.Override
      public float getAov() {
        return aov_;
      }
      /**
       * <pre>
       * angle of view of focal lens (perspective mode)
       * </pre>
       *
       * <code>float aov = 12;</code>
       * @param value The aov to set.
       * @return This builder for chaining.
       */
      public Builder setAov(float value) {
        
        aov_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * angle of view of focal lens (perspective mode)
       * </pre>
       *
       * <code>float aov = 12;</code>
       * @return This builder for chaining.
       */
      public Builder clearAov() {
        
        aov_ = 0F;
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.IntList resolution_ = emptyIntList();
      private void ensureResolutionIsMutable() {
        if (!((bitField0_ & 0x00000008) != 0)) {
          resolution_ = mutableCopy(resolution_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <code>repeated uint32 resolution = 13;</code>
       * @return A list containing the resolution.
       */
      public java.util.List<java.lang.Integer>
          getResolutionList() {
        return ((bitField0_ & 0x00000008) != 0) ?
                 java.util.Collections.unmodifiableList(resolution_) : resolution_;
      }
      /**
       * <code>repeated uint32 resolution = 13;</code>
       * @return The count of resolution.
       */
      public int getResolutionCount() {
        return resolution_.size();
      }
      /**
       * <code>repeated uint32 resolution = 13;</code>
       * @param index The index of the element to return.
       * @return The resolution at the given index.
       */
      public int getResolution(int index) {
        return resolution_.getInt(index);
      }
      /**
       * <code>repeated uint32 resolution = 13;</code>
       * @param index The index to set the value at.
       * @param value The resolution to set.
       * @return This builder for chaining.
       */
      public Builder setResolution(
          int index, int value) {
        ensureResolutionIsMutable();
        resolution_.setInt(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated uint32 resolution = 13;</code>
       * @param value The resolution to add.
       * @return This builder for chaining.
       */
      public Builder addResolution(int value) {
        ensureResolutionIsMutable();
        resolution_.addInt(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated uint32 resolution = 13;</code>
       * @param values The resolution to add.
       * @return This builder for chaining.
       */
      public Builder addAllResolution(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureResolutionIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, resolution_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated uint32 resolution = 13;</code>
       * @return This builder for chaining.
       */
      public Builder clearResolution() {
        resolution_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }

      private boolean perspective_ ;
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>bool perspective = 15;</code>
       * @return The perspective.
       */
      @java.lang.Override
      public boolean getPerspective() {
        return perspective_;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>bool perspective = 15;</code>
       * @param value The perspective to set.
       * @return This builder for chaining.
       */
      public Builder setPerspective(boolean value) {
        
        perspective_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *reserved
       * </pre>
       *
       * <code>bool perspective = 15;</code>
       * @return This builder for chaining.
       */
      public Builder clearPerspective() {
        
        perspective_ = 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 orbit_ ;
      /**
       * <code>bool orbit = 17;</code>
       * @return The orbit.
       */
      @java.lang.Override
      public boolean getOrbit() {
        return orbit_;
      }
      /**
       * <code>bool orbit = 17;</code>
       * @param value The orbit to set.
       * @return This builder for chaining.
       */
      public Builder setOrbit(boolean value) {
        
        orbit_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool orbit = 17;</code>
       * @return This builder for chaining.
       */
      public Builder clearOrbit() {
        
        orbit_ = false;
        onChanged();
        return this;
      }

      private boolean follow_ ;
      /**
       * <code>bool follow = 18;</code>
       * @return The follow.
       */
      @java.lang.Override
      public boolean getFollow() {
        return follow_;
      }
      /**
       * <code>bool follow = 18;</code>
       * @param value The follow to set.
       * @return This builder for chaining.
       */
      public Builder setFollow(boolean value) {
        
        follow_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool follow = 18;</code>
       * @return This builder for chaining.
       */
      public Builder clearFollow() {
        
        follow_ = 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.CameraControl)
    }

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

    public static Messages.MetaOuterClass.CameraControl getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CameraControl>
        PARSER = new com.google.protobuf.AbstractParser<CameraControl>() {
      @java.lang.Override
      public CameraControl 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<CameraControl> parser() {
      return PARSER;
    }

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

    @java.lang.Override
    public Messages.MetaOuterClass.CameraControl getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_Messages_GraphicsControl_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_Messages_GraphicsControl_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_Messages_Representation_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_Messages_Representation_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_Messages_Visual_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_Messages_Visual_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_Messages_Meta_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_Messages_Meta_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_Messages_SliceControl_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_Messages_SliceControl_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_Messages_CameraControl_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_Messages_CameraControl_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\nmeta.proto\022\010Messages\032\014vector.proto\032\rsp" +
      "atial.proto\"\206\001\n\017GraphicsControl\022\014\n\004mode\030" +
      "\001 \001(\r\022\r\n\005style\030\002 \001(\r\022\r\n\005color\030\004 \003(\002\022\r\n\005a" +
      "lpha\030\005 \001(\002\022\023\n\013point_width\030\006 \001(\002\022\022\n\nline_" +
      "width\030\007 \001(\002\022\017\n\007visible\030\n \001(\010\"\334\001\n\016Represe" +
      "ntation\022\024\n\014property_key\030\001 \001(\t\022\021\n\tcolor_m" +
      "ap\030\002 \001(\r\022\021\n\tcomponent\030\003 \001(\r\022\022\n\nauto_rang" +
      "e\030\004 \001(\010\022\027\n\017use_default_key\030\005 \001(\010\022\032\n\022colo" +
      "r_out_of_range\030\006 \001(\010\022\025\n\ruse_magnitude\030\007 " +
      "\001(\010\022\037\n\027displacement_multiplier\030\t \001(\002\022\r\n\005" +
      "range\030\n \003(\002\"\263\002\n\006Visual\022\036\n\006region\030\001 \001(\0132\016" +
      ".Messages.Zone\022*\n\007control\030\002 \001(\0132\031.Messag" +
      "es.GraphicsControl\0220\n\016representation\030\003 \001" +
      "(\0132\030.Messages.Representation\022\016\n\006points\030\005" +
      " \003(\r\022\r\n\005lines\030\006 \003(\r\022\021\n\ttriangles\030\007 \003(\r\022\033" +
      "\n\023indices_per_element\030\010 \003(\r\022\033\n\023elements_" +
      "to_indices\030\t \003(\r\022\033\n\023indices_to_elements\030" +
      "\n \003(\r\022\"\n\006extras\030\017 \003(\0132\022.Messages.Vector3" +
      "2\"\367\005\n\004Meta\022\014\n\004name\030\001 \001(\t\022\013\n\003uid\030\002 \001(\003\022\021\n" +
      "\tdirectory\030\003 \001(\t\022\016\n\006symbol\030\004 \001(\t\022\r\n\005owne" +
      "r\030\005 \001(\t\022\020\n\010comments\030\006 \001(\t\022\016\n\006series\030\007 \001(" +
      "\t\022\020\n\010sys_info\030\010 \001(\t\022\021\n\tgeom_info\030\t \001(\t\022\016" +
      "\n\006parent\030\n \001(\003\022\017\n\007created\030\013 \001(\003\022\r\n\005saved" +
      "\030\014 \001(\003\022\020\n\010modified\030\r \001(\003\022\021\n\titeration\030\016 " +
      "\001(\004\022\025\n\rsave_interval\030\017 \001(\004\022\017\n\007enabled\030\020 " +
      "\001(\010\022\016\n\006locked\030\021 \001(\010\022\021\n\tauto_save\030\022 \001(\010\022\023" +
      "\n\013lightweight\030\023 \001(\010\022$\n\010revision\030\024 \001(\0132\022." +
      "Messages.Revision\022#\n\007version\030\025 \001(\0132\022.Mes" +
      "sages.Revision\022!\n\006bounds\030\026 \001(\0132\021.Message" +
      "s.Extrema\022\013\n\003url\030\027 \001(\t\022-\n\nappearance\030\030 \001" +
      "(\0132\031.Messages.GraphicsControl\022\020\n\010childre" +
      "n\030\031 \003(\003\022\016\n\006groups\030\032 \003(\005\022\r\n\005loops\030\033 \003(\005\022\020" +
      "\n\010surfaces\030\034 \003(\005\022\017\n\007volumes\030\035 \003(\005\022\030\n\020glo" +
      "bal_transform\030\036 \003(\001\022\023\n\013global_rate\030\037 \003(\001" +
      "\022\024\n\014global_accel\030  \003(\001\022\022\n\nproperties\030! \003" +
      "(\t\022\037\n\005media\030\" \003(\0132\020.Messages.Visual\022\030\n\020s" +
      "ymbol_transform\030# \003(\002\022\024\n\014length_units\030( " +
      "\001(\r\"s\n\014SliceControl\022\014\n\004name\030\001 \001(\t\022\016\n\006cen" +
      "ter\030\002 \003(\001\022\016\n\006normal\030\003 \003(\001\022\021\n\tintersect\030\004" +
      " \001(\010\022\020\n\010negative\030\005 \001(\010\022\020\n\010positive\030\006 \001(\010" +
      "\"\324\002\n\rCameraControl\022\017\n\007subject\030\001 \003(\002\022\016\n\006o" +
      "ffset\030\002 \003(\002\022\r\n\005angle\030\003 \003(\002\022\022\n\nscene_time" +
      "\030\004 \001(\002\022\025\n\rmagnification\030\005 \001(\002\022\025\n\rtime_co" +
      "nstant\030\006 \001(\002\022\027\n\017pan_sensitivity\030\007 \001(\002\022\034\n" +
      "\024rotation_sensitivity\030\010 \001(\002\022\030\n\020zoom_sens" +
      "itivity\030\t \001(\002\022\r\n\005znear\030\n \001(\002\022\014\n\004zfar\030\013 \001" +
      "(\002\022\013\n\003aov\030\014 \001(\002\022\022\n\nresolution\030\r \003(\r\022\023\n\013p" +
      "erspective\030\017 \001(\010\022\016\n\006smooth\030\020 \001(\010\022\r\n\005orbi" +
      "t\030\021 \001(\010\022\016\n\006follow\030\022 \001(\010b\006proto3"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
          Messages.Vector.getDescriptor(),
          Messages.Spatial.getDescriptor(),
        });
    internal_static_Messages_GraphicsControl_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_Messages_GraphicsControl_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_Messages_GraphicsControl_descriptor,
        new java.lang.String[] { "Mode", "Style", "Color", "Alpha", "PointWidth", "LineWidth", "Visible", });
    internal_static_Messages_Representation_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_Messages_Representation_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_Messages_Representation_descriptor,
        new java.lang.String[] { "PropertyKey", "ColorMap", "Component", "AutoRange", "UseDefaultKey", "ColorOutOfRange", "UseMagnitude", "DisplacementMultiplier", "Range", });
    internal_static_Messages_Visual_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_Messages_Visual_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_Messages_Visual_descriptor,
        new java.lang.String[] { "Region", "Control", "Representation", "Points", "Lines", "Triangles", "IndicesPerElement", "ElementsToIndices", "IndicesToElements", "Extras", });
    internal_static_Messages_Meta_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_Messages_Meta_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_Messages_Meta_descriptor,
        new java.lang.String[] { "Name", "Uid", "Directory", "Symbol", "Owner", "Comments", "Series", "SysInfo", "GeomInfo", "Parent", "Created", "Saved", "Modified", "Iteration", "SaveInterval", "Enabled", "Locked", "AutoSave", "Lightweight", "Revision", "Version", "Bounds", "Url", "Appearance", "Children", "Groups", "Loops", "Surfaces", "Volumes", "GlobalTransform", "GlobalRate", "GlobalAccel", "Properties", "Media", "SymbolTransform", "LengthUnits", });
    internal_static_Messages_SliceControl_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_Messages_SliceControl_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_Messages_SliceControl_descriptor,
        new java.lang.String[] { "Name", "Center", "Normal", "Intersect", "Negative", "Positive", });
    internal_static_Messages_CameraControl_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_Messages_CameraControl_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_Messages_CameraControl_descriptor,
        new java.lang.String[] { "Subject", "Offset", "Angle", "SceneTime", "Magnification", "TimeConstant", "PanSensitivity", "RotationSensitivity", "ZoomSensitivity", "Znear", "Zfar", "Aov", "Resolution", "Perspective", "Smooth", "Orbit", "Follow", });
    Messages.Vector.getDescriptor();
    Messages.Spatial.getDescriptor();
  }

  // @@protoc_insertion_point(outer_class_scope)
}
