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

#include "rocktree.pb.h"

#include <algorithm>

#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/extension_set.h>
#include <google/protobuf/wire_format_lite.h>
#include <google/protobuf/descriptor.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/reflection_ops.h>
#include <google/protobuf/wire_format.h>
// @@protoc_insertion_point(includes)
#include <google/protobuf/port_def.inc>

PROTOBUF_PRAGMA_INIT_SEG

namespace _pb = ::PROTOBUF_NAMESPACE_ID;
namespace _pbi = _pb::internal;

namespace geo_globetrotter_proto_rocktree {
PROTOBUF_CONSTEXPR BulkMetadataRequest::BulkMetadataRequest(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_._has_bits_)*/{}
  , /*decltype(_impl_._cached_size_)*/{}
  , /*decltype(_impl_.node_key_)*/nullptr} {}
struct BulkMetadataRequestDefaultTypeInternal {
  PROTOBUF_CONSTEXPR BulkMetadataRequestDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~BulkMetadataRequestDefaultTypeInternal() {}
  union {
    BulkMetadataRequest _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 BulkMetadataRequestDefaultTypeInternal _BulkMetadataRequest_default_instance_;
PROTOBUF_CONSTEXPR NodeDataRequest::NodeDataRequest(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_._has_bits_)*/{}
  , /*decltype(_impl_._cached_size_)*/{}
  , /*decltype(_impl_.node_key_)*/nullptr
  , /*decltype(_impl_.imagery_epoch_)*/0u
  , /*decltype(_impl_.texture_format_)*/1} {}
struct NodeDataRequestDefaultTypeInternal {
  PROTOBUF_CONSTEXPR NodeDataRequestDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~NodeDataRequestDefaultTypeInternal() {}
  union {
    NodeDataRequest _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 NodeDataRequestDefaultTypeInternal _NodeDataRequest_default_instance_;
PROTOBUF_CONSTEXPR NodeKey::NodeKey(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_._has_bits_)*/{}
  , /*decltype(_impl_._cached_size_)*/{}
  , /*decltype(_impl_.path_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.epoch_)*/0u} {}
struct NodeKeyDefaultTypeInternal {
  PROTOBUF_CONSTEXPR NodeKeyDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~NodeKeyDefaultTypeInternal() {}
  union {
    NodeKey _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 NodeKeyDefaultTypeInternal _NodeKey_default_instance_;
PROTOBUF_CONSTEXPR CopyrightRequest::CopyrightRequest(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_._has_bits_)*/{}
  , /*decltype(_impl_._cached_size_)*/{}
  , /*decltype(_impl_.epoch_)*/0u} {}
struct CopyrightRequestDefaultTypeInternal {
  PROTOBUF_CONSTEXPR CopyrightRequestDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~CopyrightRequestDefaultTypeInternal() {}
  union {
    CopyrightRequest _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 CopyrightRequestDefaultTypeInternal _CopyrightRequest_default_instance_;
PROTOBUF_CONSTEXPR TextureDataRequest::TextureDataRequest(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_._has_bits_)*/{}
  , /*decltype(_impl_._cached_size_)*/{}
  , /*decltype(_impl_.node_key_)*/nullptr
  , /*decltype(_impl_.view_direction_)*/0
  , /*decltype(_impl_.texture_format_)*/1} {}
struct TextureDataRequestDefaultTypeInternal {
  PROTOBUF_CONSTEXPR TextureDataRequestDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~TextureDataRequestDefaultTypeInternal() {}
  union {
    TextureDataRequest _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 TextureDataRequestDefaultTypeInternal _TextureDataRequest_default_instance_;
PROTOBUF_CONSTEXPR BulkMetadata::BulkMetadata(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_._has_bits_)*/{}
  , /*decltype(_impl_._cached_size_)*/{}
  , /*decltype(_impl_.node_metadata_)*/{}
  , /*decltype(_impl_.head_node_center_)*/{}
  , /*decltype(_impl_.meters_per_texel_)*/{}
  , /*decltype(_impl_.head_node_key_)*/nullptr
  , /*decltype(_impl_.default_imagery_epoch_)*/0u
  , /*decltype(_impl_.default_available_texture_formats_)*/0u
  , /*decltype(_impl_.default_available_view_dependent_textures_)*/0u
  , /*decltype(_impl_.default_available_view_dependent_texture_formats_)*/0u} {}
struct BulkMetadataDefaultTypeInternal {
  PROTOBUF_CONSTEXPR BulkMetadataDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~BulkMetadataDefaultTypeInternal() {}
  union {
    BulkMetadata _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 BulkMetadataDefaultTypeInternal _BulkMetadata_default_instance_;
PROTOBUF_CONSTEXPR NodeMetadata::NodeMetadata(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_._has_bits_)*/{}
  , /*decltype(_impl_._cached_size_)*/{}
  , /*decltype(_impl_.processing_oriented_bounding_box_)*/{}
  , /*decltype(_impl_.oriented_bounding_box_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.path_and_flags_)*/0u
  , /*decltype(_impl_.epoch_)*/0u
  , /*decltype(_impl_.meters_per_texel_)*/0
  , /*decltype(_impl_.bulk_metadata_epoch_)*/0u
  , /*decltype(_impl_.imagery_epoch_)*/0u
  , /*decltype(_impl_.available_texture_formats_)*/0u
  , /*decltype(_impl_.available_view_dependent_textures_)*/0u
  , /*decltype(_impl_.available_view_dependent_texture_formats_)*/0u} {}
struct NodeMetadataDefaultTypeInternal {
  PROTOBUF_CONSTEXPR NodeMetadataDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~NodeMetadataDefaultTypeInternal() {}
  union {
    NodeMetadata _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 NodeMetadataDefaultTypeInternal _NodeMetadata_default_instance_;
PROTOBUF_CONSTEXPR NodeData::NodeData(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_._has_bits_)*/{}
  , /*decltype(_impl_._cached_size_)*/{}
  , /*decltype(_impl_.matrix_globe_from_mesh_)*/{}
  , /*decltype(_impl_.meshes_)*/{}
  , /*decltype(_impl_.copyright_ids_)*/{}
  , /*decltype(_impl_.kml_bounding_box_)*/{}
  , /*decltype(_impl_.overlay_surface_meshes_)*/{}
  , /*decltype(_impl_.for_normals_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.node_key_)*/nullptr
  , /*decltype(_impl_.water_mesh_)*/nullptr} {}
struct NodeDataDefaultTypeInternal {
  PROTOBUF_CONSTEXPR NodeDataDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~NodeDataDefaultTypeInternal() {}
  union {
    NodeData _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 NodeDataDefaultTypeInternal _NodeData_default_instance_;
PROTOBUF_CONSTEXPR Mesh::Mesh(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_._has_bits_)*/{}
  , /*decltype(_impl_._cached_size_)*/{}
  , /*decltype(_impl_.texture_)*/{}
  , /*decltype(_impl_.uv_offset_and_scale_)*/{}
  , /*decltype(_impl_.vertices_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.texture_coords_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.indices_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.octant_ranges_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.layer_counts_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.texture_coordinates_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.layer_and_octant_counts_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.vertex_alphas_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.normals_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.skirt_flags_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.normals_dev_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.mesh_id_)*/0u} {}
struct MeshDefaultTypeInternal {
  PROTOBUF_CONSTEXPR MeshDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~MeshDefaultTypeInternal() {}
  union {
    Mesh _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 MeshDefaultTypeInternal _Mesh_default_instance_;
PROTOBUF_CONSTEXPR Texture::Texture(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_._has_bits_)*/{}
  , /*decltype(_impl_._cached_size_)*/{}
  , /*decltype(_impl_.data_)*/{}
  , /*decltype(_impl_.view_direction_)*/0
  , /*decltype(_impl_.mesh_id_)*/0u
  , /*decltype(_impl_.height_)*/256u
  , /*decltype(_impl_.format_)*/1
  , /*decltype(_impl_.width_)*/256u} {}
struct TextureDefaultTypeInternal {
  PROTOBUF_CONSTEXPR TextureDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~TextureDefaultTypeInternal() {}
  union {
    Texture _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 TextureDefaultTypeInternal _Texture_default_instance_;
PROTOBUF_CONSTEXPR TextureData::TextureData(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_._has_bits_)*/{}
  , /*decltype(_impl_._cached_size_)*/{}
  , /*decltype(_impl_.textures_)*/{}
  , /*decltype(_impl_.node_key_)*/nullptr} {}
struct TextureDataDefaultTypeInternal {
  PROTOBUF_CONSTEXPR TextureDataDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~TextureDataDefaultTypeInternal() {}
  union {
    TextureData _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 TextureDataDefaultTypeInternal _TextureData_default_instance_;
PROTOBUF_CONSTEXPR Copyrights::Copyrights(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_.copyrights_)*/{}
  , /*decltype(_impl_._cached_size_)*/{}} {}
struct CopyrightsDefaultTypeInternal {
  PROTOBUF_CONSTEXPR CopyrightsDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~CopyrightsDefaultTypeInternal() {}
  union {
    Copyrights _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 CopyrightsDefaultTypeInternal _Copyrights_default_instance_;
PROTOBUF_CONSTEXPR Copyright::Copyright(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_._has_bits_)*/{}
  , /*decltype(_impl_._cached_size_)*/{}
  , /*decltype(_impl_.text_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.text_clean_)*/{&::_pbi::fixed_address_empty_string, ::_pbi::ConstantInitialized{}}
  , /*decltype(_impl_.id_)*/0u} {}
struct CopyrightDefaultTypeInternal {
  PROTOBUF_CONSTEXPR CopyrightDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~CopyrightDefaultTypeInternal() {}
  union {
    Copyright _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 CopyrightDefaultTypeInternal _Copyright_default_instance_;
PROTOBUF_CONSTEXPR PlanetoidMetadata::PlanetoidMetadata(
    ::_pbi::ConstantInitialized): _impl_{
    /*decltype(_impl_._has_bits_)*/{}
  , /*decltype(_impl_._cached_size_)*/{}
  , /*decltype(_impl_.root_node_metadata_)*/nullptr
  , /*decltype(_impl_.radius_)*/0
  , /*decltype(_impl_.min_terrain_altitude_)*/0
  , /*decltype(_impl_.max_terrain_altitude_)*/0} {}
struct PlanetoidMetadataDefaultTypeInternal {
  PROTOBUF_CONSTEXPR PlanetoidMetadataDefaultTypeInternal()
      : _instance(::_pbi::ConstantInitialized{}) {}
  ~PlanetoidMetadataDefaultTypeInternal() {}
  union {
    PlanetoidMetadata _instance;
  };
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 PlanetoidMetadataDefaultTypeInternal _PlanetoidMetadata_default_instance_;
}  // namespace geo_globetrotter_proto_rocktree
static ::_pb::Metadata file_level_metadata_rocktree_2eproto[14];
static const ::_pb::EnumDescriptor* file_level_enum_descriptors_rocktree_2eproto[5];
static constexpr ::_pb::ServiceDescriptor const** file_level_service_descriptors_rocktree_2eproto = nullptr;

const uint32_t TableStruct_rocktree_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::BulkMetadataRequest, _impl_._has_bits_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::BulkMetadataRequest, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::BulkMetadataRequest, _impl_.node_key_),
  0,
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeDataRequest, _impl_._has_bits_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeDataRequest, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeDataRequest, _impl_.node_key_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeDataRequest, _impl_.texture_format_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeDataRequest, _impl_.imagery_epoch_),
  0,
  2,
  1,
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeKey, _impl_._has_bits_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeKey, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeKey, _impl_.path_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeKey, _impl_.epoch_),
  0,
  1,
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::CopyrightRequest, _impl_._has_bits_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::CopyrightRequest, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::CopyrightRequest, _impl_.epoch_),
  0,
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::TextureDataRequest, _impl_._has_bits_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::TextureDataRequest, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::TextureDataRequest, _impl_.node_key_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::TextureDataRequest, _impl_.texture_format_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::TextureDataRequest, _impl_.view_direction_),
  0,
  2,
  1,
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::BulkMetadata, _impl_._has_bits_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::BulkMetadata, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::BulkMetadata, _impl_.node_metadata_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::BulkMetadata, _impl_.head_node_key_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::BulkMetadata, _impl_.head_node_center_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::BulkMetadata, _impl_.meters_per_texel_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::BulkMetadata, _impl_.default_imagery_epoch_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::BulkMetadata, _impl_.default_available_texture_formats_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::BulkMetadata, _impl_.default_available_view_dependent_textures_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::BulkMetadata, _impl_.default_available_view_dependent_texture_formats_),
  ~0u,
  0,
  ~0u,
  ~0u,
  1,
  2,
  3,
  4,
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeMetadata, _impl_._has_bits_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeMetadata, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeMetadata, _impl_.path_and_flags_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeMetadata, _impl_.epoch_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeMetadata, _impl_.bulk_metadata_epoch_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeMetadata, _impl_.oriented_bounding_box_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeMetadata, _impl_.meters_per_texel_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeMetadata, _impl_.processing_oriented_bounding_box_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeMetadata, _impl_.imagery_epoch_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeMetadata, _impl_.available_texture_formats_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeMetadata, _impl_.available_view_dependent_textures_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeMetadata, _impl_.available_view_dependent_texture_formats_),
  1,
  2,
  4,
  0,
  3,
  ~0u,
  5,
  6,
  7,
  8,
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeData, _impl_._has_bits_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeData, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeData, _impl_.matrix_globe_from_mesh_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeData, _impl_.meshes_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeData, _impl_.copyright_ids_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeData, _impl_.node_key_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeData, _impl_.kml_bounding_box_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeData, _impl_.water_mesh_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeData, _impl_.overlay_surface_meshes_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::NodeData, _impl_.for_normals_),
  ~0u,
  ~0u,
  ~0u,
  1,
  ~0u,
  2,
  ~0u,
  0,
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Mesh, _impl_._has_bits_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Mesh, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Mesh, _impl_.vertices_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Mesh, _impl_.vertex_alphas_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Mesh, _impl_.texture_coords_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Mesh, _impl_.indices_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Mesh, _impl_.octant_ranges_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Mesh, _impl_.layer_counts_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Mesh, _impl_.texture_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Mesh, _impl_.texture_coordinates_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Mesh, _impl_.uv_offset_and_scale_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Mesh, _impl_.layer_and_octant_counts_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Mesh, _impl_.normals_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Mesh, _impl_.normals_dev_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Mesh, _impl_.mesh_id_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Mesh, _impl_.skirt_flags_),
  0,
  7,
  1,
  2,
  3,
  4,
  ~0u,
  5,
  ~0u,
  6,
  8,
  10,
  11,
  9,
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Texture, _impl_._has_bits_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Texture, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Texture, _impl_.data_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Texture, _impl_.format_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Texture, _impl_.width_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Texture, _impl_.height_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Texture, _impl_.view_direction_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Texture, _impl_.mesh_id_),
  ~0u,
  3,
  4,
  2,
  0,
  1,
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::TextureData, _impl_._has_bits_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::TextureData, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::TextureData, _impl_.node_key_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::TextureData, _impl_.textures_),
  0,
  ~0u,
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Copyrights, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Copyrights, _impl_.copyrights_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Copyright, _impl_._has_bits_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Copyright, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Copyright, _impl_.id_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Copyright, _impl_.text_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::Copyright, _impl_.text_clean_),
  2,
  0,
  1,
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::PlanetoidMetadata, _impl_._has_bits_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::PlanetoidMetadata, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  ~0u,  // no _inlined_string_donated_
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::PlanetoidMetadata, _impl_.root_node_metadata_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::PlanetoidMetadata, _impl_.radius_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::PlanetoidMetadata, _impl_.min_terrain_altitude_),
  PROTOBUF_FIELD_OFFSET(::geo_globetrotter_proto_rocktree::PlanetoidMetadata, _impl_.max_terrain_altitude_),
  0,
  1,
  2,
  3,
};
static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
  { 0, 7, -1, sizeof(::geo_globetrotter_proto_rocktree::BulkMetadataRequest)},
  { 8, 17, -1, sizeof(::geo_globetrotter_proto_rocktree::NodeDataRequest)},
  { 20, 28, -1, sizeof(::geo_globetrotter_proto_rocktree::NodeKey)},
  { 30, 37, -1, sizeof(::geo_globetrotter_proto_rocktree::CopyrightRequest)},
  { 38, 47, -1, sizeof(::geo_globetrotter_proto_rocktree::TextureDataRequest)},
  { 50, 64, -1, sizeof(::geo_globetrotter_proto_rocktree::BulkMetadata)},
  { 72, 88, -1, sizeof(::geo_globetrotter_proto_rocktree::NodeMetadata)},
  { 98, 112, -1, sizeof(::geo_globetrotter_proto_rocktree::NodeData)},
  { 120, 140, -1, sizeof(::geo_globetrotter_proto_rocktree::Mesh)},
  { 154, 166, -1, sizeof(::geo_globetrotter_proto_rocktree::Texture)},
  { 172, 180, -1, sizeof(::geo_globetrotter_proto_rocktree::TextureData)},
  { 182, -1, -1, sizeof(::geo_globetrotter_proto_rocktree::Copyrights)},
  { 189, 198, -1, sizeof(::geo_globetrotter_proto_rocktree::Copyright)},
  { 201, 211, -1, sizeof(::geo_globetrotter_proto_rocktree::PlanetoidMetadata)},
};

static const ::_pb::Message* const file_default_instances[] = {
  &::geo_globetrotter_proto_rocktree::_BulkMetadataRequest_default_instance_._instance,
  &::geo_globetrotter_proto_rocktree::_NodeDataRequest_default_instance_._instance,
  &::geo_globetrotter_proto_rocktree::_NodeKey_default_instance_._instance,
  &::geo_globetrotter_proto_rocktree::_CopyrightRequest_default_instance_._instance,
  &::geo_globetrotter_proto_rocktree::_TextureDataRequest_default_instance_._instance,
  &::geo_globetrotter_proto_rocktree::_BulkMetadata_default_instance_._instance,
  &::geo_globetrotter_proto_rocktree::_NodeMetadata_default_instance_._instance,
  &::geo_globetrotter_proto_rocktree::_NodeData_default_instance_._instance,
  &::geo_globetrotter_proto_rocktree::_Mesh_default_instance_._instance,
  &::geo_globetrotter_proto_rocktree::_Texture_default_instance_._instance,
  &::geo_globetrotter_proto_rocktree::_TextureData_default_instance_._instance,
  &::geo_globetrotter_proto_rocktree::_Copyrights_default_instance_._instance,
  &::geo_globetrotter_proto_rocktree::_Copyright_default_instance_._instance,
  &::geo_globetrotter_proto_rocktree::_PlanetoidMetadata_default_instance_._instance,
};

const char descriptor_table_protodef_rocktree_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
  "\n\016rocktree.proto\022\037geo_globetrotter_proto"
  "_rocktree\"Q\n\023BulkMetadataRequest\022:\n\010node"
  "_key\030\001 \001(\0132(.geo_globetrotter_proto_rock"
  "tree.NodeKey\"\255\001\n\017NodeDataRequest\022:\n\010node"
  "_key\030\001 \001(\0132(.geo_globetrotter_proto_rock"
  "tree.NodeKey\022G\n\016texture_format\030\002 \001(\0162/.g"
  "eo_globetrotter_proto_rocktree.Texture.F"
  "ormat\022\025\n\rimagery_epoch\030\003 \001(\r\"&\n\007NodeKey\022"
  "\014\n\004path\030\001 \001(\t\022\r\n\005epoch\030\002 \001(\r\"!\n\020Copyrigh"
  "tRequest\022\r\n\005epoch\030\001 \001(\r\"\351\001\n\022TextureDataR"
  "equest\022:\n\010node_key\030\001 \001(\0132(.geo_globetrot"
  "ter_proto_rocktree.NodeKey\022G\n\016texture_fo"
  "rmat\030\002 \001(\0162/.geo_globetrotter_proto_rock"
  "tree.Texture.Format\022N\n\016view_direction\030\003 "
  "\001(\01626.geo_globetrotter_proto_rocktree.Te"
  "xture.ViewDirection\"\210\003\n\014BulkMetadata\022D\n\r"
  "node_metadata\030\001 \003(\0132-.geo_globetrotter_p"
  "roto_rocktree.NodeMetadata\022\?\n\rhead_node_"
  "key\030\002 \001(\0132(.geo_globetrotter_proto_rockt"
  "ree.NodeKey\022\034\n\020head_node_center\030\003 \003(\001B\002\020"
  "\001\022\034\n\020meters_per_texel\030\004 \003(\002B\002\020\001\022\035\n\025defau"
  "lt_imagery_epoch\030\005 \001(\r\022)\n!default_availa"
  "ble_texture_formats\030\006 \001(\r\0221\n)default_ava"
  "ilable_view_dependent_textures\030\007 \001(\r\0228\n0"
  "default_available_view_dependent_texture"
  "_formats\030\010 \001(\r\"\252\003\n\014NodeMetadata\022\026\n\016path_"
  "and_flags\030\001 \001(\r\022\r\n\005epoch\030\002 \001(\r\022\033\n\023bulk_m"
  "etadata_epoch\030\005 \001(\r\022\035\n\025oriented_bounding"
  "_box\030\003 \001(\014\022\030\n\020meters_per_texel\030\004 \001(\002\022,\n "
  "processing_oriented_bounding_box\030\006 \003(\001B\002"
  "\020\001\022\025\n\rimagery_epoch\030\007 \001(\r\022!\n\031available_t"
  "exture_formats\030\010 \001(\r\022)\n!available_view_d"
  "ependent_textures\030\t \001(\r\0220\n(available_vie"
  "w_dependent_texture_formats\030\n \001(\r\"X\n\005Fla"
  "gs\022\017\n\013RICH3D_LEAF\020\001\022\021\n\rRICH3D_NODATA\020\002\022\010"
  "\n\004LEAF\020\004\022\n\n\006NODATA\020\010\022\025\n\021USE_IMAGERY_EPOC"
  "H\020\020\"\355\002\n\010NodeData\022\"\n\026matrix_globe_from_me"
  "sh\030\001 \003(\001B\002\020\001\0225\n\006meshes\030\002 \003(\0132%.geo_globe"
  "trotter_proto_rocktree.Mesh\022\025\n\rcopyright"
  "_ids\030\003 \003(\r\022:\n\010node_key\030\004 \001(\0132(.geo_globe"
  "trotter_proto_rocktree.NodeKey\022\034\n\020kml_bo"
  "unding_box\030\005 \003(\001B\002\020\001\0229\n\nwater_mesh\030\006 \001(\013"
  "2%.geo_globetrotter_proto_rocktree.Mesh\022"
  "E\n\026overlay_surface_meshes\030\007 \003(\0132%.geo_gl"
  "obetrotter_proto_rocktree.Mesh\022\023\n\013for_no"
  "rmals\030\010 \001(\014\"\241\005\n\004Mesh\022\020\n\010vertices\030\001 \001(\014\022\025"
  "\n\rvertex_alphas\030\t \001(\014\022\026\n\016texture_coords\030"
  "\002 \001(\014\022\017\n\007indices\030\003 \001(\014\022\025\n\roctant_ranges\030"
  "\004 \001(\014\022\024\n\014layer_counts\030\005 \001(\014\0229\n\007texture\030\006"
  " \003(\0132(.geo_globetrotter_proto_rocktree.T"
  "exture\022\033\n\023texture_coordinates\030\007 \001(\014\022\037\n\023u"
  "v_offset_and_scale\030\n \003(\002B\002\020\001\022\037\n\027layer_an"
  "d_octant_counts\030\010 \001(\014\022\017\n\007normals\030\013 \001(\014\022\023"
  "\n\013normals_dev\030\020 \001(\014\022\017\n\007mesh_id\030\014 \001(\r\022\023\n\013"
  "skirt_flags\030\r \001(\014\"\326\001\n\005Layer\022\016\n\nOVERGROUN"
  "D\020\000\022\027\n\023TERRAIN_BELOW_WATER\020\001\022\027\n\023TERRAIN_"
  "ABOVE_WATER\020\002\022\022\n\016TERRAIN_HIDDEN\020\003\022\t\n\005WAT"
  "ER\020\004\022\020\n\014WATER_SKIRTS\020\005\022\031\n\025WATER_SKIRTS_I"
  "NVERTED\020\006\022\023\n\017OVERLAY_SURFACE\020\007\022\032\n\026OVERLA"
  "Y_SURFACE_SKIRTS\020\010\022\016\n\nNUM_LAYERS\020\t\"[\n\tLa"
  "yerMask\022\033\n\027TERRAIN_WITH_OVERGROUND\020\007\022\026\n\022"
  "TERRAIN_WITH_WATER\020\034\022\031\n\025TERRAIN_WITHOUT_"
  "WATER\020\016\"\201\003\n\007Texture\022\014\n\004data\030\001 \003(\014\022\?\n\006for"
  "mat\030\002 \001(\0162/.geo_globetrotter_proto_rockt"
  "ree.Texture.Format\022\022\n\005width\030\003 \001(\r:\003256\022\023"
  "\n\006height\030\004 \001(\r:\003256\022N\n\016view_direction\030\005 "
  "\001(\01626.geo_globetrotter_proto_rocktree.Te"
  "xture.ViewDirection\022\017\n\007mesh_id\030\006 \001(\r\"K\n\006"
  "Format\022\007\n\003JPG\020\001\022\010\n\004DXT1\020\002\022\010\n\004ETC1\020\003\022\n\n\006P"
  "VRTC2\020\004\022\n\n\006PVRTC4\020\005\022\014\n\010CRN_DXT1\020\006\"P\n\rVie"
  "wDirection\022\t\n\005NADIR\020\000\022\014\n\010NORTH_45\020\001\022\013\n\007E"
  "AST_45\020\002\022\014\n\010SOUTH_45\020\003\022\013\n\007WEST_45\020\004\"\205\001\n\013"
  "TextureData\022:\n\010node_key\030\001 \001(\0132(.geo_glob"
  "etrotter_proto_rocktree.NodeKey\022:\n\010textu"
  "res\030\002 \003(\0132(.geo_globetrotter_proto_rockt"
  "ree.Texture\"L\n\nCopyrights\022>\n\ncopyrights\030"
  "\001 \003(\0132*.geo_globetrotter_proto_rocktree."
  "Copyright\"9\n\tCopyright\022\n\n\002id\030\001 \001(\r\022\014\n\004te"
  "xt\030\002 \001(\t\022\022\n\ntext_clean\030\003 \001(\t\"\252\001\n\021Planeto"
  "idMetadata\022I\n\022root_node_metadata\030\001 \001(\0132-"
  ".geo_globetrotter_proto_rocktree.NodeMet"
  "adata\022\016\n\006radius\030\002 \001(\002\022\034\n\024min_terrain_alt"
  "itude\030\003 \001(\002\022\034\n\024max_terrain_altitude\030\004 \001("
  "\002"
  ;
static ::_pbi::once_flag descriptor_table_rocktree_2eproto_once;
const ::_pbi::DescriptorTable descriptor_table_rocktree_2eproto = {
    false, false, 3321, descriptor_table_protodef_rocktree_2eproto,
    "rocktree.proto",
    &descriptor_table_rocktree_2eproto_once, nullptr, 0, 14,
    schemas, file_default_instances, TableStruct_rocktree_2eproto::offsets,
    file_level_metadata_rocktree_2eproto, file_level_enum_descriptors_rocktree_2eproto,
    file_level_service_descriptors_rocktree_2eproto,
};
PROTOBUF_ATTRIBUTE_WEAK const ::_pbi::DescriptorTable* descriptor_table_rocktree_2eproto_getter() {
  return &descriptor_table_rocktree_2eproto;
}

// Force running AddDescriptors() at dynamic initialization time.
PROTOBUF_ATTRIBUTE_INIT_PRIORITY2 static ::_pbi::AddDescriptorsRunner dynamic_init_dummy_rocktree_2eproto(&descriptor_table_rocktree_2eproto);
namespace geo_globetrotter_proto_rocktree {
const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* NodeMetadata_Flags_descriptor() {
  ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_rocktree_2eproto);
  return file_level_enum_descriptors_rocktree_2eproto[0];
}
bool NodeMetadata_Flags_IsValid(int value) {
  switch (value) {
    case 1:
    case 2:
    case 4:
    case 8:
    case 16:
      return true;
    default:
      return false;
  }
}

#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
constexpr NodeMetadata_Flags NodeMetadata::RICH3D_LEAF;
constexpr NodeMetadata_Flags NodeMetadata::RICH3D_NODATA;
constexpr NodeMetadata_Flags NodeMetadata::LEAF;
constexpr NodeMetadata_Flags NodeMetadata::NODATA;
constexpr NodeMetadata_Flags NodeMetadata::USE_IMAGERY_EPOCH;
constexpr NodeMetadata_Flags NodeMetadata::Flags_MIN;
constexpr NodeMetadata_Flags NodeMetadata::Flags_MAX;
constexpr int NodeMetadata::Flags_ARRAYSIZE;
#endif  // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Mesh_Layer_descriptor() {
  ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_rocktree_2eproto);
  return file_level_enum_descriptors_rocktree_2eproto[1];
}
bool Mesh_Layer_IsValid(int value) {
  switch (value) {
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
      return true;
    default:
      return false;
  }
}

#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
constexpr Mesh_Layer Mesh::OVERGROUND;
constexpr Mesh_Layer Mesh::TERRAIN_BELOW_WATER;
constexpr Mesh_Layer Mesh::TERRAIN_ABOVE_WATER;
constexpr Mesh_Layer Mesh::TERRAIN_HIDDEN;
constexpr Mesh_Layer Mesh::WATER;
constexpr Mesh_Layer Mesh::WATER_SKIRTS;
constexpr Mesh_Layer Mesh::WATER_SKIRTS_INVERTED;
constexpr Mesh_Layer Mesh::OVERLAY_SURFACE;
constexpr Mesh_Layer Mesh::OVERLAY_SURFACE_SKIRTS;
constexpr Mesh_Layer Mesh::NUM_LAYERS;
constexpr Mesh_Layer Mesh::Layer_MIN;
constexpr Mesh_Layer Mesh::Layer_MAX;
constexpr int Mesh::Layer_ARRAYSIZE;
#endif  // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Mesh_LayerMask_descriptor() {
  ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_rocktree_2eproto);
  return file_level_enum_descriptors_rocktree_2eproto[2];
}
bool Mesh_LayerMask_IsValid(int value) {
  switch (value) {
    case 7:
    case 14:
    case 28:
      return true;
    default:
      return false;
  }
}

#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
constexpr Mesh_LayerMask Mesh::TERRAIN_WITH_OVERGROUND;
constexpr Mesh_LayerMask Mesh::TERRAIN_WITH_WATER;
constexpr Mesh_LayerMask Mesh::TERRAIN_WITHOUT_WATER;
constexpr Mesh_LayerMask Mesh::LayerMask_MIN;
constexpr Mesh_LayerMask Mesh::LayerMask_MAX;
constexpr int Mesh::LayerMask_ARRAYSIZE;
#endif  // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Texture_Format_descriptor() {
  ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_rocktree_2eproto);
  return file_level_enum_descriptors_rocktree_2eproto[3];
}
bool Texture_Format_IsValid(int value) {
  switch (value) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
      return true;
    default:
      return false;
  }
}

#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
constexpr Texture_Format Texture::JPG;
constexpr Texture_Format Texture::DXT1;
constexpr Texture_Format Texture::ETC1;
constexpr Texture_Format Texture::PVRTC2;
constexpr Texture_Format Texture::PVRTC4;
constexpr Texture_Format Texture::CRN_DXT1;
constexpr Texture_Format Texture::Format_MIN;
constexpr Texture_Format Texture::Format_MAX;
constexpr int Texture::Format_ARRAYSIZE;
#endif  // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* Texture_ViewDirection_descriptor() {
  ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_rocktree_2eproto);
  return file_level_enum_descriptors_rocktree_2eproto[4];
}
bool Texture_ViewDirection_IsValid(int value) {
  switch (value) {
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
      return true;
    default:
      return false;
  }
}

#if (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))
constexpr Texture_ViewDirection Texture::NADIR;
constexpr Texture_ViewDirection Texture::NORTH_45;
constexpr Texture_ViewDirection Texture::EAST_45;
constexpr Texture_ViewDirection Texture::SOUTH_45;
constexpr Texture_ViewDirection Texture::WEST_45;
constexpr Texture_ViewDirection Texture::ViewDirection_MIN;
constexpr Texture_ViewDirection Texture::ViewDirection_MAX;
constexpr int Texture::ViewDirection_ARRAYSIZE;
#endif  // (__cplusplus < 201703) && (!defined(_MSC_VER) || (_MSC_VER >= 1900 && _MSC_VER < 1912))

// ===================================================================

class BulkMetadataRequest::_Internal {
 public:
  using HasBits = decltype(std::declval<BulkMetadataRequest>()._impl_._has_bits_);
  static const ::geo_globetrotter_proto_rocktree::NodeKey& node_key(const BulkMetadataRequest* msg);
  static void set_has_node_key(HasBits* has_bits) {
    (*has_bits)[0] |= 1u;
  }
};

const ::geo_globetrotter_proto_rocktree::NodeKey&
BulkMetadataRequest::_Internal::node_key(const BulkMetadataRequest* msg) {
  return *msg->_impl_.node_key_;
}
BulkMetadataRequest::BulkMetadataRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:geo_globetrotter_proto_rocktree.BulkMetadataRequest)
}
BulkMetadataRequest::BulkMetadataRequest(const BulkMetadataRequest& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  BulkMetadataRequest* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){from._impl_._has_bits_}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.node_key_){nullptr}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  if (from._internal_has_node_key()) {
    _this->_impl_.node_key_ = new ::geo_globetrotter_proto_rocktree::NodeKey(*from._impl_.node_key_);
  }
  // @@protoc_insertion_point(copy_constructor:geo_globetrotter_proto_rocktree.BulkMetadataRequest)
}

inline void BulkMetadataRequest::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.node_key_){nullptr}
  };
}

BulkMetadataRequest::~BulkMetadataRequest() {
  // @@protoc_insertion_point(destructor:geo_globetrotter_proto_rocktree.BulkMetadataRequest)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void BulkMetadataRequest::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  if (this != internal_default_instance()) delete _impl_.node_key_;
}

void BulkMetadataRequest::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void BulkMetadataRequest::Clear() {
// @@protoc_insertion_point(message_clear_start:geo_globetrotter_proto_rocktree.BulkMetadataRequest)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000001u) {
    GOOGLE_DCHECK(_impl_.node_key_ != nullptr);
    _impl_.node_key_->Clear();
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* BulkMetadataRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  _Internal::HasBits has_bits{};
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // optional .geo_globetrotter_proto_rocktree.NodeKey node_key = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          ptr = ctx->ParseMessage(_internal_mutable_node_key(), ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  _impl_._has_bits_.Or(has_bits);
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* BulkMetadataRequest::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:geo_globetrotter_proto_rocktree.BulkMetadataRequest)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  // optional .geo_globetrotter_proto_rocktree.NodeKey node_key = 1;
  if (cached_has_bits & 0x00000001u) {
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(1, _Internal::node_key(this),
        _Internal::node_key(this).GetCachedSize(), target, stream);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:geo_globetrotter_proto_rocktree.BulkMetadataRequest)
  return target;
}

size_t BulkMetadataRequest::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:geo_globetrotter_proto_rocktree.BulkMetadataRequest)
  size_t total_size = 0;

  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // optional .geo_globetrotter_proto_rocktree.NodeKey node_key = 1;
  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000001u) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
        *_impl_.node_key_);
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData BulkMetadataRequest::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    BulkMetadataRequest::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*BulkMetadataRequest::GetClassData() const { return &_class_data_; }


void BulkMetadataRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<BulkMetadataRequest*>(&to_msg);
  auto& from = static_cast<const BulkMetadataRequest&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:geo_globetrotter_proto_rocktree.BulkMetadataRequest)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  if (from._internal_has_node_key()) {
    _this->_internal_mutable_node_key()->::geo_globetrotter_proto_rocktree::NodeKey::MergeFrom(
        from._internal_node_key());
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

void BulkMetadataRequest::CopyFrom(const BulkMetadataRequest& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:geo_globetrotter_proto_rocktree.BulkMetadataRequest)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool BulkMetadataRequest::IsInitialized() const {
  return true;
}

void BulkMetadataRequest::InternalSwap(BulkMetadataRequest* other) {
  using std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  swap(_impl_.node_key_, other->_impl_.node_key_);
}

::PROTOBUF_NAMESPACE_ID::Metadata BulkMetadataRequest::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_rocktree_2eproto_getter, &descriptor_table_rocktree_2eproto_once,
      file_level_metadata_rocktree_2eproto[0]);
}

// ===================================================================

class NodeDataRequest::_Internal {
 public:
  using HasBits = decltype(std::declval<NodeDataRequest>()._impl_._has_bits_);
  static const ::geo_globetrotter_proto_rocktree::NodeKey& node_key(const NodeDataRequest* msg);
  static void set_has_node_key(HasBits* has_bits) {
    (*has_bits)[0] |= 1u;
  }
  static void set_has_texture_format(HasBits* has_bits) {
    (*has_bits)[0] |= 4u;
  }
  static void set_has_imagery_epoch(HasBits* has_bits) {
    (*has_bits)[0] |= 2u;
  }
};

const ::geo_globetrotter_proto_rocktree::NodeKey&
NodeDataRequest::_Internal::node_key(const NodeDataRequest* msg) {
  return *msg->_impl_.node_key_;
}
NodeDataRequest::NodeDataRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:geo_globetrotter_proto_rocktree.NodeDataRequest)
}
NodeDataRequest::NodeDataRequest(const NodeDataRequest& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  NodeDataRequest* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){from._impl_._has_bits_}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.node_key_){nullptr}
    , decltype(_impl_.imagery_epoch_){}
    , decltype(_impl_.texture_format_){}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  if (from._internal_has_node_key()) {
    _this->_impl_.node_key_ = new ::geo_globetrotter_proto_rocktree::NodeKey(*from._impl_.node_key_);
  }
  ::memcpy(&_impl_.imagery_epoch_, &from._impl_.imagery_epoch_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.texture_format_) -
    reinterpret_cast<char*>(&_impl_.imagery_epoch_)) + sizeof(_impl_.texture_format_));
  // @@protoc_insertion_point(copy_constructor:geo_globetrotter_proto_rocktree.NodeDataRequest)
}

inline void NodeDataRequest::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.node_key_){nullptr}
    , decltype(_impl_.imagery_epoch_){0u}
    , decltype(_impl_.texture_format_){1}
  };
}

NodeDataRequest::~NodeDataRequest() {
  // @@protoc_insertion_point(destructor:geo_globetrotter_proto_rocktree.NodeDataRequest)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void NodeDataRequest::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  if (this != internal_default_instance()) delete _impl_.node_key_;
}

void NodeDataRequest::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void NodeDataRequest::Clear() {
// @@protoc_insertion_point(message_clear_start:geo_globetrotter_proto_rocktree.NodeDataRequest)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000001u) {
    GOOGLE_DCHECK(_impl_.node_key_ != nullptr);
    _impl_.node_key_->Clear();
  }
  if (cached_has_bits & 0x00000006u) {
    _impl_.imagery_epoch_ = 0u;
    _impl_.texture_format_ = 1;
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* NodeDataRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  _Internal::HasBits has_bits{};
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // optional .geo_globetrotter_proto_rocktree.NodeKey node_key = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          ptr = ctx->ParseMessage(_internal_mutable_node_key(), ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional .geo_globetrotter_proto_rocktree.Texture.Format texture_format = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
          uint64_t val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
          CHK_(ptr);
          if (PROTOBUF_PREDICT_TRUE(::geo_globetrotter_proto_rocktree::Texture_Format_IsValid(val))) {
            _internal_set_texture_format(static_cast<::geo_globetrotter_proto_rocktree::Texture_Format>(val));
          } else {
            ::PROTOBUF_NAMESPACE_ID::internal::WriteVarint(2, val, mutable_unknown_fields());
          }
        } else
          goto handle_unusual;
        continue;
      // optional uint32 imagery_epoch = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
          _Internal::set_has_imagery_epoch(&has_bits);
          _impl_.imagery_epoch_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  _impl_._has_bits_.Or(has_bits);
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* NodeDataRequest::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:geo_globetrotter_proto_rocktree.NodeDataRequest)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  // optional .geo_globetrotter_proto_rocktree.NodeKey node_key = 1;
  if (cached_has_bits & 0x00000001u) {
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(1, _Internal::node_key(this),
        _Internal::node_key(this).GetCachedSize(), target, stream);
  }

  // optional .geo_globetrotter_proto_rocktree.Texture.Format texture_format = 2;
  if (cached_has_bits & 0x00000004u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteEnumToArray(
      2, this->_internal_texture_format(), target);
  }

  // optional uint32 imagery_epoch = 3;
  if (cached_has_bits & 0x00000002u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(3, this->_internal_imagery_epoch(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:geo_globetrotter_proto_rocktree.NodeDataRequest)
  return target;
}

size_t NodeDataRequest::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:geo_globetrotter_proto_rocktree.NodeDataRequest)
  size_t total_size = 0;

  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000007u) {
    // optional .geo_globetrotter_proto_rocktree.NodeKey node_key = 1;
    if (cached_has_bits & 0x00000001u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *_impl_.node_key_);
    }

    // optional uint32 imagery_epoch = 3;
    if (cached_has_bits & 0x00000002u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_imagery_epoch());
    }

    // optional .geo_globetrotter_proto_rocktree.Texture.Format texture_format = 2;
    if (cached_has_bits & 0x00000004u) {
      total_size += 1 +
        ::_pbi::WireFormatLite::EnumSize(this->_internal_texture_format());
    }

  }
  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData NodeDataRequest::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    NodeDataRequest::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*NodeDataRequest::GetClassData() const { return &_class_data_; }


void NodeDataRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<NodeDataRequest*>(&to_msg);
  auto& from = static_cast<const NodeDataRequest&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:geo_globetrotter_proto_rocktree.NodeDataRequest)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (cached_has_bits & 0x00000007u) {
    if (cached_has_bits & 0x00000001u) {
      _this->_internal_mutable_node_key()->::geo_globetrotter_proto_rocktree::NodeKey::MergeFrom(
          from._internal_node_key());
    }
    if (cached_has_bits & 0x00000002u) {
      _this->_impl_.imagery_epoch_ = from._impl_.imagery_epoch_;
    }
    if (cached_has_bits & 0x00000004u) {
      _this->_impl_.texture_format_ = from._impl_.texture_format_;
    }
    _this->_impl_._has_bits_[0] |= cached_has_bits;
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

void NodeDataRequest::CopyFrom(const NodeDataRequest& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:geo_globetrotter_proto_rocktree.NodeDataRequest)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool NodeDataRequest::IsInitialized() const {
  return true;
}

void NodeDataRequest::InternalSwap(NodeDataRequest* other) {
  using std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(NodeDataRequest, _impl_.imagery_epoch_)
      + sizeof(NodeDataRequest::_impl_.imagery_epoch_)
      - PROTOBUF_FIELD_OFFSET(NodeDataRequest, _impl_.node_key_)>(
          reinterpret_cast<char*>(&_impl_.node_key_),
          reinterpret_cast<char*>(&other->_impl_.node_key_));
  swap(_impl_.texture_format_, other->_impl_.texture_format_);
}

::PROTOBUF_NAMESPACE_ID::Metadata NodeDataRequest::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_rocktree_2eproto_getter, &descriptor_table_rocktree_2eproto_once,
      file_level_metadata_rocktree_2eproto[1]);
}

// ===================================================================

class NodeKey::_Internal {
 public:
  using HasBits = decltype(std::declval<NodeKey>()._impl_._has_bits_);
  static void set_has_path(HasBits* has_bits) {
    (*has_bits)[0] |= 1u;
  }
  static void set_has_epoch(HasBits* has_bits) {
    (*has_bits)[0] |= 2u;
  }
};

NodeKey::NodeKey(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:geo_globetrotter_proto_rocktree.NodeKey)
}
NodeKey::NodeKey(const NodeKey& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  NodeKey* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){from._impl_._has_bits_}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.path_){}
    , decltype(_impl_.epoch_){}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _impl_.path_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.path_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (from._internal_has_path()) {
    _this->_impl_.path_.Set(from._internal_path(), 
      _this->GetArenaForAllocation());
  }
  _this->_impl_.epoch_ = from._impl_.epoch_;
  // @@protoc_insertion_point(copy_constructor:geo_globetrotter_proto_rocktree.NodeKey)
}

inline void NodeKey::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.path_){}
    , decltype(_impl_.epoch_){0u}
  };
  _impl_.path_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.path_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}

NodeKey::~NodeKey() {
  // @@protoc_insertion_point(destructor:geo_globetrotter_proto_rocktree.NodeKey)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void NodeKey::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.path_.Destroy();
}

void NodeKey::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void NodeKey::Clear() {
// @@protoc_insertion_point(message_clear_start:geo_globetrotter_proto_rocktree.NodeKey)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000001u) {
    _impl_.path_.ClearNonDefaultToEmpty();
  }
  _impl_.epoch_ = 0u;
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* NodeKey::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  _Internal::HasBits has_bits{};
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // optional string path = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          auto str = _internal_mutable_path();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          #ifndef NDEBUG
          ::_pbi::VerifyUTF8(str, "geo_globetrotter_proto_rocktree.NodeKey.path");
          #endif  // !NDEBUG
        } else
          goto handle_unusual;
        continue;
      // optional uint32 epoch = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
          _Internal::set_has_epoch(&has_bits);
          _impl_.epoch_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  _impl_._has_bits_.Or(has_bits);
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* NodeKey::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:geo_globetrotter_proto_rocktree.NodeKey)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  // optional string path = 1;
  if (cached_has_bits & 0x00000001u) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::VerifyUTF8StringNamedField(
      this->_internal_path().data(), static_cast<int>(this->_internal_path().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SERIALIZE,
      "geo_globetrotter_proto_rocktree.NodeKey.path");
    target = stream->WriteStringMaybeAliased(
        1, this->_internal_path(), target);
  }

  // optional uint32 epoch = 2;
  if (cached_has_bits & 0x00000002u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(2, this->_internal_epoch(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:geo_globetrotter_proto_rocktree.NodeKey)
  return target;
}

size_t NodeKey::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:geo_globetrotter_proto_rocktree.NodeKey)
  size_t total_size = 0;

  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000003u) {
    // optional string path = 1;
    if (cached_has_bits & 0x00000001u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
          this->_internal_path());
    }

    // optional uint32 epoch = 2;
    if (cached_has_bits & 0x00000002u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_epoch());
    }

  }
  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData NodeKey::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    NodeKey::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*NodeKey::GetClassData() const { return &_class_data_; }


void NodeKey::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<NodeKey*>(&to_msg);
  auto& from = static_cast<const NodeKey&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:geo_globetrotter_proto_rocktree.NodeKey)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (cached_has_bits & 0x00000003u) {
    if (cached_has_bits & 0x00000001u) {
      _this->_internal_set_path(from._internal_path());
    }
    if (cached_has_bits & 0x00000002u) {
      _this->_impl_.epoch_ = from._impl_.epoch_;
    }
    _this->_impl_._has_bits_[0] |= cached_has_bits;
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

void NodeKey::CopyFrom(const NodeKey& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:geo_globetrotter_proto_rocktree.NodeKey)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool NodeKey::IsInitialized() const {
  return true;
}

void NodeKey::InternalSwap(NodeKey* other) {
  using std::swap;
  auto* lhs_arena = GetArenaForAllocation();
  auto* rhs_arena = other->GetArenaForAllocation();
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.path_, lhs_arena,
      &other->_impl_.path_, rhs_arena
  );
  swap(_impl_.epoch_, other->_impl_.epoch_);
}

::PROTOBUF_NAMESPACE_ID::Metadata NodeKey::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_rocktree_2eproto_getter, &descriptor_table_rocktree_2eproto_once,
      file_level_metadata_rocktree_2eproto[2]);
}

// ===================================================================

class CopyrightRequest::_Internal {
 public:
  using HasBits = decltype(std::declval<CopyrightRequest>()._impl_._has_bits_);
  static void set_has_epoch(HasBits* has_bits) {
    (*has_bits)[0] |= 1u;
  }
};

CopyrightRequest::CopyrightRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:geo_globetrotter_proto_rocktree.CopyrightRequest)
}
CopyrightRequest::CopyrightRequest(const CopyrightRequest& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  CopyrightRequest* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){from._impl_._has_bits_}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.epoch_){}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _this->_impl_.epoch_ = from._impl_.epoch_;
  // @@protoc_insertion_point(copy_constructor:geo_globetrotter_proto_rocktree.CopyrightRequest)
}

inline void CopyrightRequest::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.epoch_){0u}
  };
}

CopyrightRequest::~CopyrightRequest() {
  // @@protoc_insertion_point(destructor:geo_globetrotter_proto_rocktree.CopyrightRequest)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void CopyrightRequest::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
}

void CopyrightRequest::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void CopyrightRequest::Clear() {
// @@protoc_insertion_point(message_clear_start:geo_globetrotter_proto_rocktree.CopyrightRequest)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.epoch_ = 0u;
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* CopyrightRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  _Internal::HasBits has_bits{};
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // optional uint32 epoch = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 8)) {
          _Internal::set_has_epoch(&has_bits);
          _impl_.epoch_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  _impl_._has_bits_.Or(has_bits);
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* CopyrightRequest::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:geo_globetrotter_proto_rocktree.CopyrightRequest)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  // optional uint32 epoch = 1;
  if (cached_has_bits & 0x00000001u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(1, this->_internal_epoch(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:geo_globetrotter_proto_rocktree.CopyrightRequest)
  return target;
}

size_t CopyrightRequest::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:geo_globetrotter_proto_rocktree.CopyrightRequest)
  size_t total_size = 0;

  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // optional uint32 epoch = 1;
  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000001u) {
    total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_epoch());
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData CopyrightRequest::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    CopyrightRequest::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*CopyrightRequest::GetClassData() const { return &_class_data_; }


void CopyrightRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<CopyrightRequest*>(&to_msg);
  auto& from = static_cast<const CopyrightRequest&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:geo_globetrotter_proto_rocktree.CopyrightRequest)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  if (from._internal_has_epoch()) {
    _this->_internal_set_epoch(from._internal_epoch());
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

void CopyrightRequest::CopyFrom(const CopyrightRequest& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:geo_globetrotter_proto_rocktree.CopyrightRequest)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool CopyrightRequest::IsInitialized() const {
  return true;
}

void CopyrightRequest::InternalSwap(CopyrightRequest* other) {
  using std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  swap(_impl_.epoch_, other->_impl_.epoch_);
}

::PROTOBUF_NAMESPACE_ID::Metadata CopyrightRequest::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_rocktree_2eproto_getter, &descriptor_table_rocktree_2eproto_once,
      file_level_metadata_rocktree_2eproto[3]);
}

// ===================================================================

class TextureDataRequest::_Internal {
 public:
  using HasBits = decltype(std::declval<TextureDataRequest>()._impl_._has_bits_);
  static const ::geo_globetrotter_proto_rocktree::NodeKey& node_key(const TextureDataRequest* msg);
  static void set_has_node_key(HasBits* has_bits) {
    (*has_bits)[0] |= 1u;
  }
  static void set_has_texture_format(HasBits* has_bits) {
    (*has_bits)[0] |= 4u;
  }
  static void set_has_view_direction(HasBits* has_bits) {
    (*has_bits)[0] |= 2u;
  }
};

const ::geo_globetrotter_proto_rocktree::NodeKey&
TextureDataRequest::_Internal::node_key(const TextureDataRequest* msg) {
  return *msg->_impl_.node_key_;
}
TextureDataRequest::TextureDataRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:geo_globetrotter_proto_rocktree.TextureDataRequest)
}
TextureDataRequest::TextureDataRequest(const TextureDataRequest& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  TextureDataRequest* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){from._impl_._has_bits_}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.node_key_){nullptr}
    , decltype(_impl_.view_direction_){}
    , decltype(_impl_.texture_format_){}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  if (from._internal_has_node_key()) {
    _this->_impl_.node_key_ = new ::geo_globetrotter_proto_rocktree::NodeKey(*from._impl_.node_key_);
  }
  ::memcpy(&_impl_.view_direction_, &from._impl_.view_direction_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.texture_format_) -
    reinterpret_cast<char*>(&_impl_.view_direction_)) + sizeof(_impl_.texture_format_));
  // @@protoc_insertion_point(copy_constructor:geo_globetrotter_proto_rocktree.TextureDataRequest)
}

inline void TextureDataRequest::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.node_key_){nullptr}
    , decltype(_impl_.view_direction_){0}
    , decltype(_impl_.texture_format_){1}
  };
}

TextureDataRequest::~TextureDataRequest() {
  // @@protoc_insertion_point(destructor:geo_globetrotter_proto_rocktree.TextureDataRequest)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void TextureDataRequest::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  if (this != internal_default_instance()) delete _impl_.node_key_;
}

void TextureDataRequest::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void TextureDataRequest::Clear() {
// @@protoc_insertion_point(message_clear_start:geo_globetrotter_proto_rocktree.TextureDataRequest)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000001u) {
    GOOGLE_DCHECK(_impl_.node_key_ != nullptr);
    _impl_.node_key_->Clear();
  }
  if (cached_has_bits & 0x00000006u) {
    _impl_.view_direction_ = 0;
    _impl_.texture_format_ = 1;
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* TextureDataRequest::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  _Internal::HasBits has_bits{};
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // optional .geo_globetrotter_proto_rocktree.NodeKey node_key = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          ptr = ctx->ParseMessage(_internal_mutable_node_key(), ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional .geo_globetrotter_proto_rocktree.Texture.Format texture_format = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
          uint64_t val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
          CHK_(ptr);
          if (PROTOBUF_PREDICT_TRUE(::geo_globetrotter_proto_rocktree::Texture_Format_IsValid(val))) {
            _internal_set_texture_format(static_cast<::geo_globetrotter_proto_rocktree::Texture_Format>(val));
          } else {
            ::PROTOBUF_NAMESPACE_ID::internal::WriteVarint(2, val, mutable_unknown_fields());
          }
        } else
          goto handle_unusual;
        continue;
      // optional .geo_globetrotter_proto_rocktree.Texture.ViewDirection view_direction = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
          uint64_t val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
          CHK_(ptr);
          if (PROTOBUF_PREDICT_TRUE(::geo_globetrotter_proto_rocktree::Texture_ViewDirection_IsValid(val))) {
            _internal_set_view_direction(static_cast<::geo_globetrotter_proto_rocktree::Texture_ViewDirection>(val));
          } else {
            ::PROTOBUF_NAMESPACE_ID::internal::WriteVarint(3, val, mutable_unknown_fields());
          }
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  _impl_._has_bits_.Or(has_bits);
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* TextureDataRequest::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:geo_globetrotter_proto_rocktree.TextureDataRequest)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  // optional .geo_globetrotter_proto_rocktree.NodeKey node_key = 1;
  if (cached_has_bits & 0x00000001u) {
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(1, _Internal::node_key(this),
        _Internal::node_key(this).GetCachedSize(), target, stream);
  }

  // optional .geo_globetrotter_proto_rocktree.Texture.Format texture_format = 2;
  if (cached_has_bits & 0x00000004u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteEnumToArray(
      2, this->_internal_texture_format(), target);
  }

  // optional .geo_globetrotter_proto_rocktree.Texture.ViewDirection view_direction = 3;
  if (cached_has_bits & 0x00000002u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteEnumToArray(
      3, this->_internal_view_direction(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:geo_globetrotter_proto_rocktree.TextureDataRequest)
  return target;
}

size_t TextureDataRequest::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:geo_globetrotter_proto_rocktree.TextureDataRequest)
  size_t total_size = 0;

  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000007u) {
    // optional .geo_globetrotter_proto_rocktree.NodeKey node_key = 1;
    if (cached_has_bits & 0x00000001u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *_impl_.node_key_);
    }

    // optional .geo_globetrotter_proto_rocktree.Texture.ViewDirection view_direction = 3;
    if (cached_has_bits & 0x00000002u) {
      total_size += 1 +
        ::_pbi::WireFormatLite::EnumSize(this->_internal_view_direction());
    }

    // optional .geo_globetrotter_proto_rocktree.Texture.Format texture_format = 2;
    if (cached_has_bits & 0x00000004u) {
      total_size += 1 +
        ::_pbi::WireFormatLite::EnumSize(this->_internal_texture_format());
    }

  }
  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData TextureDataRequest::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    TextureDataRequest::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*TextureDataRequest::GetClassData() const { return &_class_data_; }


void TextureDataRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<TextureDataRequest*>(&to_msg);
  auto& from = static_cast<const TextureDataRequest&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:geo_globetrotter_proto_rocktree.TextureDataRequest)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (cached_has_bits & 0x00000007u) {
    if (cached_has_bits & 0x00000001u) {
      _this->_internal_mutable_node_key()->::geo_globetrotter_proto_rocktree::NodeKey::MergeFrom(
          from._internal_node_key());
    }
    if (cached_has_bits & 0x00000002u) {
      _this->_impl_.view_direction_ = from._impl_.view_direction_;
    }
    if (cached_has_bits & 0x00000004u) {
      _this->_impl_.texture_format_ = from._impl_.texture_format_;
    }
    _this->_impl_._has_bits_[0] |= cached_has_bits;
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

void TextureDataRequest::CopyFrom(const TextureDataRequest& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:geo_globetrotter_proto_rocktree.TextureDataRequest)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TextureDataRequest::IsInitialized() const {
  return true;
}

void TextureDataRequest::InternalSwap(TextureDataRequest* other) {
  using std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(TextureDataRequest, _impl_.view_direction_)
      + sizeof(TextureDataRequest::_impl_.view_direction_)
      - PROTOBUF_FIELD_OFFSET(TextureDataRequest, _impl_.node_key_)>(
          reinterpret_cast<char*>(&_impl_.node_key_),
          reinterpret_cast<char*>(&other->_impl_.node_key_));
  swap(_impl_.texture_format_, other->_impl_.texture_format_);
}

::PROTOBUF_NAMESPACE_ID::Metadata TextureDataRequest::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_rocktree_2eproto_getter, &descriptor_table_rocktree_2eproto_once,
      file_level_metadata_rocktree_2eproto[4]);
}

// ===================================================================

class BulkMetadata::_Internal {
 public:
  using HasBits = decltype(std::declval<BulkMetadata>()._impl_._has_bits_);
  static const ::geo_globetrotter_proto_rocktree::NodeKey& head_node_key(const BulkMetadata* msg);
  static void set_has_head_node_key(HasBits* has_bits) {
    (*has_bits)[0] |= 1u;
  }
  static void set_has_default_imagery_epoch(HasBits* has_bits) {
    (*has_bits)[0] |= 2u;
  }
  static void set_has_default_available_texture_formats(HasBits* has_bits) {
    (*has_bits)[0] |= 4u;
  }
  static void set_has_default_available_view_dependent_textures(HasBits* has_bits) {
    (*has_bits)[0] |= 8u;
  }
  static void set_has_default_available_view_dependent_texture_formats(HasBits* has_bits) {
    (*has_bits)[0] |= 16u;
  }
};

const ::geo_globetrotter_proto_rocktree::NodeKey&
BulkMetadata::_Internal::head_node_key(const BulkMetadata* msg) {
  return *msg->_impl_.head_node_key_;
}
BulkMetadata::BulkMetadata(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:geo_globetrotter_proto_rocktree.BulkMetadata)
}
BulkMetadata::BulkMetadata(const BulkMetadata& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  BulkMetadata* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){from._impl_._has_bits_}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.node_metadata_){from._impl_.node_metadata_}
    , decltype(_impl_.head_node_center_){from._impl_.head_node_center_}
    , decltype(_impl_.meters_per_texel_){from._impl_.meters_per_texel_}
    , decltype(_impl_.head_node_key_){nullptr}
    , decltype(_impl_.default_imagery_epoch_){}
    , decltype(_impl_.default_available_texture_formats_){}
    , decltype(_impl_.default_available_view_dependent_textures_){}
    , decltype(_impl_.default_available_view_dependent_texture_formats_){}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  if (from._internal_has_head_node_key()) {
    _this->_impl_.head_node_key_ = new ::geo_globetrotter_proto_rocktree::NodeKey(*from._impl_.head_node_key_);
  }
  ::memcpy(&_impl_.default_imagery_epoch_, &from._impl_.default_imagery_epoch_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.default_available_view_dependent_texture_formats_) -
    reinterpret_cast<char*>(&_impl_.default_imagery_epoch_)) + sizeof(_impl_.default_available_view_dependent_texture_formats_));
  // @@protoc_insertion_point(copy_constructor:geo_globetrotter_proto_rocktree.BulkMetadata)
}

inline void BulkMetadata::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.node_metadata_){arena}
    , decltype(_impl_.head_node_center_){arena}
    , decltype(_impl_.meters_per_texel_){arena}
    , decltype(_impl_.head_node_key_){nullptr}
    , decltype(_impl_.default_imagery_epoch_){0u}
    , decltype(_impl_.default_available_texture_formats_){0u}
    , decltype(_impl_.default_available_view_dependent_textures_){0u}
    , decltype(_impl_.default_available_view_dependent_texture_formats_){0u}
  };
}

BulkMetadata::~BulkMetadata() {
  // @@protoc_insertion_point(destructor:geo_globetrotter_proto_rocktree.BulkMetadata)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void BulkMetadata::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.node_metadata_.~RepeatedPtrField();
  _impl_.head_node_center_.~RepeatedField();
  _impl_.meters_per_texel_.~RepeatedField();
  if (this != internal_default_instance()) delete _impl_.head_node_key_;
}

void BulkMetadata::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void BulkMetadata::Clear() {
// @@protoc_insertion_point(message_clear_start:geo_globetrotter_proto_rocktree.BulkMetadata)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.node_metadata_.Clear();
  _impl_.head_node_center_.Clear();
  _impl_.meters_per_texel_.Clear();
  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000001u) {
    GOOGLE_DCHECK(_impl_.head_node_key_ != nullptr);
    _impl_.head_node_key_->Clear();
  }
  if (cached_has_bits & 0x0000001eu) {
    ::memset(&_impl_.default_imagery_epoch_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&_impl_.default_available_view_dependent_texture_formats_) -
        reinterpret_cast<char*>(&_impl_.default_imagery_epoch_)) + sizeof(_impl_.default_available_view_dependent_texture_formats_));
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* BulkMetadata::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  _Internal::HasBits has_bits{};
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // repeated .geo_globetrotter_proto_rocktree.NodeMetadata node_metadata = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_node_metadata(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr));
        } else
          goto handle_unusual;
        continue;
      // optional .geo_globetrotter_proto_rocktree.NodeKey head_node_key = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
          ptr = ctx->ParseMessage(_internal_mutable_head_node_key(), ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // repeated double head_node_center = 3 [packed = true];
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
          ptr = ::PROTOBUF_NAMESPACE_ID::internal::PackedDoubleParser(_internal_mutable_head_node_center(), ptr, ctx);
          CHK_(ptr);
        } else if (static_cast<uint8_t>(tag) == 25) {
          _internal_add_head_node_center(::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<double>(ptr));
          ptr += sizeof(double);
        } else
          goto handle_unusual;
        continue;
      // repeated float meters_per_texel = 4 [packed = true];
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 34)) {
          ptr = ::PROTOBUF_NAMESPACE_ID::internal::PackedFloatParser(_internal_mutable_meters_per_texel(), ptr, ctx);
          CHK_(ptr);
        } else if (static_cast<uint8_t>(tag) == 37) {
          _internal_add_meters_per_texel(::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr));
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      // optional uint32 default_imagery_epoch = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 40)) {
          _Internal::set_has_default_imagery_epoch(&has_bits);
          _impl_.default_imagery_epoch_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional uint32 default_available_texture_formats = 6;
      case 6:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 48)) {
          _Internal::set_has_default_available_texture_formats(&has_bits);
          _impl_.default_available_texture_formats_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional uint32 default_available_view_dependent_textures = 7;
      case 7:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 56)) {
          _Internal::set_has_default_available_view_dependent_textures(&has_bits);
          _impl_.default_available_view_dependent_textures_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional uint32 default_available_view_dependent_texture_formats = 8;
      case 8:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 64)) {
          _Internal::set_has_default_available_view_dependent_texture_formats(&has_bits);
          _impl_.default_available_view_dependent_texture_formats_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  _impl_._has_bits_.Or(has_bits);
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* BulkMetadata::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:geo_globetrotter_proto_rocktree.BulkMetadata)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated .geo_globetrotter_proto_rocktree.NodeMetadata node_metadata = 1;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_node_metadata_size()); i < n; i++) {
    const auto& repfield = this->_internal_node_metadata(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(1, repfield, repfield.GetCachedSize(), target, stream);
  }

  cached_has_bits = _impl_._has_bits_[0];
  // optional .geo_globetrotter_proto_rocktree.NodeKey head_node_key = 2;
  if (cached_has_bits & 0x00000001u) {
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(2, _Internal::head_node_key(this),
        _Internal::head_node_key(this).GetCachedSize(), target, stream);
  }

  // repeated double head_node_center = 3 [packed = true];
  if (this->_internal_head_node_center_size() > 0) {
    target = stream->WriteFixedPacked(3, _internal_head_node_center(), target);
  }

  // repeated float meters_per_texel = 4 [packed = true];
  if (this->_internal_meters_per_texel_size() > 0) {
    target = stream->WriteFixedPacked(4, _internal_meters_per_texel(), target);
  }

  // optional uint32 default_imagery_epoch = 5;
  if (cached_has_bits & 0x00000002u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(5, this->_internal_default_imagery_epoch(), target);
  }

  // optional uint32 default_available_texture_formats = 6;
  if (cached_has_bits & 0x00000004u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(6, this->_internal_default_available_texture_formats(), target);
  }

  // optional uint32 default_available_view_dependent_textures = 7;
  if (cached_has_bits & 0x00000008u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(7, this->_internal_default_available_view_dependent_textures(), target);
  }

  // optional uint32 default_available_view_dependent_texture_formats = 8;
  if (cached_has_bits & 0x00000010u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(8, this->_internal_default_available_view_dependent_texture_formats(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:geo_globetrotter_proto_rocktree.BulkMetadata)
  return target;
}

size_t BulkMetadata::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:geo_globetrotter_proto_rocktree.BulkMetadata)
  size_t total_size = 0;

  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // repeated .geo_globetrotter_proto_rocktree.NodeMetadata node_metadata = 1;
  total_size += 1UL * this->_internal_node_metadata_size();
  for (const auto& msg : this->_impl_.node_metadata_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  // repeated double head_node_center = 3 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->_internal_head_node_center_size());
    size_t data_size = 8UL * count;
    if (data_size > 0) {
      total_size += 1 +
        ::_pbi::WireFormatLite::Int32Size(static_cast<int32_t>(data_size));
    }
    total_size += data_size;
  }

  // repeated float meters_per_texel = 4 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->_internal_meters_per_texel_size());
    size_t data_size = 4UL * count;
    if (data_size > 0) {
      total_size += 1 +
        ::_pbi::WireFormatLite::Int32Size(static_cast<int32_t>(data_size));
    }
    total_size += data_size;
  }

  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x0000001fu) {
    // optional .geo_globetrotter_proto_rocktree.NodeKey head_node_key = 2;
    if (cached_has_bits & 0x00000001u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *_impl_.head_node_key_);
    }

    // optional uint32 default_imagery_epoch = 5;
    if (cached_has_bits & 0x00000002u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_default_imagery_epoch());
    }

    // optional uint32 default_available_texture_formats = 6;
    if (cached_has_bits & 0x00000004u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_default_available_texture_formats());
    }

    // optional uint32 default_available_view_dependent_textures = 7;
    if (cached_has_bits & 0x00000008u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_default_available_view_dependent_textures());
    }

    // optional uint32 default_available_view_dependent_texture_formats = 8;
    if (cached_has_bits & 0x00000010u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_default_available_view_dependent_texture_formats());
    }

  }
  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData BulkMetadata::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    BulkMetadata::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*BulkMetadata::GetClassData() const { return &_class_data_; }


void BulkMetadata::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<BulkMetadata*>(&to_msg);
  auto& from = static_cast<const BulkMetadata&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:geo_globetrotter_proto_rocktree.BulkMetadata)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  _this->_impl_.node_metadata_.MergeFrom(from._impl_.node_metadata_);
  _this->_impl_.head_node_center_.MergeFrom(from._impl_.head_node_center_);
  _this->_impl_.meters_per_texel_.MergeFrom(from._impl_.meters_per_texel_);
  cached_has_bits = from._impl_._has_bits_[0];
  if (cached_has_bits & 0x0000001fu) {
    if (cached_has_bits & 0x00000001u) {
      _this->_internal_mutable_head_node_key()->::geo_globetrotter_proto_rocktree::NodeKey::MergeFrom(
          from._internal_head_node_key());
    }
    if (cached_has_bits & 0x00000002u) {
      _this->_impl_.default_imagery_epoch_ = from._impl_.default_imagery_epoch_;
    }
    if (cached_has_bits & 0x00000004u) {
      _this->_impl_.default_available_texture_formats_ = from._impl_.default_available_texture_formats_;
    }
    if (cached_has_bits & 0x00000008u) {
      _this->_impl_.default_available_view_dependent_textures_ = from._impl_.default_available_view_dependent_textures_;
    }
    if (cached_has_bits & 0x00000010u) {
      _this->_impl_.default_available_view_dependent_texture_formats_ = from._impl_.default_available_view_dependent_texture_formats_;
    }
    _this->_impl_._has_bits_[0] |= cached_has_bits;
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

void BulkMetadata::CopyFrom(const BulkMetadata& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:geo_globetrotter_proto_rocktree.BulkMetadata)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool BulkMetadata::IsInitialized() const {
  return true;
}

void BulkMetadata::InternalSwap(BulkMetadata* other) {
  using std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  _impl_.node_metadata_.InternalSwap(&other->_impl_.node_metadata_);
  _impl_.head_node_center_.InternalSwap(&other->_impl_.head_node_center_);
  _impl_.meters_per_texel_.InternalSwap(&other->_impl_.meters_per_texel_);
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(BulkMetadata, _impl_.default_available_view_dependent_texture_formats_)
      + sizeof(BulkMetadata::_impl_.default_available_view_dependent_texture_formats_)
      - PROTOBUF_FIELD_OFFSET(BulkMetadata, _impl_.head_node_key_)>(
          reinterpret_cast<char*>(&_impl_.head_node_key_),
          reinterpret_cast<char*>(&other->_impl_.head_node_key_));
}

::PROTOBUF_NAMESPACE_ID::Metadata BulkMetadata::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_rocktree_2eproto_getter, &descriptor_table_rocktree_2eproto_once,
      file_level_metadata_rocktree_2eproto[5]);
}

// ===================================================================

class NodeMetadata::_Internal {
 public:
  using HasBits = decltype(std::declval<NodeMetadata>()._impl_._has_bits_);
  static void set_has_path_and_flags(HasBits* has_bits) {
    (*has_bits)[0] |= 2u;
  }
  static void set_has_epoch(HasBits* has_bits) {
    (*has_bits)[0] |= 4u;
  }
  static void set_has_bulk_metadata_epoch(HasBits* has_bits) {
    (*has_bits)[0] |= 16u;
  }
  static void set_has_oriented_bounding_box(HasBits* has_bits) {
    (*has_bits)[0] |= 1u;
  }
  static void set_has_meters_per_texel(HasBits* has_bits) {
    (*has_bits)[0] |= 8u;
  }
  static void set_has_imagery_epoch(HasBits* has_bits) {
    (*has_bits)[0] |= 32u;
  }
  static void set_has_available_texture_formats(HasBits* has_bits) {
    (*has_bits)[0] |= 64u;
  }
  static void set_has_available_view_dependent_textures(HasBits* has_bits) {
    (*has_bits)[0] |= 128u;
  }
  static void set_has_available_view_dependent_texture_formats(HasBits* has_bits) {
    (*has_bits)[0] |= 256u;
  }
};

NodeMetadata::NodeMetadata(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:geo_globetrotter_proto_rocktree.NodeMetadata)
}
NodeMetadata::NodeMetadata(const NodeMetadata& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  NodeMetadata* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){from._impl_._has_bits_}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.processing_oriented_bounding_box_){from._impl_.processing_oriented_bounding_box_}
    , decltype(_impl_.oriented_bounding_box_){}
    , decltype(_impl_.path_and_flags_){}
    , decltype(_impl_.epoch_){}
    , decltype(_impl_.meters_per_texel_){}
    , decltype(_impl_.bulk_metadata_epoch_){}
    , decltype(_impl_.imagery_epoch_){}
    , decltype(_impl_.available_texture_formats_){}
    , decltype(_impl_.available_view_dependent_textures_){}
    , decltype(_impl_.available_view_dependent_texture_formats_){}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _impl_.oriented_bounding_box_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.oriented_bounding_box_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (from._internal_has_oriented_bounding_box()) {
    _this->_impl_.oriented_bounding_box_.Set(from._internal_oriented_bounding_box(), 
      _this->GetArenaForAllocation());
  }
  ::memcpy(&_impl_.path_and_flags_, &from._impl_.path_and_flags_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.available_view_dependent_texture_formats_) -
    reinterpret_cast<char*>(&_impl_.path_and_flags_)) + sizeof(_impl_.available_view_dependent_texture_formats_));
  // @@protoc_insertion_point(copy_constructor:geo_globetrotter_proto_rocktree.NodeMetadata)
}

inline void NodeMetadata::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.processing_oriented_bounding_box_){arena}
    , decltype(_impl_.oriented_bounding_box_){}
    , decltype(_impl_.path_and_flags_){0u}
    , decltype(_impl_.epoch_){0u}
    , decltype(_impl_.meters_per_texel_){0}
    , decltype(_impl_.bulk_metadata_epoch_){0u}
    , decltype(_impl_.imagery_epoch_){0u}
    , decltype(_impl_.available_texture_formats_){0u}
    , decltype(_impl_.available_view_dependent_textures_){0u}
    , decltype(_impl_.available_view_dependent_texture_formats_){0u}
  };
  _impl_.oriented_bounding_box_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.oriented_bounding_box_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}

NodeMetadata::~NodeMetadata() {
  // @@protoc_insertion_point(destructor:geo_globetrotter_proto_rocktree.NodeMetadata)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void NodeMetadata::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.processing_oriented_bounding_box_.~RepeatedField();
  _impl_.oriented_bounding_box_.Destroy();
}

void NodeMetadata::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void NodeMetadata::Clear() {
// @@protoc_insertion_point(message_clear_start:geo_globetrotter_proto_rocktree.NodeMetadata)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.processing_oriented_bounding_box_.Clear();
  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000001u) {
    _impl_.oriented_bounding_box_.ClearNonDefaultToEmpty();
  }
  if (cached_has_bits & 0x000000feu) {
    ::memset(&_impl_.path_and_flags_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&_impl_.available_view_dependent_textures_) -
        reinterpret_cast<char*>(&_impl_.path_and_flags_)) + sizeof(_impl_.available_view_dependent_textures_));
  }
  _impl_.available_view_dependent_texture_formats_ = 0u;
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* NodeMetadata::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  _Internal::HasBits has_bits{};
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // optional uint32 path_and_flags = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 8)) {
          _Internal::set_has_path_and_flags(&has_bits);
          _impl_.path_and_flags_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional uint32 epoch = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
          _Internal::set_has_epoch(&has_bits);
          _impl_.epoch_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional bytes oriented_bounding_box = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
          auto str = _internal_mutable_oriented_bounding_box();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional float meters_per_texel = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 37)) {
          _Internal::set_has_meters_per_texel(&has_bits);
          _impl_.meters_per_texel_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      // optional uint32 bulk_metadata_epoch = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 40)) {
          _Internal::set_has_bulk_metadata_epoch(&has_bits);
          _impl_.bulk_metadata_epoch_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // repeated double processing_oriented_bounding_box = 6 [packed = true];
      case 6:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 50)) {
          ptr = ::PROTOBUF_NAMESPACE_ID::internal::PackedDoubleParser(_internal_mutable_processing_oriented_bounding_box(), ptr, ctx);
          CHK_(ptr);
        } else if (static_cast<uint8_t>(tag) == 49) {
          _internal_add_processing_oriented_bounding_box(::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<double>(ptr));
          ptr += sizeof(double);
        } else
          goto handle_unusual;
        continue;
      // optional uint32 imagery_epoch = 7;
      case 7:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 56)) {
          _Internal::set_has_imagery_epoch(&has_bits);
          _impl_.imagery_epoch_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional uint32 available_texture_formats = 8;
      case 8:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 64)) {
          _Internal::set_has_available_texture_formats(&has_bits);
          _impl_.available_texture_formats_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional uint32 available_view_dependent_textures = 9;
      case 9:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 72)) {
          _Internal::set_has_available_view_dependent_textures(&has_bits);
          _impl_.available_view_dependent_textures_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional uint32 available_view_dependent_texture_formats = 10;
      case 10:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 80)) {
          _Internal::set_has_available_view_dependent_texture_formats(&has_bits);
          _impl_.available_view_dependent_texture_formats_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  _impl_._has_bits_.Or(has_bits);
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* NodeMetadata::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:geo_globetrotter_proto_rocktree.NodeMetadata)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  // optional uint32 path_and_flags = 1;
  if (cached_has_bits & 0x00000002u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(1, this->_internal_path_and_flags(), target);
  }

  // optional uint32 epoch = 2;
  if (cached_has_bits & 0x00000004u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(2, this->_internal_epoch(), target);
  }

  // optional bytes oriented_bounding_box = 3;
  if (cached_has_bits & 0x00000001u) {
    target = stream->WriteBytesMaybeAliased(
        3, this->_internal_oriented_bounding_box(), target);
  }

  // optional float meters_per_texel = 4;
  if (cached_has_bits & 0x00000008u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(4, this->_internal_meters_per_texel(), target);
  }

  // optional uint32 bulk_metadata_epoch = 5;
  if (cached_has_bits & 0x00000010u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(5, this->_internal_bulk_metadata_epoch(), target);
  }

  // repeated double processing_oriented_bounding_box = 6 [packed = true];
  if (this->_internal_processing_oriented_bounding_box_size() > 0) {
    target = stream->WriteFixedPacked(6, _internal_processing_oriented_bounding_box(), target);
  }

  // optional uint32 imagery_epoch = 7;
  if (cached_has_bits & 0x00000020u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(7, this->_internal_imagery_epoch(), target);
  }

  // optional uint32 available_texture_formats = 8;
  if (cached_has_bits & 0x00000040u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(8, this->_internal_available_texture_formats(), target);
  }

  // optional uint32 available_view_dependent_textures = 9;
  if (cached_has_bits & 0x00000080u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(9, this->_internal_available_view_dependent_textures(), target);
  }

  // optional uint32 available_view_dependent_texture_formats = 10;
  if (cached_has_bits & 0x00000100u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(10, this->_internal_available_view_dependent_texture_formats(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:geo_globetrotter_proto_rocktree.NodeMetadata)
  return target;
}

size_t NodeMetadata::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:geo_globetrotter_proto_rocktree.NodeMetadata)
  size_t total_size = 0;

  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // repeated double processing_oriented_bounding_box = 6 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->_internal_processing_oriented_bounding_box_size());
    size_t data_size = 8UL * count;
    if (data_size > 0) {
      total_size += 1 +
        ::_pbi::WireFormatLite::Int32Size(static_cast<int32_t>(data_size));
    }
    total_size += data_size;
  }

  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x000000ffu) {
    // optional bytes oriented_bounding_box = 3;
    if (cached_has_bits & 0x00000001u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
          this->_internal_oriented_bounding_box());
    }

    // optional uint32 path_and_flags = 1;
    if (cached_has_bits & 0x00000002u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_path_and_flags());
    }

    // optional uint32 epoch = 2;
    if (cached_has_bits & 0x00000004u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_epoch());
    }

    // optional float meters_per_texel = 4;
    if (cached_has_bits & 0x00000008u) {
      total_size += 1 + 4;
    }

    // optional uint32 bulk_metadata_epoch = 5;
    if (cached_has_bits & 0x00000010u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_bulk_metadata_epoch());
    }

    // optional uint32 imagery_epoch = 7;
    if (cached_has_bits & 0x00000020u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_imagery_epoch());
    }

    // optional uint32 available_texture_formats = 8;
    if (cached_has_bits & 0x00000040u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_available_texture_formats());
    }

    // optional uint32 available_view_dependent_textures = 9;
    if (cached_has_bits & 0x00000080u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_available_view_dependent_textures());
    }

  }
  // optional uint32 available_view_dependent_texture_formats = 10;
  if (cached_has_bits & 0x00000100u) {
    total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_available_view_dependent_texture_formats());
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData NodeMetadata::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    NodeMetadata::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*NodeMetadata::GetClassData() const { return &_class_data_; }


void NodeMetadata::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<NodeMetadata*>(&to_msg);
  auto& from = static_cast<const NodeMetadata&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:geo_globetrotter_proto_rocktree.NodeMetadata)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  _this->_impl_.processing_oriented_bounding_box_.MergeFrom(from._impl_.processing_oriented_bounding_box_);
  cached_has_bits = from._impl_._has_bits_[0];
  if (cached_has_bits & 0x000000ffu) {
    if (cached_has_bits & 0x00000001u) {
      _this->_internal_set_oriented_bounding_box(from._internal_oriented_bounding_box());
    }
    if (cached_has_bits & 0x00000002u) {
      _this->_impl_.path_and_flags_ = from._impl_.path_and_flags_;
    }
    if (cached_has_bits & 0x00000004u) {
      _this->_impl_.epoch_ = from._impl_.epoch_;
    }
    if (cached_has_bits & 0x00000008u) {
      _this->_impl_.meters_per_texel_ = from._impl_.meters_per_texel_;
    }
    if (cached_has_bits & 0x00000010u) {
      _this->_impl_.bulk_metadata_epoch_ = from._impl_.bulk_metadata_epoch_;
    }
    if (cached_has_bits & 0x00000020u) {
      _this->_impl_.imagery_epoch_ = from._impl_.imagery_epoch_;
    }
    if (cached_has_bits & 0x00000040u) {
      _this->_impl_.available_texture_formats_ = from._impl_.available_texture_formats_;
    }
    if (cached_has_bits & 0x00000080u) {
      _this->_impl_.available_view_dependent_textures_ = from._impl_.available_view_dependent_textures_;
    }
    _this->_impl_._has_bits_[0] |= cached_has_bits;
  }
  if (cached_has_bits & 0x00000100u) {
    _this->_internal_set_available_view_dependent_texture_formats(from._internal_available_view_dependent_texture_formats());
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

void NodeMetadata::CopyFrom(const NodeMetadata& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:geo_globetrotter_proto_rocktree.NodeMetadata)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool NodeMetadata::IsInitialized() const {
  return true;
}

void NodeMetadata::InternalSwap(NodeMetadata* other) {
  using std::swap;
  auto* lhs_arena = GetArenaForAllocation();
  auto* rhs_arena = other->GetArenaForAllocation();
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  _impl_.processing_oriented_bounding_box_.InternalSwap(&other->_impl_.processing_oriented_bounding_box_);
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.oriented_bounding_box_, lhs_arena,
      &other->_impl_.oriented_bounding_box_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(NodeMetadata, _impl_.available_view_dependent_texture_formats_)
      + sizeof(NodeMetadata::_impl_.available_view_dependent_texture_formats_)
      - PROTOBUF_FIELD_OFFSET(NodeMetadata, _impl_.path_and_flags_)>(
          reinterpret_cast<char*>(&_impl_.path_and_flags_),
          reinterpret_cast<char*>(&other->_impl_.path_and_flags_));
}

::PROTOBUF_NAMESPACE_ID::Metadata NodeMetadata::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_rocktree_2eproto_getter, &descriptor_table_rocktree_2eproto_once,
      file_level_metadata_rocktree_2eproto[6]);
}

// ===================================================================

class NodeData::_Internal {
 public:
  using HasBits = decltype(std::declval<NodeData>()._impl_._has_bits_);
  static const ::geo_globetrotter_proto_rocktree::NodeKey& node_key(const NodeData* msg);
  static void set_has_node_key(HasBits* has_bits) {
    (*has_bits)[0] |= 2u;
  }
  static const ::geo_globetrotter_proto_rocktree::Mesh& water_mesh(const NodeData* msg);
  static void set_has_water_mesh(HasBits* has_bits) {
    (*has_bits)[0] |= 4u;
  }
  static void set_has_for_normals(HasBits* has_bits) {
    (*has_bits)[0] |= 1u;
  }
};

const ::geo_globetrotter_proto_rocktree::NodeKey&
NodeData::_Internal::node_key(const NodeData* msg) {
  return *msg->_impl_.node_key_;
}
const ::geo_globetrotter_proto_rocktree::Mesh&
NodeData::_Internal::water_mesh(const NodeData* msg) {
  return *msg->_impl_.water_mesh_;
}
NodeData::NodeData(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:geo_globetrotter_proto_rocktree.NodeData)
}
NodeData::NodeData(const NodeData& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  NodeData* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){from._impl_._has_bits_}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.matrix_globe_from_mesh_){from._impl_.matrix_globe_from_mesh_}
    , decltype(_impl_.meshes_){from._impl_.meshes_}
    , decltype(_impl_.copyright_ids_){from._impl_.copyright_ids_}
    , decltype(_impl_.kml_bounding_box_){from._impl_.kml_bounding_box_}
    , decltype(_impl_.overlay_surface_meshes_){from._impl_.overlay_surface_meshes_}
    , decltype(_impl_.for_normals_){}
    , decltype(_impl_.node_key_){nullptr}
    , decltype(_impl_.water_mesh_){nullptr}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _impl_.for_normals_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.for_normals_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (from._internal_has_for_normals()) {
    _this->_impl_.for_normals_.Set(from._internal_for_normals(), 
      _this->GetArenaForAllocation());
  }
  if (from._internal_has_node_key()) {
    _this->_impl_.node_key_ = new ::geo_globetrotter_proto_rocktree::NodeKey(*from._impl_.node_key_);
  }
  if (from._internal_has_water_mesh()) {
    _this->_impl_.water_mesh_ = new ::geo_globetrotter_proto_rocktree::Mesh(*from._impl_.water_mesh_);
  }
  // @@protoc_insertion_point(copy_constructor:geo_globetrotter_proto_rocktree.NodeData)
}

inline void NodeData::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.matrix_globe_from_mesh_){arena}
    , decltype(_impl_.meshes_){arena}
    , decltype(_impl_.copyright_ids_){arena}
    , decltype(_impl_.kml_bounding_box_){arena}
    , decltype(_impl_.overlay_surface_meshes_){arena}
    , decltype(_impl_.for_normals_){}
    , decltype(_impl_.node_key_){nullptr}
    , decltype(_impl_.water_mesh_){nullptr}
  };
  _impl_.for_normals_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.for_normals_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}

NodeData::~NodeData() {
  // @@protoc_insertion_point(destructor:geo_globetrotter_proto_rocktree.NodeData)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void NodeData::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.matrix_globe_from_mesh_.~RepeatedField();
  _impl_.meshes_.~RepeatedPtrField();
  _impl_.copyright_ids_.~RepeatedField();
  _impl_.kml_bounding_box_.~RepeatedField();
  _impl_.overlay_surface_meshes_.~RepeatedPtrField();
  _impl_.for_normals_.Destroy();
  if (this != internal_default_instance()) delete _impl_.node_key_;
  if (this != internal_default_instance()) delete _impl_.water_mesh_;
}

void NodeData::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void NodeData::Clear() {
// @@protoc_insertion_point(message_clear_start:geo_globetrotter_proto_rocktree.NodeData)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.matrix_globe_from_mesh_.Clear();
  _impl_.meshes_.Clear();
  _impl_.copyright_ids_.Clear();
  _impl_.kml_bounding_box_.Clear();
  _impl_.overlay_surface_meshes_.Clear();
  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000007u) {
    if (cached_has_bits & 0x00000001u) {
      _impl_.for_normals_.ClearNonDefaultToEmpty();
    }
    if (cached_has_bits & 0x00000002u) {
      GOOGLE_DCHECK(_impl_.node_key_ != nullptr);
      _impl_.node_key_->Clear();
    }
    if (cached_has_bits & 0x00000004u) {
      GOOGLE_DCHECK(_impl_.water_mesh_ != nullptr);
      _impl_.water_mesh_->Clear();
    }
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* NodeData::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  _Internal::HasBits has_bits{};
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // repeated double matrix_globe_from_mesh = 1 [packed = true];
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          ptr = ::PROTOBUF_NAMESPACE_ID::internal::PackedDoubleParser(_internal_mutable_matrix_globe_from_mesh(), ptr, ctx);
          CHK_(ptr);
        } else if (static_cast<uint8_t>(tag) == 9) {
          _internal_add_matrix_globe_from_mesh(::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<double>(ptr));
          ptr += sizeof(double);
        } else
          goto handle_unusual;
        continue;
      // repeated .geo_globetrotter_proto_rocktree.Mesh meshes = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_meshes(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<18>(ptr));
        } else
          goto handle_unusual;
        continue;
      // repeated uint32 copyright_ids = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
          ptr -= 1;
          do {
            ptr += 1;
            _internal_add_copyright_ids(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr));
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<24>(ptr));
        } else if (static_cast<uint8_t>(tag) == 26) {
          ptr = ::PROTOBUF_NAMESPACE_ID::internal::PackedUInt32Parser(_internal_mutable_copyright_ids(), ptr, ctx);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional .geo_globetrotter_proto_rocktree.NodeKey node_key = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 34)) {
          ptr = ctx->ParseMessage(_internal_mutable_node_key(), ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // repeated double kml_bounding_box = 5 [packed = true];
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
          ptr = ::PROTOBUF_NAMESPACE_ID::internal::PackedDoubleParser(_internal_mutable_kml_bounding_box(), ptr, ctx);
          CHK_(ptr);
        } else if (static_cast<uint8_t>(tag) == 41) {
          _internal_add_kml_bounding_box(::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<double>(ptr));
          ptr += sizeof(double);
        } else
          goto handle_unusual;
        continue;
      // optional .geo_globetrotter_proto_rocktree.Mesh water_mesh = 6;
      case 6:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 50)) {
          ptr = ctx->ParseMessage(_internal_mutable_water_mesh(), ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // repeated .geo_globetrotter_proto_rocktree.Mesh overlay_surface_meshes = 7;
      case 7:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 58)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_overlay_surface_meshes(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<58>(ptr));
        } else
          goto handle_unusual;
        continue;
      // optional bytes for_normals = 8;
      case 8:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 66)) {
          auto str = _internal_mutable_for_normals();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  _impl_._has_bits_.Or(has_bits);
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* NodeData::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:geo_globetrotter_proto_rocktree.NodeData)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated double matrix_globe_from_mesh = 1 [packed = true];
  if (this->_internal_matrix_globe_from_mesh_size() > 0) {
    target = stream->WriteFixedPacked(1, _internal_matrix_globe_from_mesh(), target);
  }

  // repeated .geo_globetrotter_proto_rocktree.Mesh meshes = 2;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_meshes_size()); i < n; i++) {
    const auto& repfield = this->_internal_meshes(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(2, repfield, repfield.GetCachedSize(), target, stream);
  }

  // repeated uint32 copyright_ids = 3;
  for (int i = 0, n = this->_internal_copyright_ids_size(); i < n; i++) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(3, this->_internal_copyright_ids(i), target);
  }

  cached_has_bits = _impl_._has_bits_[0];
  // optional .geo_globetrotter_proto_rocktree.NodeKey node_key = 4;
  if (cached_has_bits & 0x00000002u) {
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(4, _Internal::node_key(this),
        _Internal::node_key(this).GetCachedSize(), target, stream);
  }

  // repeated double kml_bounding_box = 5 [packed = true];
  if (this->_internal_kml_bounding_box_size() > 0) {
    target = stream->WriteFixedPacked(5, _internal_kml_bounding_box(), target);
  }

  // optional .geo_globetrotter_proto_rocktree.Mesh water_mesh = 6;
  if (cached_has_bits & 0x00000004u) {
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(6, _Internal::water_mesh(this),
        _Internal::water_mesh(this).GetCachedSize(), target, stream);
  }

  // repeated .geo_globetrotter_proto_rocktree.Mesh overlay_surface_meshes = 7;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_overlay_surface_meshes_size()); i < n; i++) {
    const auto& repfield = this->_internal_overlay_surface_meshes(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(7, repfield, repfield.GetCachedSize(), target, stream);
  }

  // optional bytes for_normals = 8;
  if (cached_has_bits & 0x00000001u) {
    target = stream->WriteBytesMaybeAliased(
        8, this->_internal_for_normals(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:geo_globetrotter_proto_rocktree.NodeData)
  return target;
}

size_t NodeData::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:geo_globetrotter_proto_rocktree.NodeData)
  size_t total_size = 0;

  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // repeated double matrix_globe_from_mesh = 1 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->_internal_matrix_globe_from_mesh_size());
    size_t data_size = 8UL * count;
    if (data_size > 0) {
      total_size += 1 +
        ::_pbi::WireFormatLite::Int32Size(static_cast<int32_t>(data_size));
    }
    total_size += data_size;
  }

  // repeated .geo_globetrotter_proto_rocktree.Mesh meshes = 2;
  total_size += 1UL * this->_internal_meshes_size();
  for (const auto& msg : this->_impl_.meshes_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  // repeated uint32 copyright_ids = 3;
  {
    size_t data_size = ::_pbi::WireFormatLite::
      UInt32Size(this->_impl_.copyright_ids_);
    total_size += 1 *
                  ::_pbi::FromIntSize(this->_internal_copyright_ids_size());
    total_size += data_size;
  }

  // repeated double kml_bounding_box = 5 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->_internal_kml_bounding_box_size());
    size_t data_size = 8UL * count;
    if (data_size > 0) {
      total_size += 1 +
        ::_pbi::WireFormatLite::Int32Size(static_cast<int32_t>(data_size));
    }
    total_size += data_size;
  }

  // repeated .geo_globetrotter_proto_rocktree.Mesh overlay_surface_meshes = 7;
  total_size += 1UL * this->_internal_overlay_surface_meshes_size();
  for (const auto& msg : this->_impl_.overlay_surface_meshes_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000007u) {
    // optional bytes for_normals = 8;
    if (cached_has_bits & 0x00000001u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
          this->_internal_for_normals());
    }

    // optional .geo_globetrotter_proto_rocktree.NodeKey node_key = 4;
    if (cached_has_bits & 0x00000002u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *_impl_.node_key_);
    }

    // optional .geo_globetrotter_proto_rocktree.Mesh water_mesh = 6;
    if (cached_has_bits & 0x00000004u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *_impl_.water_mesh_);
    }

  }
  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData NodeData::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    NodeData::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*NodeData::GetClassData() const { return &_class_data_; }


void NodeData::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<NodeData*>(&to_msg);
  auto& from = static_cast<const NodeData&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:geo_globetrotter_proto_rocktree.NodeData)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  _this->_impl_.matrix_globe_from_mesh_.MergeFrom(from._impl_.matrix_globe_from_mesh_);
  _this->_impl_.meshes_.MergeFrom(from._impl_.meshes_);
  _this->_impl_.copyright_ids_.MergeFrom(from._impl_.copyright_ids_);
  _this->_impl_.kml_bounding_box_.MergeFrom(from._impl_.kml_bounding_box_);
  _this->_impl_.overlay_surface_meshes_.MergeFrom(from._impl_.overlay_surface_meshes_);
  cached_has_bits = from._impl_._has_bits_[0];
  if (cached_has_bits & 0x00000007u) {
    if (cached_has_bits & 0x00000001u) {
      _this->_internal_set_for_normals(from._internal_for_normals());
    }
    if (cached_has_bits & 0x00000002u) {
      _this->_internal_mutable_node_key()->::geo_globetrotter_proto_rocktree::NodeKey::MergeFrom(
          from._internal_node_key());
    }
    if (cached_has_bits & 0x00000004u) {
      _this->_internal_mutable_water_mesh()->::geo_globetrotter_proto_rocktree::Mesh::MergeFrom(
          from._internal_water_mesh());
    }
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

void NodeData::CopyFrom(const NodeData& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:geo_globetrotter_proto_rocktree.NodeData)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool NodeData::IsInitialized() const {
  return true;
}

void NodeData::InternalSwap(NodeData* other) {
  using std::swap;
  auto* lhs_arena = GetArenaForAllocation();
  auto* rhs_arena = other->GetArenaForAllocation();
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  _impl_.matrix_globe_from_mesh_.InternalSwap(&other->_impl_.matrix_globe_from_mesh_);
  _impl_.meshes_.InternalSwap(&other->_impl_.meshes_);
  _impl_.copyright_ids_.InternalSwap(&other->_impl_.copyright_ids_);
  _impl_.kml_bounding_box_.InternalSwap(&other->_impl_.kml_bounding_box_);
  _impl_.overlay_surface_meshes_.InternalSwap(&other->_impl_.overlay_surface_meshes_);
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.for_normals_, lhs_arena,
      &other->_impl_.for_normals_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(NodeData, _impl_.water_mesh_)
      + sizeof(NodeData::_impl_.water_mesh_)
      - PROTOBUF_FIELD_OFFSET(NodeData, _impl_.node_key_)>(
          reinterpret_cast<char*>(&_impl_.node_key_),
          reinterpret_cast<char*>(&other->_impl_.node_key_));
}

::PROTOBUF_NAMESPACE_ID::Metadata NodeData::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_rocktree_2eproto_getter, &descriptor_table_rocktree_2eproto_once,
      file_level_metadata_rocktree_2eproto[7]);
}

// ===================================================================

class Mesh::_Internal {
 public:
  using HasBits = decltype(std::declval<Mesh>()._impl_._has_bits_);
  static void set_has_vertices(HasBits* has_bits) {
    (*has_bits)[0] |= 1u;
  }
  static void set_has_vertex_alphas(HasBits* has_bits) {
    (*has_bits)[0] |= 128u;
  }
  static void set_has_texture_coords(HasBits* has_bits) {
    (*has_bits)[0] |= 2u;
  }
  static void set_has_indices(HasBits* has_bits) {
    (*has_bits)[0] |= 4u;
  }
  static void set_has_octant_ranges(HasBits* has_bits) {
    (*has_bits)[0] |= 8u;
  }
  static void set_has_layer_counts(HasBits* has_bits) {
    (*has_bits)[0] |= 16u;
  }
  static void set_has_texture_coordinates(HasBits* has_bits) {
    (*has_bits)[0] |= 32u;
  }
  static void set_has_layer_and_octant_counts(HasBits* has_bits) {
    (*has_bits)[0] |= 64u;
  }
  static void set_has_normals(HasBits* has_bits) {
    (*has_bits)[0] |= 256u;
  }
  static void set_has_normals_dev(HasBits* has_bits) {
    (*has_bits)[0] |= 1024u;
  }
  static void set_has_mesh_id(HasBits* has_bits) {
    (*has_bits)[0] |= 2048u;
  }
  static void set_has_skirt_flags(HasBits* has_bits) {
    (*has_bits)[0] |= 512u;
  }
};

Mesh::Mesh(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:geo_globetrotter_proto_rocktree.Mesh)
}
Mesh::Mesh(const Mesh& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  Mesh* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){from._impl_._has_bits_}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.texture_){from._impl_.texture_}
    , decltype(_impl_.uv_offset_and_scale_){from._impl_.uv_offset_and_scale_}
    , decltype(_impl_.vertices_){}
    , decltype(_impl_.texture_coords_){}
    , decltype(_impl_.indices_){}
    , decltype(_impl_.octant_ranges_){}
    , decltype(_impl_.layer_counts_){}
    , decltype(_impl_.texture_coordinates_){}
    , decltype(_impl_.layer_and_octant_counts_){}
    , decltype(_impl_.vertex_alphas_){}
    , decltype(_impl_.normals_){}
    , decltype(_impl_.skirt_flags_){}
    , decltype(_impl_.normals_dev_){}
    , decltype(_impl_.mesh_id_){}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _impl_.vertices_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.vertices_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (from._internal_has_vertices()) {
    _this->_impl_.vertices_.Set(from._internal_vertices(), 
      _this->GetArenaForAllocation());
  }
  _impl_.texture_coords_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.texture_coords_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (from._internal_has_texture_coords()) {
    _this->_impl_.texture_coords_.Set(from._internal_texture_coords(), 
      _this->GetArenaForAllocation());
  }
  _impl_.indices_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.indices_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (from._internal_has_indices()) {
    _this->_impl_.indices_.Set(from._internal_indices(), 
      _this->GetArenaForAllocation());
  }
  _impl_.octant_ranges_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.octant_ranges_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (from._internal_has_octant_ranges()) {
    _this->_impl_.octant_ranges_.Set(from._internal_octant_ranges(), 
      _this->GetArenaForAllocation());
  }
  _impl_.layer_counts_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.layer_counts_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (from._internal_has_layer_counts()) {
    _this->_impl_.layer_counts_.Set(from._internal_layer_counts(), 
      _this->GetArenaForAllocation());
  }
  _impl_.texture_coordinates_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.texture_coordinates_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (from._internal_has_texture_coordinates()) {
    _this->_impl_.texture_coordinates_.Set(from._internal_texture_coordinates(), 
      _this->GetArenaForAllocation());
  }
  _impl_.layer_and_octant_counts_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.layer_and_octant_counts_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (from._internal_has_layer_and_octant_counts()) {
    _this->_impl_.layer_and_octant_counts_.Set(from._internal_layer_and_octant_counts(), 
      _this->GetArenaForAllocation());
  }
  _impl_.vertex_alphas_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.vertex_alphas_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (from._internal_has_vertex_alphas()) {
    _this->_impl_.vertex_alphas_.Set(from._internal_vertex_alphas(), 
      _this->GetArenaForAllocation());
  }
  _impl_.normals_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.normals_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (from._internal_has_normals()) {
    _this->_impl_.normals_.Set(from._internal_normals(), 
      _this->GetArenaForAllocation());
  }
  _impl_.skirt_flags_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.skirt_flags_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (from._internal_has_skirt_flags()) {
    _this->_impl_.skirt_flags_.Set(from._internal_skirt_flags(), 
      _this->GetArenaForAllocation());
  }
  _impl_.normals_dev_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.normals_dev_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (from._internal_has_normals_dev()) {
    _this->_impl_.normals_dev_.Set(from._internal_normals_dev(), 
      _this->GetArenaForAllocation());
  }
  _this->_impl_.mesh_id_ = from._impl_.mesh_id_;
  // @@protoc_insertion_point(copy_constructor:geo_globetrotter_proto_rocktree.Mesh)
}

inline void Mesh::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.texture_){arena}
    , decltype(_impl_.uv_offset_and_scale_){arena}
    , decltype(_impl_.vertices_){}
    , decltype(_impl_.texture_coords_){}
    , decltype(_impl_.indices_){}
    , decltype(_impl_.octant_ranges_){}
    , decltype(_impl_.layer_counts_){}
    , decltype(_impl_.texture_coordinates_){}
    , decltype(_impl_.layer_and_octant_counts_){}
    , decltype(_impl_.vertex_alphas_){}
    , decltype(_impl_.normals_){}
    , decltype(_impl_.skirt_flags_){}
    , decltype(_impl_.normals_dev_){}
    , decltype(_impl_.mesh_id_){0u}
  };
  _impl_.vertices_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.vertices_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.texture_coords_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.texture_coords_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.indices_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.indices_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.octant_ranges_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.octant_ranges_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.layer_counts_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.layer_counts_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.texture_coordinates_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.texture_coordinates_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.layer_and_octant_counts_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.layer_and_octant_counts_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.vertex_alphas_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.vertex_alphas_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.normals_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.normals_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.skirt_flags_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.skirt_flags_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.normals_dev_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.normals_dev_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}

Mesh::~Mesh() {
  // @@protoc_insertion_point(destructor:geo_globetrotter_proto_rocktree.Mesh)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void Mesh::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.texture_.~RepeatedPtrField();
  _impl_.uv_offset_and_scale_.~RepeatedField();
  _impl_.vertices_.Destroy();
  _impl_.texture_coords_.Destroy();
  _impl_.indices_.Destroy();
  _impl_.octant_ranges_.Destroy();
  _impl_.layer_counts_.Destroy();
  _impl_.texture_coordinates_.Destroy();
  _impl_.layer_and_octant_counts_.Destroy();
  _impl_.vertex_alphas_.Destroy();
  _impl_.normals_.Destroy();
  _impl_.skirt_flags_.Destroy();
  _impl_.normals_dev_.Destroy();
}

void Mesh::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void Mesh::Clear() {
// @@protoc_insertion_point(message_clear_start:geo_globetrotter_proto_rocktree.Mesh)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.texture_.Clear();
  _impl_.uv_offset_and_scale_.Clear();
  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x000000ffu) {
    if (cached_has_bits & 0x00000001u) {
      _impl_.vertices_.ClearNonDefaultToEmpty();
    }
    if (cached_has_bits & 0x00000002u) {
      _impl_.texture_coords_.ClearNonDefaultToEmpty();
    }
    if (cached_has_bits & 0x00000004u) {
      _impl_.indices_.ClearNonDefaultToEmpty();
    }
    if (cached_has_bits & 0x00000008u) {
      _impl_.octant_ranges_.ClearNonDefaultToEmpty();
    }
    if (cached_has_bits & 0x00000010u) {
      _impl_.layer_counts_.ClearNonDefaultToEmpty();
    }
    if (cached_has_bits & 0x00000020u) {
      _impl_.texture_coordinates_.ClearNonDefaultToEmpty();
    }
    if (cached_has_bits & 0x00000040u) {
      _impl_.layer_and_octant_counts_.ClearNonDefaultToEmpty();
    }
    if (cached_has_bits & 0x00000080u) {
      _impl_.vertex_alphas_.ClearNonDefaultToEmpty();
    }
  }
  if (cached_has_bits & 0x00000700u) {
    if (cached_has_bits & 0x00000100u) {
      _impl_.normals_.ClearNonDefaultToEmpty();
    }
    if (cached_has_bits & 0x00000200u) {
      _impl_.skirt_flags_.ClearNonDefaultToEmpty();
    }
    if (cached_has_bits & 0x00000400u) {
      _impl_.normals_dev_.ClearNonDefaultToEmpty();
    }
  }
  _impl_.mesh_id_ = 0u;
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* Mesh::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  _Internal::HasBits has_bits{};
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // optional bytes vertices = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          auto str = _internal_mutable_vertices();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional bytes texture_coords = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
          auto str = _internal_mutable_texture_coords();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional bytes indices = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
          auto str = _internal_mutable_indices();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional bytes octant_ranges = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 34)) {
          auto str = _internal_mutable_octant_ranges();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional bytes layer_counts = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 42)) {
          auto str = _internal_mutable_layer_counts();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // repeated .geo_globetrotter_proto_rocktree.Texture texture = 6;
      case 6:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 50)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_texture(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<50>(ptr));
        } else
          goto handle_unusual;
        continue;
      // optional bytes texture_coordinates = 7;
      case 7:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 58)) {
          auto str = _internal_mutable_texture_coordinates();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional bytes layer_and_octant_counts = 8;
      case 8:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 66)) {
          auto str = _internal_mutable_layer_and_octant_counts();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional bytes vertex_alphas = 9;
      case 9:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 74)) {
          auto str = _internal_mutable_vertex_alphas();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // repeated float uv_offset_and_scale = 10 [packed = true];
      case 10:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 82)) {
          ptr = ::PROTOBUF_NAMESPACE_ID::internal::PackedFloatParser(_internal_mutable_uv_offset_and_scale(), ptr, ctx);
          CHK_(ptr);
        } else if (static_cast<uint8_t>(tag) == 85) {
          _internal_add_uv_offset_and_scale(::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr));
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      // optional bytes normals = 11;
      case 11:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 90)) {
          auto str = _internal_mutable_normals();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional uint32 mesh_id = 12;
      case 12:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 96)) {
          _Internal::set_has_mesh_id(&has_bits);
          _impl_.mesh_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional bytes skirt_flags = 13;
      case 13:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 106)) {
          auto str = _internal_mutable_skirt_flags();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional bytes normals_dev = 16;
      case 16:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 130)) {
          auto str = _internal_mutable_normals_dev();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  _impl_._has_bits_.Or(has_bits);
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* Mesh::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:geo_globetrotter_proto_rocktree.Mesh)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  // optional bytes vertices = 1;
  if (cached_has_bits & 0x00000001u) {
    target = stream->WriteBytesMaybeAliased(
        1, this->_internal_vertices(), target);
  }

  // optional bytes texture_coords = 2;
  if (cached_has_bits & 0x00000002u) {
    target = stream->WriteBytesMaybeAliased(
        2, this->_internal_texture_coords(), target);
  }

  // optional bytes indices = 3;
  if (cached_has_bits & 0x00000004u) {
    target = stream->WriteBytesMaybeAliased(
        3, this->_internal_indices(), target);
  }

  // optional bytes octant_ranges = 4;
  if (cached_has_bits & 0x00000008u) {
    target = stream->WriteBytesMaybeAliased(
        4, this->_internal_octant_ranges(), target);
  }

  // optional bytes layer_counts = 5;
  if (cached_has_bits & 0x00000010u) {
    target = stream->WriteBytesMaybeAliased(
        5, this->_internal_layer_counts(), target);
  }

  // repeated .geo_globetrotter_proto_rocktree.Texture texture = 6;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_texture_size()); i < n; i++) {
    const auto& repfield = this->_internal_texture(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(6, repfield, repfield.GetCachedSize(), target, stream);
  }

  // optional bytes texture_coordinates = 7;
  if (cached_has_bits & 0x00000020u) {
    target = stream->WriteBytesMaybeAliased(
        7, this->_internal_texture_coordinates(), target);
  }

  // optional bytes layer_and_octant_counts = 8;
  if (cached_has_bits & 0x00000040u) {
    target = stream->WriteBytesMaybeAliased(
        8, this->_internal_layer_and_octant_counts(), target);
  }

  // optional bytes vertex_alphas = 9;
  if (cached_has_bits & 0x00000080u) {
    target = stream->WriteBytesMaybeAliased(
        9, this->_internal_vertex_alphas(), target);
  }

  // repeated float uv_offset_and_scale = 10 [packed = true];
  if (this->_internal_uv_offset_and_scale_size() > 0) {
    target = stream->WriteFixedPacked(10, _internal_uv_offset_and_scale(), target);
  }

  // optional bytes normals = 11;
  if (cached_has_bits & 0x00000100u) {
    target = stream->WriteBytesMaybeAliased(
        11, this->_internal_normals(), target);
  }

  // optional uint32 mesh_id = 12;
  if (cached_has_bits & 0x00000800u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(12, this->_internal_mesh_id(), target);
  }

  // optional bytes skirt_flags = 13;
  if (cached_has_bits & 0x00000200u) {
    target = stream->WriteBytesMaybeAliased(
        13, this->_internal_skirt_flags(), target);
  }

  // optional bytes normals_dev = 16;
  if (cached_has_bits & 0x00000400u) {
    target = stream->WriteBytesMaybeAliased(
        16, this->_internal_normals_dev(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:geo_globetrotter_proto_rocktree.Mesh)
  return target;
}

size_t Mesh::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:geo_globetrotter_proto_rocktree.Mesh)
  size_t total_size = 0;

  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // repeated .geo_globetrotter_proto_rocktree.Texture texture = 6;
  total_size += 1UL * this->_internal_texture_size();
  for (const auto& msg : this->_impl_.texture_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  // repeated float uv_offset_and_scale = 10 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->_internal_uv_offset_and_scale_size());
    size_t data_size = 4UL * count;
    if (data_size > 0) {
      total_size += 1 +
        ::_pbi::WireFormatLite::Int32Size(static_cast<int32_t>(data_size));
    }
    total_size += data_size;
  }

  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x000000ffu) {
    // optional bytes vertices = 1;
    if (cached_has_bits & 0x00000001u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
          this->_internal_vertices());
    }

    // optional bytes texture_coords = 2;
    if (cached_has_bits & 0x00000002u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
          this->_internal_texture_coords());
    }

    // optional bytes indices = 3;
    if (cached_has_bits & 0x00000004u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
          this->_internal_indices());
    }

    // optional bytes octant_ranges = 4;
    if (cached_has_bits & 0x00000008u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
          this->_internal_octant_ranges());
    }

    // optional bytes layer_counts = 5;
    if (cached_has_bits & 0x00000010u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
          this->_internal_layer_counts());
    }

    // optional bytes texture_coordinates = 7;
    if (cached_has_bits & 0x00000020u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
          this->_internal_texture_coordinates());
    }

    // optional bytes layer_and_octant_counts = 8;
    if (cached_has_bits & 0x00000040u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
          this->_internal_layer_and_octant_counts());
    }

    // optional bytes vertex_alphas = 9;
    if (cached_has_bits & 0x00000080u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
          this->_internal_vertex_alphas());
    }

  }
  if (cached_has_bits & 0x00000f00u) {
    // optional bytes normals = 11;
    if (cached_has_bits & 0x00000100u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
          this->_internal_normals());
    }

    // optional bytes skirt_flags = 13;
    if (cached_has_bits & 0x00000200u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
          this->_internal_skirt_flags());
    }

    // optional bytes normals_dev = 16;
    if (cached_has_bits & 0x00000400u) {
      total_size += 2 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
          this->_internal_normals_dev());
    }

    // optional uint32 mesh_id = 12;
    if (cached_has_bits & 0x00000800u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_mesh_id());
    }

  }
  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Mesh::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    Mesh::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Mesh::GetClassData() const { return &_class_data_; }


void Mesh::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<Mesh*>(&to_msg);
  auto& from = static_cast<const Mesh&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:geo_globetrotter_proto_rocktree.Mesh)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  _this->_impl_.texture_.MergeFrom(from._impl_.texture_);
  _this->_impl_.uv_offset_and_scale_.MergeFrom(from._impl_.uv_offset_and_scale_);
  cached_has_bits = from._impl_._has_bits_[0];
  if (cached_has_bits & 0x000000ffu) {
    if (cached_has_bits & 0x00000001u) {
      _this->_internal_set_vertices(from._internal_vertices());
    }
    if (cached_has_bits & 0x00000002u) {
      _this->_internal_set_texture_coords(from._internal_texture_coords());
    }
    if (cached_has_bits & 0x00000004u) {
      _this->_internal_set_indices(from._internal_indices());
    }
    if (cached_has_bits & 0x00000008u) {
      _this->_internal_set_octant_ranges(from._internal_octant_ranges());
    }
    if (cached_has_bits & 0x00000010u) {
      _this->_internal_set_layer_counts(from._internal_layer_counts());
    }
    if (cached_has_bits & 0x00000020u) {
      _this->_internal_set_texture_coordinates(from._internal_texture_coordinates());
    }
    if (cached_has_bits & 0x00000040u) {
      _this->_internal_set_layer_and_octant_counts(from._internal_layer_and_octant_counts());
    }
    if (cached_has_bits & 0x00000080u) {
      _this->_internal_set_vertex_alphas(from._internal_vertex_alphas());
    }
  }
  if (cached_has_bits & 0x00000f00u) {
    if (cached_has_bits & 0x00000100u) {
      _this->_internal_set_normals(from._internal_normals());
    }
    if (cached_has_bits & 0x00000200u) {
      _this->_internal_set_skirt_flags(from._internal_skirt_flags());
    }
    if (cached_has_bits & 0x00000400u) {
      _this->_internal_set_normals_dev(from._internal_normals_dev());
    }
    if (cached_has_bits & 0x00000800u) {
      _this->_impl_.mesh_id_ = from._impl_.mesh_id_;
    }
    _this->_impl_._has_bits_[0] |= cached_has_bits;
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

void Mesh::CopyFrom(const Mesh& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:geo_globetrotter_proto_rocktree.Mesh)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool Mesh::IsInitialized() const {
  return true;
}

void Mesh::InternalSwap(Mesh* other) {
  using std::swap;
  auto* lhs_arena = GetArenaForAllocation();
  auto* rhs_arena = other->GetArenaForAllocation();
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  _impl_.texture_.InternalSwap(&other->_impl_.texture_);
  _impl_.uv_offset_and_scale_.InternalSwap(&other->_impl_.uv_offset_and_scale_);
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.vertices_, lhs_arena,
      &other->_impl_.vertices_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.texture_coords_, lhs_arena,
      &other->_impl_.texture_coords_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.indices_, lhs_arena,
      &other->_impl_.indices_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.octant_ranges_, lhs_arena,
      &other->_impl_.octant_ranges_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.layer_counts_, lhs_arena,
      &other->_impl_.layer_counts_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.texture_coordinates_, lhs_arena,
      &other->_impl_.texture_coordinates_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.layer_and_octant_counts_, lhs_arena,
      &other->_impl_.layer_and_octant_counts_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.vertex_alphas_, lhs_arena,
      &other->_impl_.vertex_alphas_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.normals_, lhs_arena,
      &other->_impl_.normals_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.skirt_flags_, lhs_arena,
      &other->_impl_.skirt_flags_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.normals_dev_, lhs_arena,
      &other->_impl_.normals_dev_, rhs_arena
  );
  swap(_impl_.mesh_id_, other->_impl_.mesh_id_);
}

::PROTOBUF_NAMESPACE_ID::Metadata Mesh::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_rocktree_2eproto_getter, &descriptor_table_rocktree_2eproto_once,
      file_level_metadata_rocktree_2eproto[8]);
}

// ===================================================================

class Texture::_Internal {
 public:
  using HasBits = decltype(std::declval<Texture>()._impl_._has_bits_);
  static void set_has_format(HasBits* has_bits) {
    (*has_bits)[0] |= 8u;
  }
  static void set_has_width(HasBits* has_bits) {
    (*has_bits)[0] |= 16u;
  }
  static void set_has_height(HasBits* has_bits) {
    (*has_bits)[0] |= 4u;
  }
  static void set_has_view_direction(HasBits* has_bits) {
    (*has_bits)[0] |= 1u;
  }
  static void set_has_mesh_id(HasBits* has_bits) {
    (*has_bits)[0] |= 2u;
  }
};

Texture::Texture(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:geo_globetrotter_proto_rocktree.Texture)
}
Texture::Texture(const Texture& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  Texture* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){from._impl_._has_bits_}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.data_){from._impl_.data_}
    , decltype(_impl_.view_direction_){}
    , decltype(_impl_.mesh_id_){}
    , decltype(_impl_.height_){}
    , decltype(_impl_.format_){}
    , decltype(_impl_.width_){}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  ::memcpy(&_impl_.view_direction_, &from._impl_.view_direction_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.width_) -
    reinterpret_cast<char*>(&_impl_.view_direction_)) + sizeof(_impl_.width_));
  // @@protoc_insertion_point(copy_constructor:geo_globetrotter_proto_rocktree.Texture)
}

inline void Texture::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.data_){arena}
    , decltype(_impl_.view_direction_){0}
    , decltype(_impl_.mesh_id_){0u}
    , decltype(_impl_.height_){256u}
    , decltype(_impl_.format_){1}
    , decltype(_impl_.width_){256u}
  };
}

Texture::~Texture() {
  // @@protoc_insertion_point(destructor:geo_globetrotter_proto_rocktree.Texture)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void Texture::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.data_.~RepeatedPtrField();
}

void Texture::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void Texture::Clear() {
// @@protoc_insertion_point(message_clear_start:geo_globetrotter_proto_rocktree.Texture)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.data_.Clear();
  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x0000001fu) {
    ::memset(&_impl_.view_direction_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&_impl_.mesh_id_) -
        reinterpret_cast<char*>(&_impl_.view_direction_)) + sizeof(_impl_.mesh_id_));
    _impl_.height_ = 256u;
    _impl_.format_ = 1;
    _impl_.width_ = 256u;
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* Texture::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  _Internal::HasBits has_bits{};
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // repeated bytes data = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          ptr -= 1;
          do {
            ptr += 1;
            auto str = _internal_add_data();
            ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr));
        } else
          goto handle_unusual;
        continue;
      // optional .geo_globetrotter_proto_rocktree.Texture.Format format = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 16)) {
          uint64_t val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
          CHK_(ptr);
          if (PROTOBUF_PREDICT_TRUE(::geo_globetrotter_proto_rocktree::Texture_Format_IsValid(val))) {
            _internal_set_format(static_cast<::geo_globetrotter_proto_rocktree::Texture_Format>(val));
          } else {
            ::PROTOBUF_NAMESPACE_ID::internal::WriteVarint(2, val, mutable_unknown_fields());
          }
        } else
          goto handle_unusual;
        continue;
      // optional uint32 width = 3 [default = 256];
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
          _Internal::set_has_width(&has_bits);
          _impl_.width_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional uint32 height = 4 [default = 256];
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 32)) {
          _Internal::set_has_height(&has_bits);
          _impl_.height_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional .geo_globetrotter_proto_rocktree.Texture.ViewDirection view_direction = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 40)) {
          uint64_t val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
          CHK_(ptr);
          if (PROTOBUF_PREDICT_TRUE(::geo_globetrotter_proto_rocktree::Texture_ViewDirection_IsValid(val))) {
            _internal_set_view_direction(static_cast<::geo_globetrotter_proto_rocktree::Texture_ViewDirection>(val));
          } else {
            ::PROTOBUF_NAMESPACE_ID::internal::WriteVarint(5, val, mutable_unknown_fields());
          }
        } else
          goto handle_unusual;
        continue;
      // optional uint32 mesh_id = 6;
      case 6:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 48)) {
          _Internal::set_has_mesh_id(&has_bits);
          _impl_.mesh_id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  _impl_._has_bits_.Or(has_bits);
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* Texture::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:geo_globetrotter_proto_rocktree.Texture)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated bytes data = 1;
  for (int i = 0, n = this->_internal_data_size(); i < n; i++) {
    const auto& s = this->_internal_data(i);
    target = stream->WriteBytes(1, s, target);
  }

  cached_has_bits = _impl_._has_bits_[0];
  // optional .geo_globetrotter_proto_rocktree.Texture.Format format = 2;
  if (cached_has_bits & 0x00000008u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteEnumToArray(
      2, this->_internal_format(), target);
  }

  // optional uint32 width = 3 [default = 256];
  if (cached_has_bits & 0x00000010u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(3, this->_internal_width(), target);
  }

  // optional uint32 height = 4 [default = 256];
  if (cached_has_bits & 0x00000004u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(4, this->_internal_height(), target);
  }

  // optional .geo_globetrotter_proto_rocktree.Texture.ViewDirection view_direction = 5;
  if (cached_has_bits & 0x00000001u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteEnumToArray(
      5, this->_internal_view_direction(), target);
  }

  // optional uint32 mesh_id = 6;
  if (cached_has_bits & 0x00000002u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(6, this->_internal_mesh_id(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:geo_globetrotter_proto_rocktree.Texture)
  return target;
}

size_t Texture::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:geo_globetrotter_proto_rocktree.Texture)
  size_t total_size = 0;

  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // repeated bytes data = 1;
  total_size += 1 *
      ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(_impl_.data_.size());
  for (int i = 0, n = _impl_.data_.size(); i < n; i++) {
    total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
      _impl_.data_.Get(i));
  }

  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x0000001fu) {
    // optional .geo_globetrotter_proto_rocktree.Texture.ViewDirection view_direction = 5;
    if (cached_has_bits & 0x00000001u) {
      total_size += 1 +
        ::_pbi::WireFormatLite::EnumSize(this->_internal_view_direction());
    }

    // optional uint32 mesh_id = 6;
    if (cached_has_bits & 0x00000002u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_mesh_id());
    }

    // optional uint32 height = 4 [default = 256];
    if (cached_has_bits & 0x00000004u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_height());
    }

    // optional .geo_globetrotter_proto_rocktree.Texture.Format format = 2;
    if (cached_has_bits & 0x00000008u) {
      total_size += 1 +
        ::_pbi::WireFormatLite::EnumSize(this->_internal_format());
    }

    // optional uint32 width = 3 [default = 256];
    if (cached_has_bits & 0x00000010u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_width());
    }

  }
  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Texture::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    Texture::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Texture::GetClassData() const { return &_class_data_; }


void Texture::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<Texture*>(&to_msg);
  auto& from = static_cast<const Texture&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:geo_globetrotter_proto_rocktree.Texture)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  _this->_impl_.data_.MergeFrom(from._impl_.data_);
  cached_has_bits = from._impl_._has_bits_[0];
  if (cached_has_bits & 0x0000001fu) {
    if (cached_has_bits & 0x00000001u) {
      _this->_impl_.view_direction_ = from._impl_.view_direction_;
    }
    if (cached_has_bits & 0x00000002u) {
      _this->_impl_.mesh_id_ = from._impl_.mesh_id_;
    }
    if (cached_has_bits & 0x00000004u) {
      _this->_impl_.height_ = from._impl_.height_;
    }
    if (cached_has_bits & 0x00000008u) {
      _this->_impl_.format_ = from._impl_.format_;
    }
    if (cached_has_bits & 0x00000010u) {
      _this->_impl_.width_ = from._impl_.width_;
    }
    _this->_impl_._has_bits_[0] |= cached_has_bits;
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

void Texture::CopyFrom(const Texture& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:geo_globetrotter_proto_rocktree.Texture)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool Texture::IsInitialized() const {
  return true;
}

void Texture::InternalSwap(Texture* other) {
  using std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  _impl_.data_.InternalSwap(&other->_impl_.data_);
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(Texture, _impl_.mesh_id_)
      + sizeof(Texture::_impl_.mesh_id_)
      - PROTOBUF_FIELD_OFFSET(Texture, _impl_.view_direction_)>(
          reinterpret_cast<char*>(&_impl_.view_direction_),
          reinterpret_cast<char*>(&other->_impl_.view_direction_));
  swap(_impl_.height_, other->_impl_.height_);
  swap(_impl_.format_, other->_impl_.format_);
  swap(_impl_.width_, other->_impl_.width_);
}

::PROTOBUF_NAMESPACE_ID::Metadata Texture::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_rocktree_2eproto_getter, &descriptor_table_rocktree_2eproto_once,
      file_level_metadata_rocktree_2eproto[9]);
}

// ===================================================================

class TextureData::_Internal {
 public:
  using HasBits = decltype(std::declval<TextureData>()._impl_._has_bits_);
  static const ::geo_globetrotter_proto_rocktree::NodeKey& node_key(const TextureData* msg);
  static void set_has_node_key(HasBits* has_bits) {
    (*has_bits)[0] |= 1u;
  }
};

const ::geo_globetrotter_proto_rocktree::NodeKey&
TextureData::_Internal::node_key(const TextureData* msg) {
  return *msg->_impl_.node_key_;
}
TextureData::TextureData(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:geo_globetrotter_proto_rocktree.TextureData)
}
TextureData::TextureData(const TextureData& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  TextureData* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){from._impl_._has_bits_}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.textures_){from._impl_.textures_}
    , decltype(_impl_.node_key_){nullptr}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  if (from._internal_has_node_key()) {
    _this->_impl_.node_key_ = new ::geo_globetrotter_proto_rocktree::NodeKey(*from._impl_.node_key_);
  }
  // @@protoc_insertion_point(copy_constructor:geo_globetrotter_proto_rocktree.TextureData)
}

inline void TextureData::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.textures_){arena}
    , decltype(_impl_.node_key_){nullptr}
  };
}

TextureData::~TextureData() {
  // @@protoc_insertion_point(destructor:geo_globetrotter_proto_rocktree.TextureData)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void TextureData::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.textures_.~RepeatedPtrField();
  if (this != internal_default_instance()) delete _impl_.node_key_;
}

void TextureData::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void TextureData::Clear() {
// @@protoc_insertion_point(message_clear_start:geo_globetrotter_proto_rocktree.TextureData)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.textures_.Clear();
  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000001u) {
    GOOGLE_DCHECK(_impl_.node_key_ != nullptr);
    _impl_.node_key_->Clear();
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* TextureData::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  _Internal::HasBits has_bits{};
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // optional .geo_globetrotter_proto_rocktree.NodeKey node_key = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          ptr = ctx->ParseMessage(_internal_mutable_node_key(), ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // repeated .geo_globetrotter_proto_rocktree.Texture textures = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_textures(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<18>(ptr));
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  _impl_._has_bits_.Or(has_bits);
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* TextureData::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:geo_globetrotter_proto_rocktree.TextureData)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  // optional .geo_globetrotter_proto_rocktree.NodeKey node_key = 1;
  if (cached_has_bits & 0x00000001u) {
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(1, _Internal::node_key(this),
        _Internal::node_key(this).GetCachedSize(), target, stream);
  }

  // repeated .geo_globetrotter_proto_rocktree.Texture textures = 2;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_textures_size()); i < n; i++) {
    const auto& repfield = this->_internal_textures(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(2, repfield, repfield.GetCachedSize(), target, stream);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:geo_globetrotter_proto_rocktree.TextureData)
  return target;
}

size_t TextureData::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:geo_globetrotter_proto_rocktree.TextureData)
  size_t total_size = 0;

  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // repeated .geo_globetrotter_proto_rocktree.Texture textures = 2;
  total_size += 1UL * this->_internal_textures_size();
  for (const auto& msg : this->_impl_.textures_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  // optional .geo_globetrotter_proto_rocktree.NodeKey node_key = 1;
  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000001u) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
        *_impl_.node_key_);
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData TextureData::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    TextureData::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*TextureData::GetClassData() const { return &_class_data_; }


void TextureData::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<TextureData*>(&to_msg);
  auto& from = static_cast<const TextureData&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:geo_globetrotter_proto_rocktree.TextureData)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  _this->_impl_.textures_.MergeFrom(from._impl_.textures_);
  if (from._internal_has_node_key()) {
    _this->_internal_mutable_node_key()->::geo_globetrotter_proto_rocktree::NodeKey::MergeFrom(
        from._internal_node_key());
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

void TextureData::CopyFrom(const TextureData& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:geo_globetrotter_proto_rocktree.TextureData)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TextureData::IsInitialized() const {
  return true;
}

void TextureData::InternalSwap(TextureData* other) {
  using std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  _impl_.textures_.InternalSwap(&other->_impl_.textures_);
  swap(_impl_.node_key_, other->_impl_.node_key_);
}

::PROTOBUF_NAMESPACE_ID::Metadata TextureData::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_rocktree_2eproto_getter, &descriptor_table_rocktree_2eproto_once,
      file_level_metadata_rocktree_2eproto[10]);
}

// ===================================================================

class Copyrights::_Internal {
 public:
};

Copyrights::Copyrights(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:geo_globetrotter_proto_rocktree.Copyrights)
}
Copyrights::Copyrights(const Copyrights& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  Copyrights* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_.copyrights_){from._impl_.copyrights_}
    , /*decltype(_impl_._cached_size_)*/{}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  // @@protoc_insertion_point(copy_constructor:geo_globetrotter_proto_rocktree.Copyrights)
}

inline void Copyrights::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_.copyrights_){arena}
    , /*decltype(_impl_._cached_size_)*/{}
  };
}

Copyrights::~Copyrights() {
  // @@protoc_insertion_point(destructor:geo_globetrotter_proto_rocktree.Copyrights)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void Copyrights::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.copyrights_.~RepeatedPtrField();
}

void Copyrights::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void Copyrights::Clear() {
// @@protoc_insertion_point(message_clear_start:geo_globetrotter_proto_rocktree.Copyrights)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _impl_.copyrights_.Clear();
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* Copyrights::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // repeated .geo_globetrotter_proto_rocktree.Copyright copyrights = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_copyrights(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr));
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* Copyrights::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:geo_globetrotter_proto_rocktree.Copyrights)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated .geo_globetrotter_proto_rocktree.Copyright copyrights = 1;
  for (unsigned i = 0,
      n = static_cast<unsigned>(this->_internal_copyrights_size()); i < n; i++) {
    const auto& repfield = this->_internal_copyrights(i);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
        InternalWriteMessage(1, repfield, repfield.GetCachedSize(), target, stream);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:geo_globetrotter_proto_rocktree.Copyrights)
  return target;
}

size_t Copyrights::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:geo_globetrotter_proto_rocktree.Copyrights)
  size_t total_size = 0;

  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // repeated .geo_globetrotter_proto_rocktree.Copyright copyrights = 1;
  total_size += 1UL * this->_internal_copyrights_size();
  for (const auto& msg : this->_impl_.copyrights_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Copyrights::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    Copyrights::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Copyrights::GetClassData() const { return &_class_data_; }


void Copyrights::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<Copyrights*>(&to_msg);
  auto& from = static_cast<const Copyrights&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:geo_globetrotter_proto_rocktree.Copyrights)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  _this->_impl_.copyrights_.MergeFrom(from._impl_.copyrights_);
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

void Copyrights::CopyFrom(const Copyrights& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:geo_globetrotter_proto_rocktree.Copyrights)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool Copyrights::IsInitialized() const {
  return true;
}

void Copyrights::InternalSwap(Copyrights* other) {
  using std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  _impl_.copyrights_.InternalSwap(&other->_impl_.copyrights_);
}

::PROTOBUF_NAMESPACE_ID::Metadata Copyrights::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_rocktree_2eproto_getter, &descriptor_table_rocktree_2eproto_once,
      file_level_metadata_rocktree_2eproto[11]);
}

// ===================================================================

class Copyright::_Internal {
 public:
  using HasBits = decltype(std::declval<Copyright>()._impl_._has_bits_);
  static void set_has_id(HasBits* has_bits) {
    (*has_bits)[0] |= 4u;
  }
  static void set_has_text(HasBits* has_bits) {
    (*has_bits)[0] |= 1u;
  }
  static void set_has_text_clean(HasBits* has_bits) {
    (*has_bits)[0] |= 2u;
  }
};

Copyright::Copyright(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:geo_globetrotter_proto_rocktree.Copyright)
}
Copyright::Copyright(const Copyright& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  Copyright* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){from._impl_._has_bits_}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.text_){}
    , decltype(_impl_.text_clean_){}
    , decltype(_impl_.id_){}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  _impl_.text_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.text_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (from._internal_has_text()) {
    _this->_impl_.text_.Set(from._internal_text(), 
      _this->GetArenaForAllocation());
  }
  _impl_.text_clean_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.text_clean_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  if (from._internal_has_text_clean()) {
    _this->_impl_.text_clean_.Set(from._internal_text_clean(), 
      _this->GetArenaForAllocation());
  }
  _this->_impl_.id_ = from._impl_.id_;
  // @@protoc_insertion_point(copy_constructor:geo_globetrotter_proto_rocktree.Copyright)
}

inline void Copyright::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.text_){}
    , decltype(_impl_.text_clean_){}
    , decltype(_impl_.id_){0u}
  };
  _impl_.text_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.text_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  _impl_.text_clean_.InitDefault();
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    _impl_.text_clean_.Set("", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
}

Copyright::~Copyright() {
  // @@protoc_insertion_point(destructor:geo_globetrotter_proto_rocktree.Copyright)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void Copyright::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  _impl_.text_.Destroy();
  _impl_.text_clean_.Destroy();
}

void Copyright::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void Copyright::Clear() {
// @@protoc_insertion_point(message_clear_start:geo_globetrotter_proto_rocktree.Copyright)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000003u) {
    if (cached_has_bits & 0x00000001u) {
      _impl_.text_.ClearNonDefaultToEmpty();
    }
    if (cached_has_bits & 0x00000002u) {
      _impl_.text_clean_.ClearNonDefaultToEmpty();
    }
  }
  _impl_.id_ = 0u;
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* Copyright::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  _Internal::HasBits has_bits{};
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // optional uint32 id = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 8)) {
          _Internal::set_has_id(&has_bits);
          _impl_.id_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional string text = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
          auto str = _internal_mutable_text();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          #ifndef NDEBUG
          ::_pbi::VerifyUTF8(str, "geo_globetrotter_proto_rocktree.Copyright.text");
          #endif  // !NDEBUG
        } else
          goto handle_unusual;
        continue;
      // optional string text_clean = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 26)) {
          auto str = _internal_mutable_text_clean();
          ptr = ::_pbi::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
          #ifndef NDEBUG
          ::_pbi::VerifyUTF8(str, "geo_globetrotter_proto_rocktree.Copyright.text_clean");
          #endif  // !NDEBUG
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  _impl_._has_bits_.Or(has_bits);
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* Copyright::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:geo_globetrotter_proto_rocktree.Copyright)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  // optional uint32 id = 1;
  if (cached_has_bits & 0x00000004u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteUInt32ToArray(1, this->_internal_id(), target);
  }

  // optional string text = 2;
  if (cached_has_bits & 0x00000001u) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::VerifyUTF8StringNamedField(
      this->_internal_text().data(), static_cast<int>(this->_internal_text().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SERIALIZE,
      "geo_globetrotter_proto_rocktree.Copyright.text");
    target = stream->WriteStringMaybeAliased(
        2, this->_internal_text(), target);
  }

  // optional string text_clean = 3;
  if (cached_has_bits & 0x00000002u) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::VerifyUTF8StringNamedField(
      this->_internal_text_clean().data(), static_cast<int>(this->_internal_text_clean().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SERIALIZE,
      "geo_globetrotter_proto_rocktree.Copyright.text_clean");
    target = stream->WriteStringMaybeAliased(
        3, this->_internal_text_clean(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:geo_globetrotter_proto_rocktree.Copyright)
  return target;
}

size_t Copyright::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:geo_globetrotter_proto_rocktree.Copyright)
  size_t total_size = 0;

  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000007u) {
    // optional string text = 2;
    if (cached_has_bits & 0x00000001u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
          this->_internal_text());
    }

    // optional string text_clean = 3;
    if (cached_has_bits & 0x00000002u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
          this->_internal_text_clean());
    }

    // optional uint32 id = 1;
    if (cached_has_bits & 0x00000004u) {
      total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(this->_internal_id());
    }

  }
  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData Copyright::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    Copyright::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*Copyright::GetClassData() const { return &_class_data_; }


void Copyright::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<Copyright*>(&to_msg);
  auto& from = static_cast<const Copyright&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:geo_globetrotter_proto_rocktree.Copyright)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (cached_has_bits & 0x00000007u) {
    if (cached_has_bits & 0x00000001u) {
      _this->_internal_set_text(from._internal_text());
    }
    if (cached_has_bits & 0x00000002u) {
      _this->_internal_set_text_clean(from._internal_text_clean());
    }
    if (cached_has_bits & 0x00000004u) {
      _this->_impl_.id_ = from._impl_.id_;
    }
    _this->_impl_._has_bits_[0] |= cached_has_bits;
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

void Copyright::CopyFrom(const Copyright& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:geo_globetrotter_proto_rocktree.Copyright)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool Copyright::IsInitialized() const {
  return true;
}

void Copyright::InternalSwap(Copyright* other) {
  using std::swap;
  auto* lhs_arena = GetArenaForAllocation();
  auto* rhs_arena = other->GetArenaForAllocation();
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.text_, lhs_arena,
      &other->_impl_.text_, rhs_arena
  );
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
      &_impl_.text_clean_, lhs_arena,
      &other->_impl_.text_clean_, rhs_arena
  );
  swap(_impl_.id_, other->_impl_.id_);
}

::PROTOBUF_NAMESPACE_ID::Metadata Copyright::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_rocktree_2eproto_getter, &descriptor_table_rocktree_2eproto_once,
      file_level_metadata_rocktree_2eproto[12]);
}

// ===================================================================

class PlanetoidMetadata::_Internal {
 public:
  using HasBits = decltype(std::declval<PlanetoidMetadata>()._impl_._has_bits_);
  static const ::geo_globetrotter_proto_rocktree::NodeMetadata& root_node_metadata(const PlanetoidMetadata* msg);
  static void set_has_root_node_metadata(HasBits* has_bits) {
    (*has_bits)[0] |= 1u;
  }
  static void set_has_radius(HasBits* has_bits) {
    (*has_bits)[0] |= 2u;
  }
  static void set_has_min_terrain_altitude(HasBits* has_bits) {
    (*has_bits)[0] |= 4u;
  }
  static void set_has_max_terrain_altitude(HasBits* has_bits) {
    (*has_bits)[0] |= 8u;
  }
};

const ::geo_globetrotter_proto_rocktree::NodeMetadata&
PlanetoidMetadata::_Internal::root_node_metadata(const PlanetoidMetadata* msg) {
  return *msg->_impl_.root_node_metadata_;
}
PlanetoidMetadata::PlanetoidMetadata(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                         bool is_message_owned)
  : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
  SharedCtor(arena, is_message_owned);
  // @@protoc_insertion_point(arena_constructor:geo_globetrotter_proto_rocktree.PlanetoidMetadata)
}
PlanetoidMetadata::PlanetoidMetadata(const PlanetoidMetadata& from)
  : ::PROTOBUF_NAMESPACE_ID::Message() {
  PlanetoidMetadata* const _this = this; (void)_this;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){from._impl_._has_bits_}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.root_node_metadata_){nullptr}
    , decltype(_impl_.radius_){}
    , decltype(_impl_.min_terrain_altitude_){}
    , decltype(_impl_.max_terrain_altitude_){}};

  _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  if (from._internal_has_root_node_metadata()) {
    _this->_impl_.root_node_metadata_ = new ::geo_globetrotter_proto_rocktree::NodeMetadata(*from._impl_.root_node_metadata_);
  }
  ::memcpy(&_impl_.radius_, &from._impl_.radius_,
    static_cast<size_t>(reinterpret_cast<char*>(&_impl_.max_terrain_altitude_) -
    reinterpret_cast<char*>(&_impl_.radius_)) + sizeof(_impl_.max_terrain_altitude_));
  // @@protoc_insertion_point(copy_constructor:geo_globetrotter_proto_rocktree.PlanetoidMetadata)
}

inline void PlanetoidMetadata::SharedCtor(
    ::_pb::Arena* arena, bool is_message_owned) {
  (void)arena;
  (void)is_message_owned;
  new (&_impl_) Impl_{
      decltype(_impl_._has_bits_){}
    , /*decltype(_impl_._cached_size_)*/{}
    , decltype(_impl_.root_node_metadata_){nullptr}
    , decltype(_impl_.radius_){0}
    , decltype(_impl_.min_terrain_altitude_){0}
    , decltype(_impl_.max_terrain_altitude_){0}
  };
}

PlanetoidMetadata::~PlanetoidMetadata() {
  // @@protoc_insertion_point(destructor:geo_globetrotter_proto_rocktree.PlanetoidMetadata)
  if (auto *arena = _internal_metadata_.DeleteReturnArena<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>()) {
  (void)arena;
    return;
  }
  SharedDtor();
}

inline void PlanetoidMetadata::SharedDtor() {
  GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
  if (this != internal_default_instance()) delete _impl_.root_node_metadata_;
}

void PlanetoidMetadata::SetCachedSize(int size) const {
  _impl_._cached_size_.Set(size);
}

void PlanetoidMetadata::Clear() {
// @@protoc_insertion_point(message_clear_start:geo_globetrotter_proto_rocktree.PlanetoidMetadata)
  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x00000001u) {
    GOOGLE_DCHECK(_impl_.root_node_metadata_ != nullptr);
    _impl_.root_node_metadata_->Clear();
  }
  if (cached_has_bits & 0x0000000eu) {
    ::memset(&_impl_.radius_, 0, static_cast<size_t>(
        reinterpret_cast<char*>(&_impl_.max_terrain_altitude_) -
        reinterpret_cast<char*>(&_impl_.radius_)) + sizeof(_impl_.max_terrain_altitude_));
  }
  _impl_._has_bits_.Clear();
  _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}

const char* PlanetoidMetadata::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  _Internal::HasBits has_bits{};
  while (!ctx->Done(&ptr)) {
    uint32_t tag;
    ptr = ::_pbi::ReadTag(ptr, &tag);
    switch (tag >> 3) {
      // optional .geo_globetrotter_proto_rocktree.NodeMetadata root_node_metadata = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
          ptr = ctx->ParseMessage(_internal_mutable_root_node_metadata(), ptr);
          CHK_(ptr);
        } else
          goto handle_unusual;
        continue;
      // optional float radius = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 21)) {
          _Internal::set_has_radius(&has_bits);
          _impl_.radius_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      // optional float min_terrain_altitude = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 29)) {
          _Internal::set_has_min_terrain_altitude(&has_bits);
          _impl_.min_terrain_altitude_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      // optional float max_terrain_altitude = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 37)) {
          _Internal::set_has_max_terrain_altitude(&has_bits);
          _impl_.max_terrain_altitude_ = ::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<float>(ptr);
          ptr += sizeof(float);
        } else
          goto handle_unusual;
        continue;
      default:
        goto handle_unusual;
    }  // switch
  handle_unusual:
    if ((tag == 0) || ((tag & 7) == 4)) {
      CHK_(ptr);
      ctx->SetLastTag(tag);
      goto message_done;
    }
    ptr = UnknownFieldParse(
        tag,
        _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
        ptr, ctx);
    CHK_(ptr != nullptr);
  }  // while
message_done:
  _impl_._has_bits_.Or(has_bits);
  return ptr;
failure:
  ptr = nullptr;
  goto message_done;
#undef CHK_
}

uint8_t* PlanetoidMetadata::_InternalSerialize(
    uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:geo_globetrotter_proto_rocktree.PlanetoidMetadata)
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  // optional .geo_globetrotter_proto_rocktree.NodeMetadata root_node_metadata = 1;
  if (cached_has_bits & 0x00000001u) {
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(1, _Internal::root_node_metadata(this),
        _Internal::root_node_metadata(this).GetCachedSize(), target, stream);
  }

  // optional float radius = 2;
  if (cached_has_bits & 0x00000002u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(2, this->_internal_radius(), target);
  }

  // optional float min_terrain_altitude = 3;
  if (cached_has_bits & 0x00000004u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(3, this->_internal_min_terrain_altitude(), target);
  }

  // optional float max_terrain_altitude = 4;
  if (cached_has_bits & 0x00000008u) {
    target = stream->EnsureSpace(target);
    target = ::_pbi::WireFormatLite::WriteFloatToArray(4, this->_internal_max_terrain_altitude(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:geo_globetrotter_proto_rocktree.PlanetoidMetadata)
  return target;
}

size_t PlanetoidMetadata::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:geo_globetrotter_proto_rocktree.PlanetoidMetadata)
  size_t total_size = 0;

  uint32_t cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  cached_has_bits = _impl_._has_bits_[0];
  if (cached_has_bits & 0x0000000fu) {
    // optional .geo_globetrotter_proto_rocktree.NodeMetadata root_node_metadata = 1;
    if (cached_has_bits & 0x00000001u) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *_impl_.root_node_metadata_);
    }

    // optional float radius = 2;
    if (cached_has_bits & 0x00000002u) {
      total_size += 1 + 4;
    }

    // optional float min_terrain_altitude = 3;
    if (cached_has_bits & 0x00000004u) {
      total_size += 1 + 4;
    }

    // optional float max_terrain_altitude = 4;
    if (cached_has_bits & 0x00000008u) {
      total_size += 1 + 4;
    }

  }
  return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}

const ::PROTOBUF_NAMESPACE_ID::Message::ClassData PlanetoidMetadata::_class_data_ = {
    ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSourceCheck,
    PlanetoidMetadata::MergeImpl
};
const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*PlanetoidMetadata::GetClassData() const { return &_class_data_; }


void PlanetoidMetadata::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTOBUF_NAMESPACE_ID::Message& from_msg) {
  auto* const _this = static_cast<PlanetoidMetadata*>(&to_msg);
  auto& from = static_cast<const PlanetoidMetadata&>(from_msg);
  // @@protoc_insertion_point(class_specific_merge_from_start:geo_globetrotter_proto_rocktree.PlanetoidMetadata)
  GOOGLE_DCHECK_NE(&from, _this);
  uint32_t cached_has_bits = 0;
  (void) cached_has_bits;

  cached_has_bits = from._impl_._has_bits_[0];
  if (cached_has_bits & 0x0000000fu) {
    if (cached_has_bits & 0x00000001u) {
      _this->_internal_mutable_root_node_metadata()->::geo_globetrotter_proto_rocktree::NodeMetadata::MergeFrom(
          from._internal_root_node_metadata());
    }
    if (cached_has_bits & 0x00000002u) {
      _this->_impl_.radius_ = from._impl_.radius_;
    }
    if (cached_has_bits & 0x00000004u) {
      _this->_impl_.min_terrain_altitude_ = from._impl_.min_terrain_altitude_;
    }
    if (cached_has_bits & 0x00000008u) {
      _this->_impl_.max_terrain_altitude_ = from._impl_.max_terrain_altitude_;
    }
    _this->_impl_._has_bits_[0] |= cached_has_bits;
  }
  _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}

void PlanetoidMetadata::CopyFrom(const PlanetoidMetadata& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:geo_globetrotter_proto_rocktree.PlanetoidMetadata)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool PlanetoidMetadata::IsInitialized() const {
  return true;
}

void PlanetoidMetadata::InternalSwap(PlanetoidMetadata* other) {
  using std::swap;
  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
      PROTOBUF_FIELD_OFFSET(PlanetoidMetadata, _impl_.max_terrain_altitude_)
      + sizeof(PlanetoidMetadata::_impl_.max_terrain_altitude_)
      - PROTOBUF_FIELD_OFFSET(PlanetoidMetadata, _impl_.root_node_metadata_)>(
          reinterpret_cast<char*>(&_impl_.root_node_metadata_),
          reinterpret_cast<char*>(&other->_impl_.root_node_metadata_));
}

::PROTOBUF_NAMESPACE_ID::Metadata PlanetoidMetadata::GetMetadata() const {
  return ::_pbi::AssignDescriptors(
      &descriptor_table_rocktree_2eproto_getter, &descriptor_table_rocktree_2eproto_once,
      file_level_metadata_rocktree_2eproto[13]);
}

// @@protoc_insertion_point(namespace_scope)
}  // namespace geo_globetrotter_proto_rocktree
PROTOBUF_NAMESPACE_OPEN
template<> PROTOBUF_NOINLINE ::geo_globetrotter_proto_rocktree::BulkMetadataRequest*
Arena::CreateMaybeMessage< ::geo_globetrotter_proto_rocktree::BulkMetadataRequest >(Arena* arena) {
  return Arena::CreateMessageInternal< ::geo_globetrotter_proto_rocktree::BulkMetadataRequest >(arena);
}
template<> PROTOBUF_NOINLINE ::geo_globetrotter_proto_rocktree::NodeDataRequest*
Arena::CreateMaybeMessage< ::geo_globetrotter_proto_rocktree::NodeDataRequest >(Arena* arena) {
  return Arena::CreateMessageInternal< ::geo_globetrotter_proto_rocktree::NodeDataRequest >(arena);
}
template<> PROTOBUF_NOINLINE ::geo_globetrotter_proto_rocktree::NodeKey*
Arena::CreateMaybeMessage< ::geo_globetrotter_proto_rocktree::NodeKey >(Arena* arena) {
  return Arena::CreateMessageInternal< ::geo_globetrotter_proto_rocktree::NodeKey >(arena);
}
template<> PROTOBUF_NOINLINE ::geo_globetrotter_proto_rocktree::CopyrightRequest*
Arena::CreateMaybeMessage< ::geo_globetrotter_proto_rocktree::CopyrightRequest >(Arena* arena) {
  return Arena::CreateMessageInternal< ::geo_globetrotter_proto_rocktree::CopyrightRequest >(arena);
}
template<> PROTOBUF_NOINLINE ::geo_globetrotter_proto_rocktree::TextureDataRequest*
Arena::CreateMaybeMessage< ::geo_globetrotter_proto_rocktree::TextureDataRequest >(Arena* arena) {
  return Arena::CreateMessageInternal< ::geo_globetrotter_proto_rocktree::TextureDataRequest >(arena);
}
template<> PROTOBUF_NOINLINE ::geo_globetrotter_proto_rocktree::BulkMetadata*
Arena::CreateMaybeMessage< ::geo_globetrotter_proto_rocktree::BulkMetadata >(Arena* arena) {
  return Arena::CreateMessageInternal< ::geo_globetrotter_proto_rocktree::BulkMetadata >(arena);
}
template<> PROTOBUF_NOINLINE ::geo_globetrotter_proto_rocktree::NodeMetadata*
Arena::CreateMaybeMessage< ::geo_globetrotter_proto_rocktree::NodeMetadata >(Arena* arena) {
  return Arena::CreateMessageInternal< ::geo_globetrotter_proto_rocktree::NodeMetadata >(arena);
}
template<> PROTOBUF_NOINLINE ::geo_globetrotter_proto_rocktree::NodeData*
Arena::CreateMaybeMessage< ::geo_globetrotter_proto_rocktree::NodeData >(Arena* arena) {
  return Arena::CreateMessageInternal< ::geo_globetrotter_proto_rocktree::NodeData >(arena);
}
template<> PROTOBUF_NOINLINE ::geo_globetrotter_proto_rocktree::Mesh*
Arena::CreateMaybeMessage< ::geo_globetrotter_proto_rocktree::Mesh >(Arena* arena) {
  return Arena::CreateMessageInternal< ::geo_globetrotter_proto_rocktree::Mesh >(arena);
}
template<> PROTOBUF_NOINLINE ::geo_globetrotter_proto_rocktree::Texture*
Arena::CreateMaybeMessage< ::geo_globetrotter_proto_rocktree::Texture >(Arena* arena) {
  return Arena::CreateMessageInternal< ::geo_globetrotter_proto_rocktree::Texture >(arena);
}
template<> PROTOBUF_NOINLINE ::geo_globetrotter_proto_rocktree::TextureData*
Arena::CreateMaybeMessage< ::geo_globetrotter_proto_rocktree::TextureData >(Arena* arena) {
  return Arena::CreateMessageInternal< ::geo_globetrotter_proto_rocktree::TextureData >(arena);
}
template<> PROTOBUF_NOINLINE ::geo_globetrotter_proto_rocktree::Copyrights*
Arena::CreateMaybeMessage< ::geo_globetrotter_proto_rocktree::Copyrights >(Arena* arena) {
  return Arena::CreateMessageInternal< ::geo_globetrotter_proto_rocktree::Copyrights >(arena);
}
template<> PROTOBUF_NOINLINE ::geo_globetrotter_proto_rocktree::Copyright*
Arena::CreateMaybeMessage< ::geo_globetrotter_proto_rocktree::Copyright >(Arena* arena) {
  return Arena::CreateMessageInternal< ::geo_globetrotter_proto_rocktree::Copyright >(arena);
}
template<> PROTOBUF_NOINLINE ::geo_globetrotter_proto_rocktree::PlanetoidMetadata*
Arena::CreateMaybeMessage< ::geo_globetrotter_proto_rocktree::PlanetoidMetadata >(Arena* arena) {
  return Arena::CreateMessageInternal< ::geo_globetrotter_proto_rocktree::PlanetoidMetadata >(arena);
}
PROTOBUF_NAMESPACE_CLOSE

// @@protoc_insertion_point(global_scope)
#include <google/protobuf/port_undef.inc>
