GVR SDK Android “1.190.0”
diff --git a/.gitignore b/.gitignore
index 2fe78a1..0ca937a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,7 +6,7 @@
.externalNativeBuild/
.gradle/
build/
-libraries/jni
+libraries/
# User configuration.
local.properties
diff --git a/samples/LICENSE b/LICENSE
similarity index 93%
rename from samples/LICENSE
rename to LICENSE
index 3037da8..dadef8e 100644
--- a/samples/LICENSE
+++ b/LICENSE
@@ -1,3 +1,15 @@
+ Copyright (c) 2016, Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
@@ -175,27 +187,3 @@
END OF TERMS AND CONDITIONS
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright 2018 Google, Inc.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/README.md b/README.md
index 6d9f52d..ee82125 100644
--- a/README.md
+++ b/README.md
@@ -2,13 +2,7 @@
Enables Daydream and Cardboard app development on Android.
-Copyright (c) 2018 Google Inc.
-
-See [https://developers.google.com/terms/](https://developers.google.com/terms/)
-for the **Google APIs Terms of Service** which cover this SDK. The code in
-`samples` is covered by the Apache 2 `LICENSE` file in that directory, and the
-files in `assets` are covered by Creative Commons `LICENSE` file in that
-directory.
+Copyright (c) 2016 Google Inc. All rights reserved.
For updates, known issues, and upgrade instructions, see the
[release-notes](//github.com/googlevr/gvr-android-sdk/releases).
diff --git a/apks/controller_emulator.apk b/apks/controller_emulator.apk
index 0557bfb..d665a36 100644
--- a/apks/controller_emulator.apk
+++ b/apks/controller_emulator.apk
Binary files differ
diff --git a/build.gradle b/build.gradle
index cd77414..6cf3dba 100644
--- a/build.gradle
+++ b/build.gradle
@@ -34,23 +34,17 @@
// The dependencies for NDK builds live inside the .aar files so they need to
// be extracted before NDK targets can build.
-task extractAudioSo(type: Copy) {
- from zipTree("${project.rootDir}/libraries/sdk-audio-1.180.0.aar")
+task extractNdk(type: Copy) {
+ from zipTree("${project.rootDir}/libraries/sdk-base-1.190.0.aar")
into "${project.rootDir}/libraries/"
+ include "headers/vr/gvr/capi/**/*h"
include "jni/**/libgvr_audio.so"
-}
-
-task extractGvrSo(type: Copy) {
- from zipTree("${project.rootDir}/libraries/sdk-base-1.180.0.aar")
- into "${project.rootDir}/libraries/"
include "jni/**/libgvr.so"
}
-task extractNdk { }
-extractNdk.dependsOn extractAudioSo
-extractNdk.dependsOn extractGvrSo
-
task deleteNdk(type: Delete) {
+ delete "${project.rootDir}/libraries/headers"
delete "${project.rootDir}/libraries/jni"
}
+
clean.dependsOn(deleteNdk)
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 758de96..29953ea 100644
--- a/gradle/wrapper/gradle-wrapper.jar
+++ b/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/libraries/headers/vr/gvr/capi/include/gvr.h b/libraries/headers/vr/gvr/capi/include/gvr.h
deleted file mode 100644
index 3dd9731..0000000
--- a/libraries/headers/vr/gvr/capi/include/gvr.h
+++ /dev/null
@@ -1,1732 +0,0 @@
-/* Copyright 2016 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef VR_GVR_CAPI_INCLUDE_GVR_H_
-#define VR_GVR_CAPI_INCLUDE_GVR_H_
-
-#ifdef __ANDROID__
-#include <jni.h>
-#endif
-
-#include <stdint.h>
-#include <stdlib.h>
-
-#if defined(__cplusplus) && !defined(GVR_NO_CPP_WRAPPER)
-#include <array>
-#include <memory>
-#include <vector>
-#endif
-
-#include "vr/gvr/capi/include/gvr_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/// @defgroup base Google VR Base C API
-/// @brief This is the Google VR C API. It supports clients writing VR
-/// experiences for head mounted displays that consist of a mobile phone and a
-/// VR viewer.
-///
-/// Example API usage:
-///
-/// #ifdef __ANDROID__
-/// // On Android, the gvr_context should almost always be obtained from
-/// // the Java GvrLayout object via
-/// // GvrLayout.getGvrApi().getNativeGvrContext().
-/// gvr_context* gvr = ...;
-/// #else
-/// gvr_context* gvr = gvr_create();
-/// #endif
-///
-/// gvr_initialize_gl(gvr);
-///
-/// gvr_buffer_viewport_list* viewport_list =
-/// gvr_buffer_viewport_list_create(gvr);
-/// gvr_get_recommended_buffer_viewports(gvr, viewport_list);
-/// gvr_buffer_viewport* left_eye_vp = gvr_buffer_viewport_create(gvr);
-/// gvr_buffer_viewport* right_eye_vp = gvr_buffer_viewport_create(gvr);
-/// gvr_buffer_viewport_list_get_item(viewport_list, 0, left_eye_vp);
-/// gvr_buffer_viewport_list_get_item(viewport_list, 1, right_eye_vp);
-///
-/// while (client_app_should_render) {
-/// // A client app should be ready for the render target size to change
-/// // whenever a new QR code is scanned, or a new viewer is paired.
-/// gvr_sizei render_target_size =
-/// gvr_get_maximum_effective_render_target_size(gvr);
-/// // The maximum effective render target size can be very large, most
-/// // applications need to scale down to compensate.
-/// render_target_size.width /= 2;
-/// render_target_size.height /= 2;
-/// gvr_swap_chain_resize_buffer(swap_chain, 0, render_target_size);
-///
-/// // This function will depend on your render loop's implementation.
-/// gvr_clock_time_point next_vsync = AppGetNextVsyncTime();
-///
-/// const gvr_mat4f head_view =
-/// gvr_get_head_space_from_start_space_transform(gvr, next_vsync);
-/// const gvr_mat4f left_eye_view = MatrixMultiply(
-/// gvr_get_eye_from_head_matrix(gvr, GVR_LEFT_EYE), head_view);
-/// const gvr::Mat4f right_eye_view = MatrixMultiply(
-/// gvr_get_eye_from_head_matrix(gvr, GVR_RIGHT_EYE), head_view);
-///
-/// // Insert client rendering code here.
-///
-/// AppSetRenderTarget(offscreen_texture_id);
-///
-/// AppDoSomeRenderingForEye(
-/// gvr_buffer_viewport_get_source_uv(left_eye_view),
-/// left_eye_matrix);
-/// AppDoSomeRenderingForEye(
-/// gvr_buffer_viewport_get_source_uv(right_eye_view),
-/// right_eye_matrix);
-/// AppSetRenderTarget(primary_display);
-///
-/// gvr_frame_submit(&frame, viewport_list, head_view);
-/// }
-///
-/// // Cleanup memory.
-/// gvr_buffer_viewport_list_destroy(&viewport_list);
-/// gvr_buffer_viewport_destroy(&left_eye_vp);
-/// gvr_buffer_viewport_destroy(&right_eye_vp);
-///
-/// #ifdef __ANDROID__
-/// // On Android, The Java GvrLayout owns the gvr_context.
-/// #else
-/// gvr_destroy(gvr);
-/// #endif
-///
-/// Head tracking is enabled by default, and will begin as soon as the
-/// gvr_context is created. The client should call gvr_pause_tracking() and
-/// gvr_resume_tracking() when the app is paused and resumed, respectively.
-///
-/// Note: Unless otherwise noted, the functions in this API may not be
-/// thread-safe with respect to the gvr_context, and it is up the caller to use
-/// the API in a thread-safe manner.
-///
-/// @{
-
-/// Creates a new gvr instance.
-///
-/// The instance must remain valid as long as any GVR object is in use. When
-/// the application no longer needs to use the GVR SDK, call gvr_destroy().
-///
-///
-/// On Android, the gvr_context should *almost always* be obtained from the Java
-/// GvrLayout object, rather than explicitly created here. The GvrLayout should
-/// live in the app's View hierarchy, and its use is required to ensure
-/// consistent behavior across all varieties of GVR-compatible viewers. See
-/// the Java GvrLayout and GvrApi documentation for more details.
-///
-#ifdef __ANDROID__
-/// @param env The JNIEnv associated with the current thread.
-/// @param app_context The Android application context. This must be the
-/// application context, NOT an Activity context (Note: from any Android
-/// Activity in your app, you can call getApplicationContext() to
-/// retrieve the application context).
-/// @param class_loader The class loader to use when loading Java classes.
-/// This must be your app's main class loader (usually accessible through
-/// activity.getClassLoader() on any of your Activities).
-///
-/// @return Pointer to the created gvr instance, NULL on failure.
-gvr_context* gvr_create(JNIEnv* env, jobject app_context, jobject class_loader);
-#else
-/// @return Pointer to the created gvr instance, NULL on failure.
-gvr_context* gvr_create();
-#endif // #ifdef __ANDROID__
-
-/// Gets the current GVR runtime version.
-///
-/// Note: This runtime version may differ from the version against which the
-/// client app is compiled, as defined by the semantic version components in
-/// gvr_version.h.
-///
-/// @return The version as a gvr_version.
-gvr_version gvr_get_version();
-
-/// Gets a string representation of the current GVR runtime version. This is of
-/// the form "MAJOR.MINOR.PATCH".
-///
-/// Note: This runtime version may differ from the version against which the
-/// client app is compiled, as defined in gvr_version.h by
-/// GVR_SDK_VERSION_STRING.
-///
-/// @return The version as a static char pointer.
-const char* gvr_get_version_string();
-
-/// Gets the current GVR error code, or GVR_ERROR_NONE if there is no error.
-/// This function doesn't clear the error code; see gvr_clear_error().
-///
-/// @param gvr Pointer to the gvr instance.
-/// @return The current gvr_error code, or GVR_ERROR_NONE if no error has
-/// occurred.
-int32_t gvr_get_error(gvr_context* gvr);
-
-/// Clears the current GVR error code, and returns the error code that was
-/// cleared.
-///
-/// @param gvr Pointer to the gvr instance.
-/// @return The gvr_error code that was cleared by this function, or
-/// GVR_ERROR_NONE if no error has occurred.
-int32_t gvr_clear_error(gvr_context* gvr);
-
-/// Gets a human-readable string representing the given error code.
-///
-/// @param error_code The gvr_error code.
-/// @return A human-readable string representing the error code.
-const char* gvr_get_error_string(int32_t error_code);
-
-/// Polls the event queue, populating the provided event if available while also
-/// popping it from the event queue.
-///
-/// Note that it is the caller's responsibility for querying the event queue
-/// in a timely fashion, as it will otherwise be flushed periodically.
-///
-/// @param gvr_context The current context.
-/// @param event_out The event to populate. This will be populated with a valid
-/// gvr_event iff the result is GVR_NO_ERROR.
-/// @return GVR_ERROR_NONE if an event was available, otherwise
-/// GVR_ERROR_NO_EVENT_AVAILABLE.
-int32_t gvr_poll_event(gvr_context* gvr, gvr_event* event_out);
-
-/// Gets a read-only handle to the current global set of GVR-related properties.
-///
-/// @param gvr_context The current context.
-/// @return gvr_properties An opaque handle to the current, global properties
-/// instance. Note that this handle is valid only as long as the provided
-/// context is valid, and must not be used after the context is destroyed.
-const gvr_properties* gvr_get_current_properties(gvr_context* gvr);
-
-/// Queries the given property's value, populating the provided value if
-/// available.
-///
-/// @param gvr_properties The set of properties to query.
-/// @param property_key The property being queried.
-/// @return GVR_ERROR_NONE if the property was available, otherwise
-/// GVR_ERROR_NO_PROPERTY_AVAILABLE.
-int32_t gvr_properties_get(const gvr_properties* properties,
- int32_t property_key, gvr_value* value_out);
-
-/// Returns an opaque struct containing information about user preferences.
-///
-/// The returned struct will remain valid as long as the context is valid.
-/// The returned struct may be updated when the user changes their preferences,
-/// so this function only needs to be called once, and calling it multiple
-/// times will return the same object each time.
-///
-/// @param gvr Pointer to the gvr instance.
-/// @return An opaque struct containing information about user preferences.
-const gvr_user_prefs* gvr_get_user_prefs(gvr_context* gvr);
-
-/// Returns the controller handedness of the given gvr_user_prefs struct.
-///
-/// @param user_prefs Pointer to the gvr_user_prefs object returned by
-/// gvr_get_user_prefs.
-/// @return Either GVR_CONTROLLER_RIGHT_HANDED or GVR_CONTROLLER_LEFT_HANDED
-/// depending on which hand the user holds the controller in.
-int32_t gvr_user_prefs_get_controller_handedness(
- const gvr_user_prefs* user_prefs);
-
-/// Destroys a gvr_context instance. The parameter will be nulled by this
-/// operation. Once this function is called, the behavior of any subsequent
-/// call to a GVR SDK function that references objects created from this
-/// context is undefined.
-///
-/// @param gvr Pointer to a pointer to the gvr instance to be destroyed and
-/// nulled.
-void gvr_destroy(gvr_context** gvr);
-
-/// Initializes necessary GL-related objects and uses the current thread and
-/// GL context for rendering. Please make sure that a valid GL context is
-/// available when this function is called.
-///
-/// @param gvr Pointer to the gvr instance to be initialized.
-void gvr_initialize_gl(gvr_context* gvr);
-
-/// Gets whether asynchronous reprojection is currently enabled.
-///
-/// If enabled, frames will be collected by the rendering system and
-/// asynchronously re-projected in sync with the scanout of the display. This
-/// feature may not be available on every platform, and requires a
-/// high-priority render thread with special extensions to function properly.
-///
-/// Note: On Android, this feature can be enabled solely via the GvrLayout Java
-/// instance which (indirectly) owns this gvr_context. The corresponding
-/// method call is GvrLayout.setAsyncReprojectionEnabled().
-///
-/// Note: Because of the above requirements, asynchronous reprojection is only
-/// currently available on Daydream-ready Android devices. This function will
-/// always return false on other devices.
-///
-/// @param gvr Pointer to the gvr instance.
-/// @return Whether async reprojection is enabled. Defaults to false.
-bool gvr_get_async_reprojection_enabled(const gvr_context* gvr);
-
-/// Gets the recommended buffer viewport configuration, populating a previously
-/// allocated gvr_buffer_viewport_list object. The updated values include the
-/// per-eye recommended viewport and field of view for the target.
-///
-/// When the recommended viewports are used for distortion rendering, this
-/// method should always be called after calling refresh_viewer_profile(). That
-/// will ensure that the populated viewports reflect the currently paired
-/// viewer.
-///
-/// This function assumes that the client is *not* using multiview to render to
-/// multiple layers simultaneously.
-///
-/// @param gvr Pointer to the gvr instance from which to get the viewports.
-/// @param viewport_list Pointer to a previously allocated viewport list. This
-/// will be populated with the recommended buffer viewports and resized if
-/// necessary.
-void gvr_get_recommended_buffer_viewports(
- const gvr_context* gvr, gvr_buffer_viewport_list* viewport_list);
-
-/// Gets the screen (non-distorted) buffer viewport configuration, populating a
-/// previously allocated gvr_buffer_viewport_list object. The updated values
-/// include the per-eye recommended viewport and field of view for the target.
-///
-/// @param gvr Pointer to the gvr instance from which to get the viewports.
-/// @param viewport_list Pointer to a previously allocated viewport list. This
-/// will be populated with the screen buffer viewports and resized if
-/// necessary.
-void gvr_get_screen_buffer_viewports(const gvr_context* gvr,
- gvr_buffer_viewport_list* viewport_list);
-
-/// Returns the maximum effective size for the client's render target, given the
-/// parameters of the head mounted device selected. At this resolution, we have
-/// a 1:1 ratio between source pixels and screen pixels in the most magnified
-/// region of the screen. Applications should rarely, if ever, need to render
-/// to a larger target, as it will simply result in sampling artifacts.
-///
-/// Note that this is probably too large for most applications to use as a
-/// render target size. Applications should scale this value to be appropriate
-/// to their graphical load.
-///
-/// @param gvr Pointer to the gvr instance from which to get the size.
-///
-/// @return Maximum effective size for the target render target.
-gvr_sizei gvr_get_maximum_effective_render_target_size(const gvr_context* gvr);
-
-/// Returns a non-distorted size for the screen, given the parameters
-/// of the phone and/or the head mounted device selected.
-///
-/// @param gvr Pointer to the gvr instance from which to get the size.
-///
-/// @return Screen (non-distorted) size for the render target.
-gvr_sizei gvr_get_screen_target_size(const gvr_context* gvr);
-
-// Sets the size of the underlying render surface.
-//
-// By default, it is assumed that the display size matches the surface
-// size. If that is the case for the client app, this method need never be
-// called. However, in certain cases (e.g., hardware scaling), this will not
-// always hold, in which case the distortion pass must be informed of the
-// custom surface size.
-//
-// Note that the caller is responsible for resizing any BufferSpec objects
-// created before this function is called. Otherwise there will be rendering
-// artifacts, such as edges appearing pixelated. This function will change the
-// result of get_maximum_effective_render_target_size(), so that function can be
-// used to compute the appropriate size for buffers.
-//
-// @param gvr Pointer to the gvr_context instance.
-// @param surface_size_pixels The size in pixels of the display surface. If
-// non-empty, this will be used in conjunction with the current display to
-// perform properly scaled distortion. If empty, it is assumed that the
-// rendering surface dimensions match that of the active display.
-void gvr_set_surface_size(gvr_context* gvr, gvr_sizei surface_size_pixels);
-
-/// @deprecated Use the Swap Chain API instead. This function exists only to
-/// support legacy rendering pathways for Cardboard devices. It is
-/// incompatible with the low-latency experiences supported by async
-/// reprojection.
-///
-/// Performs postprocessing, including lens distortion, on the contents of the
-/// passed texture and shows the result on the screen. Lens distortion is
-/// determined by the parameters of the viewer encoded in its QR code. The
-/// passed texture is not modified.
-///
-/// If the application does not call gvr_initialize_gl() before calling this
-/// function, the results are undefined.
-///
-/// @param gvr Pointer to the gvr instance which will do the distortion.
-/// @param texture_id The OpenGL ID of the texture that contains the next frame
-/// to be displayed.
-/// @param viewport_list Rendering parameters.
-/// @param head_space_from_start_space This parameter is ignored.
-/// @param target_presentation_time This parameter is ignored.
-void gvr_distort_to_screen(gvr_context* gvr, int32_t texture_id,
- const gvr_buffer_viewport_list* viewport_list,
- gvr_mat4f head_space_from_start_space,
- gvr_clock_time_point target_presentation_time);
-
-/// Queries whether a particular GVR feature is supported by the underlying
-/// platform. This should be called after gvr_initialize_gl().
-///
-/// @param gvr The context to query against.
-/// @param feature The gvr_feature type being queried.
-/// @return true if feature is supported, false otherwise.
-bool gvr_is_feature_supported(const gvr_context* gvr, int32_t feature);
-
-/// @}
-
-/////////////////////////////////////////////////////////////////////////////
-// Viewports and viewport lists
-/////////////////////////////////////////////////////////////////////////////
-/// @defgroup viewport Viewports and viewport lists
-/// @brief Objects to define the mapping between the application's rendering
-/// output and the user's field of view.
-/// @{
-
-/// Creates a gvr_buffer_viewport instance.
-gvr_buffer_viewport* gvr_buffer_viewport_create(gvr_context* gvr);
-
-/// Frees a gvr_buffer_viewport instance and clears the pointer.
-void gvr_buffer_viewport_destroy(gvr_buffer_viewport** viewport);
-
-/// Gets the UV coordinates specifying where the output buffer is sampled.
-///
-/// @param viewport The buffer viewport.
-/// @return UV coordinates as a rectangle.
-gvr_rectf gvr_buffer_viewport_get_source_uv(
- const gvr_buffer_viewport* viewport);
-
-/// Sets the UV coordinates specifying where the output buffer should be
-/// sampled when compositing the final distorted image.
-///
-/// @param viewport The buffer viewport.
-/// @param uv The new UV coordinates for sampling. The coordinates must be
-/// valid, that is, left <= right and bottom <= top. Otherwise an empty
-/// source region is set, which will result in no output for this viewport.
-void gvr_buffer_viewport_set_source_uv(gvr_buffer_viewport* viewport,
- gvr_rectf uv);
-
-/// Retrieves the field of view for the referenced buffer region.
-///
-/// This is a helper that converts the stored projection matrix to a field of
-/// view. Note that if the previously set projection matrix cannot be expressed
-/// as a view frustum aligned with the eye's optical axis, the result will be
-/// incorrect.
-///
-/// @param viewport The buffer viewport.
-/// @return The field of view of the rendered image, in degrees.
-gvr_rectf gvr_buffer_viewport_get_source_fov(
- const gvr_buffer_viewport* viewport);
-
-/// Sets the field of view for the viewport contents.
-///
-/// This is a helper that sets the projection matrix in such a way that the
-/// viewport's contents fill the specified FOV around the eye's optical axis.
-///
-/// @param viewport The buffer viewport.
-/// @param fov The field of view to use when compositing the rendered image,
-/// in degrees.
-void gvr_buffer_viewport_set_source_fov(gvr_buffer_viewport* viewport,
- gvr_rectf fov);
-
-/// Gets the matrix that positions the viewport in eye space.
-///
-/// @param viewport The buffer viewport.
-/// @return Matrix that transforms a quad with vertices (-1, -1, 0), (1, -1, 0),
-/// (-1, 1, 0), (1, 1, 0) representing the viewport contents to its desired
-/// eye space position for the target eye.
-gvr_mat4f gvr_buffer_viewport_get_transform(
- const gvr_buffer_viewport* viewport);
-
-/// Sets the matrix that positions the viewport in eye space.
-///
-/// @param viewport The buffer viewport.
-/// @param transform Matrix that transforms a quad with vertices (-1, -1, 0),
-/// (1, -1, 0), (-1, 1, 0), (1, 1, 0) representing the viewport contents to
-/// its desired eye space position for the target eye.
-void gvr_buffer_viewport_set_transform(gvr_buffer_viewport* viewport,
- gvr_mat4f transform);
-
-/// Gets the target logical eye for the specified viewport.
-///
-/// @param viewport The buffer viewport.
-/// @return Index of the target logical eye for this viewport.
-int32_t gvr_buffer_viewport_get_target_eye(const gvr_buffer_viewport* viewport);
-
-/// Sets the target logical eye for the specified viewport.
-///
-/// @param viewport The buffer viewport.
-/// @param index Index of the target logical eye.
-void gvr_buffer_viewport_set_target_eye(gvr_buffer_viewport* viewport,
- int32_t index);
-
-/// Gets the index of the source buffer from which the viewport reads its
-/// undistorted pixels.
-///
-/// @param viewport The buffer viewport.
-/// @return Index of the source buffer. This corresponds to the index in the
-/// list of buffer specs that was passed to gvr_swap_chain_create().
-int32_t gvr_buffer_viewport_get_source_buffer_index(
- const gvr_buffer_viewport* viewport);
-
-/// Sets the buffer from which the viewport reads its undistorted pixels.
-///
-/// To use the contents of the external surface as buffer contents, associate an
-/// external surface with the viewport by calling
-/// gvr_buffer_viewport_set_external_surface_id(), then call this function and
-/// pass GVR_BUFFER_INDEX_EXTERNAL_SURFACE.
-///
-/// @param viewport The buffer viewport.
-/// @param buffer_index The index of the source buffer. This is either an index
-/// in the list of buffer specs that was passed to
-/// gvr_swap_chain_create(), or GVR_BUFFER_INDEX_EXTERNAL_SURFACE.
-void gvr_buffer_viewport_set_source_buffer_index(
- gvr_buffer_viewport* viewport, int32_t buffer_index);
-
-/// Gets the ID of the externally-managed Surface texture from which this
-/// viewport reads undistored pixels.
-///
-/// @param viewport The buffer viewport.
-/// @return ID of the externally-managed Surface of undistorted pixels.
-int32_t gvr_buffer_viewport_get_external_surface_id(
- const gvr_buffer_viewport* viewport);
-
-/// Sets the ID of the externally-managed Surface texture from which this
-/// viewport reads. The ID is issued by GvrLayout. If this viewport does not
-/// read from an external surface, this should be set to
-/// GVR_EXTERNAL_SURFACE_ID_NONE, which is also the default value. If it does
-/// read from an external surface, set this to the ID obtained from GvrLayout
-/// and set the source buffer index to the special value
-/// GVR_BUFFER_INDEX_EXTERNAL_SURFACE.
-///
-/// @param viewport The buffer viewport.
-/// @param external_surface_id The ID of the surface to read from.
-void gvr_buffer_viewport_set_external_surface_id(
- gvr_buffer_viewport* viewport, int32_t external_surface_id);
-
-/// Gets the type of reprojection to perform on the specified viewport.
-///
-/// @param viewport The buffer viewport.
-/// @return Type of reprojection that is applied to the viewport.
-int32_t gvr_buffer_viewport_get_reprojection(
- const gvr_buffer_viewport* viewport);
-
-/// Sets the type of reprojection to perform on the specified viewport.
-/// Viewports that display world content should use full reprojection.
-/// Viewports that display head-locked UI should disable reprojection to avoid
-/// excessive judder. The default is to perform full reprojection.
-///
-/// @param viewport The buffer viewport.
-/// @param reprojection Type of reprojection that will be applied to the passed
-/// viewport.
-void gvr_buffer_viewport_set_reprojection(gvr_buffer_viewport* viewport,
- int32_t reprojection);
-
-/// Sets the layer in a multiview buffer from which the viewport should sample.
-///
-/// @param layer_index The layer in the array texture that distortion samples
-/// from. Must be non-negative. Defaults to 0.
-void gvr_buffer_viewport_set_source_layer(gvr_buffer_viewport* viewport,
- int32_t layer_index);
-
-/// Gets the opacity to perform on the specified viewport.
-///
-/// @param viewport The buffer viewport.
-/// @return opacity that is applied to the viewport, default to be 1.
-float gvr_buffer_viewport_get_opacity(const gvr_buffer_viewport* viewport);
-
-/// Sets the opacity to perform on the specified viewport.
-///
-/// @param viewport The buffer viewport.
-/// @param opacity Opacity that will be applied per viewport.
-/// It should be within [0,1], default to be 1.
-void gvr_buffer_viewport_set_opacity(gvr_buffer_viewport* viewport,
- float opacity);
-
-/// Compares two gvr_buffer_viewport instances and returns true if they specify
-/// the same view mapping.
-///
-/// @param a Instance of a buffer viewport.
-/// @param b Another instance of a buffer viewport.
-/// @return True if the passed viewports are the same.
-bool gvr_buffer_viewport_equal(const gvr_buffer_viewport* a,
- const gvr_buffer_viewport* b);
-
-/// Creates a new, empty list of viewports. The viewport list defines how the
-/// application's rendering output should be transformed into the stabilized,
-/// lens-distorted image that is sent to the screen.
-///
-/// The caller should populate the returned viewport using one of:
-/// - gvr_get_recommended_buffer_viewports()
-/// - gvr_get_screen_buffer_viewports()
-/// - gvr_buffer_viewport_list_set_item()
-///
-/// @param gvr Pointer the gvr instance from which to allocate the viewport
-/// list.
-/// @return Pointer to an allocated gvr_buffer_viewport_list object. The caller
-// is responsible for calling gvr_buffer_viewport_list_destroy() on the
-/// returned object when it is no longer needed.
-gvr_buffer_viewport_list* gvr_buffer_viewport_list_create(
- const gvr_context* gvr);
-
-/// Destroys a gvr_buffer_viewport_list instance. The parameter will be nulled
-/// by this operation.
-///
-/// @param viewport_list Pointer to a pointer to the viewport list instance to
-/// be destroyed and nulled.
-void gvr_buffer_viewport_list_destroy(gvr_buffer_viewport_list** viewport_list);
-
-/// Returns the size of the given viewport list.
-///
-/// @param viewport_list Pointer to a viewport list.
-/// @return The number of entries in the viewport list.
-size_t gvr_buffer_viewport_list_get_size(
- const gvr_buffer_viewport_list* viewport_list);
-
-/// Retrieve a buffer viewport entry from a list.
-///
-/// @param viewport_list Pointer to the previously allocated viewport list.
-/// @param index Zero-based index of the viewport entry to query. Must be
-/// smaller than the list size.
-/// @param viewport The buffer viewport structure that will be populated with
-/// retrieved data.
-void gvr_buffer_viewport_list_get_item(
- const gvr_buffer_viewport_list* viewport_list, size_t index,
- gvr_buffer_viewport* viewport);
-
-/// Update an element of the viewport list or append a new one at the end.
-///
-/// @param viewport_list Pointer to a previously allocated viewport list.
-/// @param index Index of the buffer viewport entry to update. If the
-/// `viewport_list` size is equal to the index, a new viewport entry will be
-/// added. The `viewport_list` size must *not* be less than the index value.
-/// @param viewport A pointer to the buffer viewport object.
-void gvr_buffer_viewport_list_set_item(gvr_buffer_viewport_list* viewport_list,
- size_t index,
- const gvr_buffer_viewport* viewport);
-
-/// @}
-
-/////////////////////////////////////////////////////////////////////////////
-// Swapchains and frames
-/////////////////////////////////////////////////////////////////////////////
-/// @defgroup swap_chain Swap chains and frames
-/// @brief Functions to create a swap chain, manipulate it and submit frames
-/// for lens distortion and presentation on the screen.
-/// @{
-
-/// Creates a default buffer specification.
-gvr_buffer_spec* gvr_buffer_spec_create(gvr_context* gvr);
-
-/// Destroy the buffer specification and null the pointer.
-void gvr_buffer_spec_destroy(gvr_buffer_spec** spec);
-
-/// Gets the size of the buffer to be created.
-///
-/// @param spec Buffer specification.
-/// @return Size of the pixel buffer. The default is equal to the recommended
-/// render target size at the time when the specification was created.
-gvr_sizei gvr_buffer_spec_get_size(const gvr_buffer_spec* spec);
-
-/// Sets the size of the buffer to be created.
-///
-/// @param spec Buffer specification.
-/// @param size The size. Width and height must both be greater than zero.
-/// Otherwise, the application is aborted.
-void gvr_buffer_spec_set_size(gvr_buffer_spec* spec, gvr_sizei size);
-
-/// Gets the number of samples per pixel in the buffer to be created.
-///
-/// @param spec Buffer specification.
-/// @return Value >= 1 giving the number of samples. 1 means multisampling is
-/// disabled. Negative values and 0 are never returned.
-int32_t gvr_buffer_spec_get_samples(const gvr_buffer_spec* spec);
-
-/// Sets the number of samples per pixel in the buffer to be created.
-///
-/// @param spec Buffer specification.
-/// @param num_samples The number of samples. Negative values are an error.
-/// The values 0 and 1 are treated identically and indicate that
-// multisampling should be disabled.
-void gvr_buffer_spec_set_samples(gvr_buffer_spec* spec, int32_t num_samples);
-
-/// Sets the color format for the buffer to be created. Default format is
-/// GVR_COLOR_FORMAT_RGBA_8888. For all alpha-containing formats, the pixels
-/// are expected to be premultiplied with alpha. In other words, the 60% opaque
-/// primary green color is (0.0, 0.6, 0.0, 0.6).
-///
-/// @param spec Buffer specification.
-/// @param color_format The color format for the buffer. Valid formats are in
-/// the gvr_color_format_type enum.
-void gvr_buffer_spec_set_color_format(gvr_buffer_spec* spec,
- int32_t color_format);
-
-/// Sets the depth and stencil format for the buffer to be created. Currently,
-/// only packed stencil formats are supported. Default format is
-/// GVR_DEPTH_STENCIL_FORMAT_DEPTH_16.
-///
-/// @param spec Buffer specification.
-/// @param depth_stencil_format The depth and stencil format for the buffer.
-/// Valid formats are in the gvr_depth_stencil_format_type enum.
-void gvr_buffer_spec_set_depth_stencil_format(gvr_buffer_spec* spec,
- int32_t depth_stencil_format);
-
-/// Sets the number of layers in a framebuffer backed by an array texture.
-///
-/// Default is 1, which means a non-layered texture will be created.
-/// Not all platforms support multiple layers, so clients can call
-/// gvr_is_feature_supported(GVR_FEATURE_MULTIVIEW) to check.
-///
-/// @param spec Buffer specification.
-/// @param num_layers The number of layers in the array texture.
-void gvr_buffer_spec_set_multiview_layers(gvr_buffer_spec* spec,
- int32_t num_layers);
-
-/// Creates a swap chain from the given buffer specifications.
-/// This is a potentially time-consuming operation. All frames within the
-/// swapchain will be allocated. Once rendering is stopped, call
-/// gvr_swap_chain_destroy() to free GPU resources. The passed gvr_context must
-/// not be destroyed until then.
-///
-/// Swap chains can have no buffers. This is useful when only displaying
-/// external surfaces. When `count` is zero, `buffers` must be null.
-///
-/// @param gvr GVR instance for which a swap chain will be created.
-/// @param buffers Array of pixel buffer specifications. Each frame in the
-/// swap chain will be composed of these buffers.
-/// @param count Number of buffer specifications in the array.
-/// @return Opaque handle to the newly created swap chain.
-gvr_swap_chain* gvr_swap_chain_create(gvr_context* gvr,
- const gvr_buffer_spec** buffers,
- int32_t count);
-
-/// Destroys the swap chain and nulls the pointer that is passed in. This
-/// should be called after rendering is finished to free all the buffers that
-/// have been allocated in the swap chain.
-///
-/// @param swap_chain The swap chain to destroy.
-void gvr_swap_chain_destroy(gvr_swap_chain** swap_chain);
-
-/// Gets the number of buffers in each frame of the swap chain.
-///
-/// @param swap_chain The swap chain to query.
-/// @return The number of buffers in the swap chain.
-int32_t gvr_swap_chain_get_buffer_count(const gvr_swap_chain* swap_chain);
-
-/// Retrieves the size of the specified pixel buffer. Note that if the buffer
-/// was resized while the current frame was acquired, the return value will be
-/// different than the value obtained from the equivalent function for the
-/// current frame.
-///
-/// @param swap_chain The swap chain.
-/// @param index Index of the pixel buffer.
-/// @return Size of the specified pixel buffer in frames that will be returned
-/// from gvr_swap_chain_acquire_frame().
-gvr_sizei gvr_swap_chain_get_buffer_size(const gvr_swap_chain* swap_chain,
- int32_t index);
-
-/// Resizes the specified pixel buffer to the given size. The frames are resized
-/// when they are unused, so the currently acquired frame will not be resized
-/// immediately.
-///
-/// @param swap_chain The swap chain.
-/// @param index Index of the pixel buffer to resize.
-/// @param size New size for the specified pixel buffer.
-void gvr_swap_chain_resize_buffer(gvr_swap_chain* swap_chain, int32_t index,
- gvr_sizei size);
-
-/// Acquires a frame from the swap chain for rendering. Buffers that are part of
-/// the frame can then be bound with gvr_frame_bind_buffer(). Once the frame
-/// is finished and all its constituent buffers are ready, call
-/// gvr_frame_submit() to display it while applying lens distortion.
-///
-/// When this is called, the current thread's GL context must be the same
-/// context that was current when gvr_initialize_gl() was called, or at least be
-/// in a share group with the initialization context.
-///
-/// @param swap_chain The swap chain.
-/// @return Handle to the acquired frame. NULL if the swap chain is invalid,
-/// or if acquire has already been called on this swap chain.
-gvr_frame* gvr_swap_chain_acquire_frame(gvr_swap_chain* swap_chain);
-
-/// Binds a pixel buffer that is part of the frame to the OpenGL framebuffer.
-///
-/// @param frame Frame handle acquired from the swap chain.
-/// @param index Index of the pixel buffer to bind. This corresponds to the
-/// index in the buffer spec list that was passed to
-/// gvr_swap_chain_create().
-void gvr_frame_bind_buffer(gvr_frame* frame, int32_t index);
-
-/// Unbinds any buffers bound from this frame and binds the default OpenGL
-/// framebuffer.
-void gvr_frame_unbind(gvr_frame* frame);
-
-/// Returns the dimensions of the pixel buffer with the specified index. Note
-/// that a frame that was acquired before resizing a swap chain buffer will not
-/// be resized until it is submitted to the swap chain.
-///
-/// @param frame Frame handle.
-/// @param index Index of the pixel buffer to inspect.
-/// @return Dimensions of the specified pixel buffer.
-gvr_sizei gvr_frame_get_buffer_size(const gvr_frame* frame, int32_t index);
-
-/// Gets the name (ID) of the framebuffer object associated with the specified
-/// buffer. The OpenGL state is not modified.
-///
-/// @param frame Frame handle.
-/// @param index Index of a pixel buffer.
-/// @return OpenGL object name (ID) of a framebuffer object which can be used
-/// to render into the buffer. The ID is valid only until the frame is
-/// submitted.
-int32_t gvr_frame_get_framebuffer_object(const gvr_frame* frame, int32_t index);
-
-/// Gets the hardware buffer backing the specified frame buffer.
-///
-/// Hardware buffers (Android NDK type AHardwareBuffer) are used to back frames
-/// if asynchronous reprojection is enabled and GVR_FEATURE_HARDWARE_BUFFERS is
-/// supported (currently on Android O and later Android versions). See the
-/// documentation for the feature enum value for further information.
-///
-/// There is no need to acquire or release the AHardwareBuffer. The swap chain
-/// maintains a reference to it while the frame is acquired.
-///
-/// @param frame The gvr_frame from which to obtain the buffer.
-/// @param index Index of the pixel buffer.
-/// @return Pointer to AHardwareBuffer backing the frame's pixel buffer where
-/// available, or NULL otherwise.
-AHardwareBuffer* gvr_frame_get_hardware_buffer(const gvr_frame* frame,
- int32_t index);
-
-/// Submits the frame for distortion and display on the screen. The passed
-/// pointer is nulled to prevent reuse.
-///
-/// Note: On Cardboard devices, this function makes OpenGL commands in the
-/// current thread's GL context; this can affect various GL state such as
-/// texture bindings, depth testing, backface culling, and blending.
-///
-/// @param frame The frame to submit.
-/// @param list Buffer view configuration to be used for this frame.
-/// @param head_space_from_start_space Transform from start space (space with
-/// head at the origin at last tracking reset) to head space (space with
-/// head at the origin and axes aligned to the view vector).
-void gvr_frame_submit(gvr_frame** frame, const gvr_buffer_viewport_list* list,
- gvr_mat4f head_space_from_start_space);
-
-/// Resets the OpenGL framebuffer binding to what it was at the time the
-/// passed gvr_context was created.
-void gvr_bind_default_framebuffer(gvr_context* gvr);
-
-/// @}
-
-/////////////////////////////////////////////////////////////////////////////
-// Head tracking
-/////////////////////////////////////////////////////////////////////////////
-/// @defgroup Headtracking Head tracking
-/// @brief Functions for managing head tracking.
-/// @{
-
-/// Gets the current monotonic system time.
-///
-/// @return The current monotonic system time.
-gvr_clock_time_point gvr_get_time_point_now();
-
-/// @deprecated Calls to this method can be safely replaced by calls to
-/// gvr_get_head_space_from_start_space_transform. The new API reflects that
-/// the call *can* return a full 6DoF transform when supported by both the
-/// host platform and the client application.
-///
-/// Gets the rotation from start space to head space. The head space is a
-/// space where the head is at the origin and faces the -Z direction.
-///
-/// @param gvr Pointer to the gvr instance from which to get the pose.
-/// @param time The time at which to get the head pose. The time should be in
-/// the future. If the time is not in the future, it will be clamped to now.
-/// @return A matrix representation of the rotation from start space (the space
-/// where the head was last reset) to head space (the space with the head
-/// at the origin, and the axes aligned to the view vector).
-gvr_mat4f gvr_get_head_space_from_start_space_rotation(
- const gvr_context* gvr, const gvr_clock_time_point time);
-
-/// Gets the position and rotation from start space to head space. The head
-/// space is a space where the head is at the origin and faces the -Z direction.
-///
-/// For platforms that support 6DoF head tracking, the app may also be required
-/// to declare support for 6DoF in order to receive a fully formed 6DoF pose,
-/// e.g., on Android, this requires declaration of support for at least version
-/// 1 of the "android.hardware.vr.headtracking" feature in the manifest.
-///
-/// @param gvr Pointer to the gvr instance from which to get the pose.
-/// @param time The time at which to get the head pose. The time should be in
-/// the future. If the time is not in the future, it will be clamped to now.
-/// @return A matrix representation of the position and rotation from start
-/// space (the space where the head was last reset) to head space (the
-/// space with the head at the origin, and the axes aligned to the view
-/// vector).
-gvr_mat4f gvr_get_head_space_from_start_space_transform(
- const gvr_context* gvr, const gvr_clock_time_point time);
-
-/// Applies a simple neck model translation based on the rotation of the
-/// provided head pose.
-///
-/// Note: Neck model application may not be appropriate for all tracking
-/// scenarios, e.g., when tracking is non-biological.
-///
-/// @param gvr Pointer to the context instance from which the pose was obtained.
-/// @param head_space_from_start_space_rotation The head rotation as returned by
-/// gvr_get_head_space_from_start_space_rotation().
-/// @param factor A scaling factor for the neck model offset, clamped from 0 to
-/// 1. This should be 1 for most scenarios, while 0 will effectively disable
-/// neck model application. This value can be animated to smoothly
-/// interpolate between alternative (client-defined) neck models.
-/// @return The new head pose with the neck model applied.
-gvr_mat4f gvr_apply_neck_model(const gvr_context* gvr,
- gvr_mat4f head_space_from_start_space_rotation,
- float factor);
-
-/// Pauses head tracking, disables all sensors (to save power).
-///
-/// @param gvr Pointer to the gvr instance for which tracking will be paused and
-/// sensors disabled.
-void gvr_pause_tracking(gvr_context* gvr);
-
-/// Resumes head tracking, re-enables all sensors.
-///
-/// @param gvr Pointer to the gvr instance for which tracking will be resumed.
-void gvr_resume_tracking(gvr_context* gvr);
-
-/// @deprecated Calls to this method can be safely replaced by calls to
-/// gvr_recenter_tracking. This accomplishes the same effects but avoids the
-/// undesirable side-effects of a full reset (temporary loss of tracking
-/// quality).
-///
-/// Resets head tracking.
-///
-/// Only to be used by Cardboard apps. Daydream apps must not call this. On the
-/// Daydream platform, recentering is handled automatically and should never
-/// be triggered programmatically by applications. Hybrid apps that support both
-/// Cardboard and Daydream must only call this function when in Cardboard mode
-/// (that is, when the phone is paired with a Cardboard viewer), never in
-/// Daydream mode.
-///
-/// @param gvr Pointer to the gvr instance for which tracking will be reseted.
-void gvr_reset_tracking(gvr_context* gvr);
-
-/// Recenters the head orientation (resets the yaw to zero, leaving pitch and
-/// roll unmodified).
-///
-/// Only to be used by Cardboard apps. Daydream apps must not call this. On the
-/// Daydream platform, recentering is handled automatically and should never
-/// be triggered programmatically by applications. Hybrid apps that support both
-/// Cardboard and Daydream must only call this function when in Cardboard mode
-/// (that is, when the phone is paired with a Cardboard viewer), never in
-/// Daydream mode.
-///
-/// @param gvr Pointer to the gvr instance for which tracking will be
-/// recentered.
-void gvr_recenter_tracking(gvr_context* gvr);
-
-/// @}
-
-
-/////////////////////////////////////////////////////////////////////////////
-// Head mounted display.
-/////////////////////////////////////////////////////////////////////////////
-/// @defgroup HMD Head Mounted Display
-/// @brief Functions for managing viewer information.
-/// @{
-
-/// Sets the default viewer profile specified by viewer_profile_uri.
-/// The viewer_profile_uri that is passed in will be ignored if a valid
-/// viewer profile has already been stored on the device that the app
-/// is running on.
-///
-/// Note: This function has the potential of blocking for up to 30 seconds for
-/// each redirect if a shortened URI is passed in as argument. It will try to
-/// unroll the shortened URI for a maximum number of 5 times if the redirect
-/// continues. In that case, it is recommended to create a separate thread to
-/// call this function so that other tasks like rendering will not be blocked
-/// on this. The blocking can be avoided if a standard URI is passed in.
-///
-/// @param gvr Pointer to the gvr instance which to set the profile on.
-/// @param viewer_profile_uri A string that contains either the shortened URI or
-/// the standard URI representing the viewer profile that the app should be
-/// using. If the valid viewer profile can be found on the device, the URI
-/// that is passed in will be ignored and nothing will happen. Otherwise,
-/// gvr will look for the viewer profile specified by viewer_profile_uri,
-/// and it will be stored if found. Also, the values will be applied to gvr.
-/// A valid standard URI can be generated from this page:
-/// https://www.google.com/get/cardboard/viewerprofilegenerator/
-/// @return True if the viewer profile specified by viewer_profile_uri was
-/// successfully stored and applied, false otherwise.
-bool gvr_set_default_viewer_profile(gvr_context* gvr,
- const char* viewer_profile_uri);
-
-/// Refreshes gvr_context with the viewer profile that is stored on the device.
-/// If it can not find the viewer profile, nothing will happen.
-///
-/// @param gvr Pointer to the gvr instance to refresh the profile on.
-void gvr_refresh_viewer_profile(gvr_context* gvr);
-
-/// Gets the name of the viewer vendor.
-///
-/// @param gvr Pointer to the gvr instance from which to get the vendor.
-/// @return A pointer to the vendor name. May be NULL if no viewer is paired.
-/// WARNING: This method guarantees the validity of the returned pointer
-/// only until the next use of the `gvr` context. The string should be
-/// copied immediately if persistence is required.
-const char* gvr_get_viewer_vendor(const gvr_context* gvr);
-
-/// Gets the name of the viewer model.
-///
-/// @param gvr Pointer to the gvr instance from which to get the name.
-/// @return A pointer to the model name. May be NULL if no viewer is paired.
-/// WARNING: This method guarantees the validity of the returned pointer
-/// only until the next use of the `gvr` context. The string should be
-/// copied immediately if persistence is required.
-const char* gvr_get_viewer_model(const gvr_context* gvr);
-
-/// Gets the type of the viewer, as defined by gvr_viewer_type.
-///
-/// @param gvr Pointer to the gvr instance from which to get the viewer type.
-/// @return The gvr_viewer_type of the currently paired viewer.
-int32_t gvr_get_viewer_type(const gvr_context* gvr);
-
-/// Gets the transformation matrix to convert from Head Space to Eye Space for
-/// the given eye.
-///
-/// @param gvr Pointer to the gvr instance from which to get the matrix.
-/// @param eye Selected eye type.
-/// @return Transformation matrix from Head Space to selected Eye Space.
-gvr_mat4f gvr_get_eye_from_head_matrix(const gvr_context* gvr,
- const int32_t eye);
-
-/// Gets the window bounds.
-///
-/// @param gvr Pointer to the gvr instance from which to get the bounds.
-///
-/// @return Window bounds in physical pixels.
-gvr_recti gvr_get_window_bounds(const gvr_context* gvr);
-
-/// Computes the distorted point for a given point in a given eye. The
-/// distortion inverts the optical distortion caused by the lens for the eye.
-/// Due to chromatic aberration, the distortion is different for each
-/// color channel.
-///
-/// @param gvr Pointer to the gvr instance which will do the computing.
-/// @param eye The gvr_eye type (left or right).
-/// @param uv_in A point in screen eye Viewport Space in [0,1]^2 with (0, 0)
-/// in the lower left corner of the eye's viewport and (1, 1) in the
-/// upper right corner of the eye's viewport.
-/// @param uv_out A pointer to an array of (at least) 3 elements, with each
-/// element being a Point2f representing a point in render texture eye
-/// Viewport Space in [0,1]^2 with (0, 0) in the lower left corner of the
-/// eye's viewport and (1, 1) in the upper right corner of the eye's
-/// viewport.
-/// `uv_out[0]` is the corrected position of `uv_in` for the red channel
-/// `uv_out[1]` is the corrected position of `uv_in` for the green channel
-/// `uv_out[2]` is the corrected position of `uv_in` for the blue channel
-void gvr_compute_distorted_point(const gvr_context* gvr, const int32_t eye,
- const gvr_vec2f uv_in, gvr_vec2f uv_out[3]);
-
-/// @}
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-#if defined(__cplusplus) && !defined(GVR_NO_CPP_WRAPPER)
-namespace gvr {
-
-class GvrApi;
-
-/// Convenience C++ wrapper for gvr_user_prefs.
-class UserPrefs : public WrapperBase<const gvr_user_prefs> {
- public:
- using WrapperBase::WrapperBase;
-
- /// For more information, see gvr_user_prefs_get_controller_handedness().
- ControllerHandedness GetControllerHandedness() const {
- return static_cast<ControllerHandedness>(
- gvr_user_prefs_get_controller_handedness(cobj()));
- }
-};
-
-/// Convenience C++ wrapper for gvr_properties.
-class Properties : public WrapperBase<const gvr_properties> {
- public:
- using WrapperBase::WrapperBase;
-
- /// For more information, see gvr_properties_get().
- bool Get(int32_t property_key, Value* value_out) const {
- return gvr_properties_get(cobj(), property_key, value_out) ==
- GVR_ERROR_NONE;
- }
-};
-
-/// Convenience C++ wrapper for the opaque gvr_buffer_viewport type.
-/// The constructor allocates memory, so when used in tight loops, instances
-/// should be reused.
-class BufferViewport
- : public WrapperBase<gvr_buffer_viewport, gvr_buffer_viewport_destroy> {
- public:
- using WrapperBase::WrapperBase;
-
- /// For more information, see gvr_buffer_viewport_get_source_fov().
- Rectf GetSourceFov() const {
- return gvr_buffer_viewport_get_source_fov(cobj());
- }
-
- /// For more information, see gvr_buffer_viewport_set_source_fov().
- void SetSourceFov(const Rectf& fov) {
- gvr_buffer_viewport_set_source_fov(cobj(), fov);
- }
-
- /// For more information, see gvr_buffer_viewport_get_transform().
- Mat4f GetTransform() const {
- return gvr_buffer_viewport_get_transform(cobj());
- }
-
- /// For more information, see gvr_buffer_viewport_set_transform().
- void SetTransform(const Mat4f& transform) {
- gvr_buffer_viewport_set_transform(cobj(), transform);
- }
-
- /// For more information, see gvr_buffer_viewport_get_source_uv().
- Rectf GetSourceUv() const {
- return gvr_buffer_viewport_get_source_uv(cobj());
- }
-
- /// For more information, see gvr_buffer_viewport_set_source_uv().
- void SetSourceUv(const Rectf& uv) {
- gvr_buffer_viewport_set_source_uv(cobj(), uv);
- }
-
- /// For more information, see gvr_buffer_viewport_get_target_eye().
- Eye GetTargetEye() const {
- return static_cast<Eye>(gvr_buffer_viewport_get_target_eye(cobj()));
- }
-
- /// For more information, see gvr_buffer_viewport_set_target_eye().
- void SetTargetEye(Eye eye) {
- gvr_buffer_viewport_set_target_eye(cobj(), eye);
- }
-
- /// For more information, see gvr_buffer_viewport_get_source_buffer_index().
- int32_t GetSourceBufferIndex() const {
- return gvr_buffer_viewport_get_source_buffer_index(cobj());
- }
-
- /// For more information, see gvr_buffer_viewport_set_source_buffer_index().
- void SetSourceBufferIndex(int32_t buffer_index) {
- gvr_buffer_viewport_set_source_buffer_index(cobj(), buffer_index);
- }
-
- /// For more information, see gvr_buffer_viewport_get_external_surface_id().
- int32_t GetExternalSurfaceId() const {
- return gvr_buffer_viewport_get_external_surface_id(cobj());
- }
-
- /// For more information, see gvr_buffer_viewport_set_external_surface_id().
- void SetExternalSurfaceId(const int32_t external_surface_id) {
- gvr_buffer_viewport_set_external_surface_id(cobj(), external_surface_id);
- }
-
- /// For more information, see gvr_buffer_viewport_get_reprojection().
- gvr_reprojection GetReprojection() const {
- return static_cast<gvr_reprojection>(
- gvr_buffer_viewport_get_reprojection(cobj()));
- }
- /// For more information, see gvr_buffer_viewport_set_reprojection().
- void SetReprojection(gvr_reprojection reprojection) {
- gvr_buffer_viewport_set_reprojection(cobj(), reprojection);
- }
-
- /// For more information, see gvr_buffer_viewport_set_source_layer().
- void SetSourceLayer(int32_t layer_index) {
- gvr_buffer_viewport_set_source_layer(cobj(), layer_index);
- }
-
- /// For more information, see gvr_buffer_viewport_get_opacity().
- float GetOpacity() const { return gvr_buffer_viewport_get_opacity(cobj()); }
-
- /// For more information, see gvr_buffer_viewport_set_opacity().
- void SetOpacity(float opacity) {
- gvr_buffer_viewport_set_opacity(cobj(), opacity);
- }
-
- /// For more information, see gvr_buffer_viewport_equal().
- bool operator==(const BufferViewport& other) const {
- return gvr_buffer_viewport_equal(cobj(), other.cobj()) ? true : false;
- }
- bool operator!=(const BufferViewport& other) const {
- return !(*this == other);
- }
-};
-
-/// Convenience C++ wrapper for the opaque gvr_buffer_viewport_list type. This
-/// class will automatically release the wrapped gvr_buffer_viewport_list upon
-/// destruction. It can only be created via a `GvrApi` instance, and its
-/// validity is tied to the lifetime of that instance.
-class BufferViewportList
- : public WrapperBase<gvr_buffer_viewport_list,
- gvr_buffer_viewport_list_destroy> {
- public:
- BufferViewportList()
- : WrapperBase(nullptr), context_(nullptr) {}
-
- BufferViewportList(BufferViewportList&& other)
- : WrapperBase(nullptr), context_(nullptr) {
- std::swap(cobject_, other.cobject_);
- std::swap(context_, other.context_);
- }
-
- BufferViewportList& operator=(BufferViewportList&& other) {
- std::swap(cobject_, other.cobject_);
- std::swap(context_, other.context_);
- return *this;
- }
-
- /// For more information, see gvr_get_recommended_buffer_viewports().
- void SetToRecommendedBufferViewports() {
- gvr_get_recommended_buffer_viewports(context_, cobj());
- }
-
- /// For more information, see gvr_get_screen_buffer_viewports().
- void SetToScreenBufferViewports() {
- gvr_get_screen_buffer_viewports(context_, cobj());
- }
-
- /// For more information, see gvr_buffer_viewport_list_set_item().
- void SetBufferViewport(size_t index, const BufferViewport& viewport) {
- gvr_buffer_viewport_list_set_item(cobj(), index,
- viewport.cobj());
- }
-
- /// For more information, see gvr_buffer_viewport_list_get_item().
- /// N.B. If *viewport is an empty BufferViewport object, this
- /// function will initialize it.
- void GetBufferViewport(size_t index, BufferViewport* viewport) const {
- if (!*viewport) {
- *viewport = BufferViewport(gvr_buffer_viewport_create(context_));
- }
- gvr_buffer_viewport_list_get_item(cobj(), index,
- viewport->cobj());
- }
-
- /// For more information, see gvr_buffer_viewport_list_get_size().
- size_t GetSize() const {
- return gvr_buffer_viewport_list_get_size(cobj());
- }
-
- /// @name Wrapper manipulation
- /// @{
- /// Creates a C++ wrapper for a C object and takes ownership.
- BufferViewportList(gvr_buffer_viewport_list* viewport_list,
- gvr_context* context)
- : WrapperBase(viewport_list), context_(context) {}
- /// @}
-
- private:
- gvr_context* context_;
-};
-
-/// Convenience C++ wrapper for gvr_buffer_spec, an opaque pixel buffer
-/// specification. Frees the underlying gvr_buffer_spec on destruction.
-class BufferSpec
- : public WrapperBase<gvr_buffer_spec, gvr_buffer_spec_destroy> {
- public:
- using WrapperBase::WrapperBase;
-
- /// Gets the buffer's size. The default value is the recommended render
- /// target size. For more information, see gvr_buffer_spec_get_size().
- Sizei GetSize() const {
- return gvr_buffer_spec_get_size(cobj());
- }
-
- /// Sets the buffer's size. For more information, see
- /// gvr_buffer_spec_set_size().
- void SetSize(const Sizei& size) {
- gvr_buffer_spec_set_size(cobj(), size);
- }
-
- /// Sets the buffer's size to the passed width and height. For more
- /// information, see gvr_buffer_spec_set_size().
- ///
- /// @param width The width in pixels. Must be greater than 0.
- /// @param height The height in pixels. Must be greater than 0.
- void SetSize(int32_t width, int32_t height) {
- gvr_sizei size{width, height};
- gvr_buffer_spec_set_size(cobj(), size);
- }
-
- /// Gets the number of samples per pixel in the buffer. For more
- /// information, see gvr_buffer_spec_get_samples().
- int32_t GetSamples() const { return gvr_buffer_spec_get_samples(cobj()); }
-
- /// Sets the number of samples per pixel. For more information, see
- /// gvr_buffer_spec_set_samples().
- void SetSamples(int32_t num_samples) {
- gvr_buffer_spec_set_samples(cobj(), num_samples);
- }
-
- /// Sets the color format for this buffer. For more information, see
- /// gvr_buffer_spec_set_color_format().
- void SetColorFormat(ColorFormat color_format) {
- gvr_buffer_spec_set_color_format(cobj(), color_format);
- }
-
- /// Sets the depth and stencil format for this buffer. For more
- /// information, see gvr_buffer_spec_set_depth_stencil_format().
- void SetDepthStencilFormat(DepthStencilFormat depth_stencil_format) {
- gvr_buffer_spec_set_depth_stencil_format(cobj(), depth_stencil_format);
- }
-
- /// For more information, see gvr_buffer_spec_set_multiview_layers().
- void SetMultiviewLayers(int32_t num_layers) {
- gvr_buffer_spec_set_multiview_layers(cobj(), num_layers);
- }
-};
-
-/// Convenience C++ wrapper for gvr_frame, which represents a single frame
-/// acquired for rendering from the swap chain.
-class Frame : public WrapperBase<gvr_frame> {
- public:
- using WrapperBase::WrapperBase;
-
- /// For more information, see gvr_frame_get_buffer_size().
- Sizei GetBufferSize(int32_t index) const {
- return gvr_frame_get_buffer_size(cobj(), index);
- }
-
- /// For more information, see gvr_frame_bind_buffer().
- void BindBuffer(int32_t index) {
- gvr_frame_bind_buffer(cobj(), index);
- }
-
- /// For more information, see gvr_frame_unbind().
- void Unbind() {
- gvr_frame_unbind(cobj());
- }
-
- /// For more information, see gvr_frame_get_framebuffer_object().
- int32_t GetFramebufferObject(int32_t index) const {
- return gvr_frame_get_framebuffer_object(cobj(), index);
- }
-
- /// For more information, see gvr_frame_get_hardware_buffer().
- void* GetHardwareBuffer(int32_t index) const {
- return gvr_frame_get_hardware_buffer(cobj(), index);
- }
-
- /// For more information, see gvr_frame_submit().
- void Submit(const BufferViewportList& viewport_list,
- const Mat4f& head_space_from_start_space) {
- gvr_frame_submit(&cobject_, viewport_list.cobj(),
- head_space_from_start_space);
- }
-};
-
-/// Convenience C++ wrapper for gvr_swap_chain, which represents a queue of
-/// frames. The GvrApi object must outlive any SwapChain objects created from
-/// it.
-class SwapChain : public WrapperBase<gvr_swap_chain, gvr_swap_chain_destroy> {
- public:
- using WrapperBase::WrapperBase;
-
- /// For more information, see gvr_swap_chain_get_buffer_count().
- int32_t GetBufferCount() const {
- return gvr_swap_chain_get_buffer_count(cobj());
- }
-
- /// For more information, see gvr_swap_chain_get_buffer_size().
- Sizei GetBufferSize(int32_t index) const {
- return gvr_swap_chain_get_buffer_size(cobj(), index);
- }
-
- /// For more information, see gvr_swap_chain_resize_buffer().
- void ResizeBuffer(int32_t index, Sizei size) {
- gvr_swap_chain_resize_buffer(cobj(), index, size);
- }
-
- /// For more information, see gvr_swap_chain_acquire_frame().
- /// Note that if Frame acquisition fails, the returned Frame may not be valid.
- /// The caller should inspect the returned Frame's validity before using,
- /// and reschedule frame acquisition upon failure.
- Frame AcquireFrame() {
- Frame result(gvr_swap_chain_acquire_frame(cobj()));
- return result;
- }
-
- private:
- friend class GvrApi;
-
- SwapChain(gvr_context* context, const std::vector<BufferSpec>& specs) {
- std::vector<const gvr_buffer_spec*> c_specs;
- for (const auto& spec : specs)
- c_specs.push_back(spec.cobj());
- cobject_ = gvr_swap_chain_create(context, c_specs.data(),
- static_cast<int32_t>(c_specs.size()));
- }
-};
-
-/// This is a convenience C++ wrapper for the Google VR C API.
-///
-/// This wrapper strategy prevents ABI compatibility issues between compilers
-/// by ensuring that the interface between client code and the implementation
-/// code in libgvr.so is a pure C interface. The translation from C++ calls
-/// to C calls provided by this wrapper runs entirely in the client's binary
-/// and is compiled by the client's compiler.
-///
-/// Methods in this class are only documented insofar as the C++ wrapping logic
-/// is concerned; for information about the method itself, please refer to the
-/// corresponding function in the C API.
-///
-/// Example API usage:
-///
-/// // Functionality supplied by the application in the example below has
-/// // the "app-" prefix.
-/// #ifdef __ANDROID__
-/// // On Android, the gvr_context should almost always be obtained from the
-/// // Java GvrLayout object via
-/// // GvrLayout.getGvrApi().getNativeGvrContext().
-/// std::unique_ptr<GvrApi> gvr = GvrApi::WrapNonOwned(gvr_context);
-/// #else
-/// std::unique_ptr<GvrApi> gvr = GvrApi::Create();
-/// #endif
-///
-/// gvr->InitializeGl();
-///
-/// gvr::BufferViewportList viewport_list =
-/// gvr->CreateEmptyBufferViewportList();
-/// gvr->GetRecommendedBufferViewports(&viewport_list);
-/// gvr::BufferViewport left_eye_viewport = gvr->CreateBufferViewport();
-/// gvr::BufferViewport right_eye_viewport = gvr->CreateBufferViewport();
-/// viewport_list.Get(0, &left_eye_view);
-/// viewport_list.Get(1, &right_eye_view);
-///
-/// std::vector<gvr::BufferSpec> specs;
-/// specs.push_back(gvr->CreateBufferSpec());
-/// specs[0].SetSamples(app_samples);
-/// gvr::SwapChain swap_chain = gvr->CreateSwapChain(specs);
-///
-/// while (client_app_should_render) {
-/// // A client app should be ready for the render target size to change
-/// // whenever a new QR code is scanned, or a new viewer is paired.
-/// gvr::Sizei render_target_size =
-/// gvr->GetRecommendedRenderTargetSize();
-/// swap_chain.ResizeBuffer(0, render_target_size);
-/// gvr::Frame frame = swap_chain.AcquireFrame();
-/// while (!frame) {
-/// std::this_thread::sleep_for(2ms);
-/// frame = swap_chain.AcquireFrame();
-/// }
-///
-/// // This function will depend on your render loop's implementation.
-/// gvr::ClockTimePoint next_vsync = AppGetNextVsyncTime();
-///
-/// const gvr::Mat4f head_view =
-/// gvr->GetHeadSpaceFromStartSpaceRotation(next_vsync);
-/// const gvr::Mat4f left_eye_view = MatrixMultiply(
-/// gvr->GetEyeFromHeadMatrix(kLeftEye), head_view);
-/// const gvr::Mat4f right_eye_view = MatrixMultiply(
-/// gvr->GetEyeFromHeadMatrix(kRightEye), head_view);
-///
-/// frame.BindBuffer(0);
-/// // App does its rendering to the current framebuffer here.
-/// AppDoSomeRenderingForEye(
-/// left_eye_viewport.GetSourceUv(), left_eye_view);
-/// AppDoSomeRenderingForEye(
-/// right_eye_viewport.GetSourceUv(), right_eye_view);
-/// frame.Unbind();
-/// frame.Submit(viewport_list, head_view);
-/// }
-///
-class GvrApi {
- public:
-#ifdef __ANDROID__
- /// Instantiates and returns a GvrApi instance that owns a gvr_context.
- ///
- /// @param env The JNIEnv associated with the current thread.
- /// @param app_context The Android application context. This must be the
- /// application context, NOT an Activity context (Note: from any Android
- /// Activity in your app, you can call getApplicationContext() to
- /// retrieve the application context).
- /// @param class_loader The class loader to use when loading Java classes.
- /// This must be your app's main class loader (usually accessible through
- /// activity.getClassLoader() on any of your Activities).
- /// @return unique_ptr to the created GvrApi instance, nullptr on failure.
- static std::unique_ptr<GvrApi> Create(JNIEnv* env, jobject app_context,
- jobject class_loader) {
- gvr_context* context = gvr_create(env, app_context, class_loader);
- if (!context) {
- return nullptr;
- }
- return std::unique_ptr<GvrApi>(new GvrApi(context, /*owned=*/true));
- }
-#else
- /// Instantiates and returns a GvrApi instance that owns a gvr_context.
- ///
- /// @return unique_ptr to the created GvrApi instance, nullptr on failure.
- static std::unique_ptr<GvrApi> Create() {
- gvr_context* context = gvr_create();
- if (!context) {
- return nullptr;
- }
- return std::unique_ptr<GvrApi>(new GvrApi(context, /*owned=*/true));
- }
-#endif // #ifdef __ANDROID__
-
- ~GvrApi() {
- if (context_ && owned_) {
- gvr_destroy(&context_);
- }
- }
-
- /// @name Error handling
- /// @{
-
- /// For more information, see gvr_get_error().
- Error GetError() { return static_cast<Error>(gvr_get_error(context_)); }
-
- /// For more information, see gvr_clear_error().
- Error ClearError() { return static_cast<Error>(gvr_clear_error(context_)); }
-
- /// For more information, see gvr_get_error_string().
- static const char* GetErrorString(Error error_code) {
- return gvr_get_error_string(error_code);
- }
-
- /// For more information, see gvr_poll_event().
- bool PollEvent(Event* event_out) {
- return gvr_poll_event(context_, event_out) == GVR_ERROR_NONE;
- }
-
- /// For more information, see gvr_get_current_properties().
- Properties GetCurrentProperties() {
- return Properties(gvr_get_current_properties(context_));
- }
-
- /// For more information, see gvr_get_user_prefs().
- UserPrefs GetUserPrefs() const {
- return UserPrefs(gvr_get_user_prefs(context_));
- }
-
- /// @}
-
- /// @name Rendering
- /// @{
-
- /// For more information, see gvr_initialize_gl().
- void InitializeGl() { gvr_initialize_gl(context_); }
-
- /// For more information, see gvr_get_async_reprojection_enabled().
- bool GetAsyncReprojectionEnabled() const {
- return gvr_get_async_reprojection_enabled(context_);
- }
-
- /// Constructs a C++ wrapper for a gvr_buffer_viewport object. For more
- /// information, see gvr_buffer_viewport_create().
- ///
- /// @return A new BufferViewport instance with memory allocated for an
- /// underlying gvr_buffer_viewport.
- BufferViewport CreateBufferViewport() const {
- return BufferViewport(gvr_buffer_viewport_create(context_));
- }
-
- /// Constructs a C++ wrapper for a gvr_buffer_viewport_list object.
- /// For more information, see gvr_buffer_viewport_list_create().
- ///
- /// @return A new, empty BufferViewportList instance.
- /// Note: The validity of the returned object is closely tied to the
- /// lifetime of the member gvr_context. The caller is responsible for
- /// ensuring correct usage accordingly.
- BufferViewportList CreateEmptyBufferViewportList() const {
- return BufferViewportList(gvr_buffer_viewport_list_create(context_),
- context_);
- }
-
- /// For more information, see gvr_get_maximum_effective_render_target_size().
- Sizei GetMaximumEffectiveRenderTargetSize() const {
- return gvr_get_maximum_effective_render_target_size(context_);
- }
-
- /// For more information, see gvr_get_screen_target_size().
- Sizei GetScreenTargetSize() const {
- return gvr_get_screen_target_size(context_);
- }
-
- /// For more information, see gvr_set_surface_size().
- void SetSurfaceSize(Sizei surface_size_pixels) {
- gvr_set_surface_size(context_, surface_size_pixels);
- }
-
- /// For more information, see gvr_distort_to_screen().
- void DistortToScreen(int32_t texture_id,
- const BufferViewportList& viewport_list,
- const Mat4f& rendered_head_pose_in_start_space_matrix,
- const ClockTimePoint& texture_presentation_time) {
- gvr_distort_to_screen(context_, texture_id, viewport_list.cobj(),
- rendered_head_pose_in_start_space_matrix,
- texture_presentation_time);
- }
-
- /// For more information, see gvr_is_feature_supported().
- bool IsFeatureSupported(int32_t feature) {
- return gvr_is_feature_supported(context_, feature);
- }
-
- /// For more information, see gvr_buffer_spec_create().
- BufferSpec CreateBufferSpec() {
- return BufferSpec(gvr_buffer_spec_create(context_));
- }
-
- /// For more information, see gvr_swap_chain_create().
- SwapChain CreateSwapChain(const std::vector<BufferSpec>& specs) {
- return SwapChain(context_, specs);
- }
-
- /// For more information, see gvr_bind_default_framebuffer().
- void BindDefaultFramebuffer() {
- gvr_bind_default_framebuffer(context_);
- }
- /// @}
-
- /// @name Head tracking
- /// @{
-
- /// For more information see gvr_get_head_space_from_start_space_rotation.
- Mat4f GetHeadSpaceFromStartSpaceRotation(
- const ClockTimePoint& time_point) const {
- return gvr_get_head_space_from_start_space_rotation(context_, time_point);
- }
-
- /// For more information see gvr_get_head_space_from_start_space_transform.
- Mat4f GetHeadSpaceFromStartSpaceTransform(
- const ClockTimePoint& time_point) const {
- return gvr_get_head_space_from_start_space_transform(context_, time_point);
- }
-
- /// For more information, see gvr_apply_neck_model().
- Mat4f ApplyNeckModel(const Mat4f& head_space_from_start_space_rotation,
- float factor) const {
- return gvr_apply_neck_model(context_, head_space_from_start_space_rotation,
- factor);
- }
-
- /// For more information, see gvr_pause_tracking().
- void PauseTracking() { gvr_pause_tracking(context_); }
-
- /// For more information, see gvr_resume_tracking().
- void ResumeTracking() { gvr_resume_tracking(context_); }
-
- /// For more information, see gvr_reset_tracking().
- void ResetTracking() { gvr_reset_tracking(context_); }
-
- // For more information, see gvr_recenter_tracking().
- void RecenterTracking() { gvr_recenter_tracking(context_); }
-
- /// For more information, see gvr_get_time_point_now().
- static ClockTimePoint GetTimePointNow() { return gvr_get_time_point_now(); }
- /// @}
-
- /// @name Viewer parameters
- /// @{
-
- /// For more information, see gvr_set_default_viewer_profile().
- bool SetDefaultViewerProfile(const char* viewer_profile_uri) {
- return gvr_set_default_viewer_profile(context_, viewer_profile_uri);
- }
-
- /// For more information, see gvr_refresh_viewer_profile().
- void RefreshViewerProfile() { gvr_refresh_viewer_profile(context_); }
-
- /// For more information, see gvr_get_viewer_vendor().
- const char* GetViewerVendor() const {
- return gvr_get_viewer_vendor(context_);
- }
-
- /// For more information, see gvr_get_viewer_model().
- const char* GetViewerModel() const { return gvr_get_viewer_model(context_); }
-
- /// For more information, see gvr_get_viewer_type().
- ViewerType GetViewerType() const {
- return static_cast<ViewerType>(gvr_get_viewer_type(context_));
- }
-
- /// For more information, see gvr_get_eye_from_head_matrix().
- Mat4f GetEyeFromHeadMatrix(Eye eye) const {
- return gvr_get_eye_from_head_matrix(context_, eye);
- }
-
- /// For more information, see gvr_get_window_bounds().
- Recti GetWindowBounds() const { return gvr_get_window_bounds(context_); }
-
- /// For more information, see gvr_compute_distorted_point().
- std::array<Vec2f, 3> ComputeDistortedPoint(Eye eye, const Vec2f& uv_in) {
- std::array<Vec2f, 3> uv_out = {{{}}};
- gvr_compute_distorted_point(context_, eye, uv_in, uv_out.data());
- return uv_out;
- }
- /// @}
-
- /// @name Wrapper manipulation
- /// @{
- /// Creates a C++ wrapper for a C object and optionally takes ownership.
- ///
- /// @param context C object to wrap.
- /// @param owned Whether the wrapper will own the underlying C object.
- explicit GvrApi(gvr_context* context, bool owned = true)
- : context_(context), owned_(owned) {}
-
- /// Returns the wrapped C object. Does not affect ownership.
- gvr_context* cobj() { return context_; }
- const gvr_context* cobj() const { return context_; }
-
- /// @deprecated Use cobj() instead.
- gvr_context* GetContext() { return context_; }
- /// @deprecated Use cobj() instead.
- const gvr_context* GetContext() const { return context_; }
-
- /// Returns the wrapped C object and transfers its ownership to the caller.
- /// The wrapper becomes invalid and should not be used.
- gvr_context* release() {
- auto result = context_;
- context_ = nullptr;
- return result;
- }
-
- /// Instantiates a GvrApi instance that wraps a *non-owned* gvr_context.
- ///
- /// Ownership of the provided `context` remains with the caller, and they
- /// are responsible for ensuring proper disposal of the context.
- ///
- /// @param context Pointer to a non-null, non-owned gvr_context instance.
- /// @return unique_ptr to the created GvrApi instance. Never null.
- static std::unique_ptr<GvrApi> WrapNonOwned(gvr_context* context) {
- return std::unique_ptr<GvrApi>(new GvrApi(context, /*owned=*/false));
- }
- /// @}
-
- // Disallow copy and assign.
- GvrApi(const GvrApi&) = delete;
- void operator=(const GvrApi&) = delete;
-
- private:
- gvr_context* context_;
-
- // Whether context_ is owned by the GvrApi instance. If owned, the context
- // will be released upon destruction.
- const bool owned_;
-};
-
-} // namespace gvr
-#endif // #if defined(__cplusplus) && !defined(GVR_NO_CPP_WRAPPER)
-
-#endif // VR_GVR_CAPI_INCLUDE_GVR_H_
diff --git a/libraries/headers/vr/gvr/capi/include/gvr_audio.h b/libraries/headers/vr/gvr/capi/include/gvr_audio.h
deleted file mode 100644
index eee5037..0000000
--- a/libraries/headers/vr/gvr/capi/include/gvr_audio.h
+++ /dev/null
@@ -1,867 +0,0 @@
-/* Copyright 2016 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef VR_GVR_CAPI_INCLUDE_GVR_AUDIO_H_
-#define VR_GVR_CAPI_INCLUDE_GVR_AUDIO_H_
-
-#if __ANDROID__
-#include <jni.h>
-#endif // __ANDROID__
-
-#include <stdint.h>
-
-#include "vr/gvr/capi/include/gvr_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif // __cplusplus
-
-/// @defgroup Audio Spatial Audio API
-/// @brief This is the GVR Audio C API, a spatial audio rendering engine,
-/// optimized for mobile VR.
-///
-/// It allows the user to spatialize sound sources in 3D space, including
-/// distance and elevation cues. Specifically, the API is capable of playing
-/// back spatial sound in three ways:
-///
-/// - **Sound object rendering**: This allows the user to create a virtual sound
-/// source in 3D space. These sources, while spatialized, are fed with mono
-/// audio data.
-///
-/// - **Ambisonic soundfields**: Ambisonic recordings are multi-channel audio
-/// files which are spatialized all around the listener in 360 degrees. These
-/// can be thought of as recorded or pre-baked soundfields. They can be of
-/// great use for background effects which sound perfectly spatial. Examples
-/// include rain noise, crowd noise or even the sound of the ocean off to one
-/// side.
-///
-/// - **Stereo Sounds**: This allows the user to directly play back
-/// non-spatialized mono or stereo audio files. This is useful for music and
-/// other such audio.
-///
-/// **Initialization**
-///
-/// gvr_audio_context* gvr_audio_create(int32_t rendering_mode);
-///
-/// The rendering_mode argument corresponds to a `gvr_audio_rendering_mode` enum
-/// value, which specifies a rendering configuration setting:
-///
-/// - `GVR_AUDIO_RENDERING_STEREO_PANNING`:
-/// Stereo panning of all sound objects. This disables HRTF-based rendering.
-/// - `GVR_AUDIO_RENDERING_BINAURAL_LOW_QUALITY`:
-/// This renders sound objects over a virtual array of 8 loudspeakers arranged
-/// in a cube configuration around the listener’s head. HRTF-based rendering
-/// is enabled.
-/// - `GVR_AUDIO_RENDERING_BINAURAL_HIGH_QUALITY`:
-/// This renders sound objects over a virtual array of 16 loudspeakers
-/// arranged in an approximate equidistribution about the listener’s
-/// head. HRTF-based rendering is enabled.
-///
-/// For most modern phones, the high quality mode offers a good balance between
-/// performance and audio quality. To optimize the rendering performance for
-/// headphones *and* speaker playback, the stereo speaker mode can be enabled
-/// which automatically switches to stereo panning when no headphone is plugin.
-/// Note that this can lead to varying CPU usage based on headphone and speaker
-/// playback.
-///
-/// **Sound engine control**
-///
-/// Audio playback on the default audio device can be started and stopped by
-/// calling the following two methods:
-///
-/// void gvr_audio_pause(gvr_audio_context* api);
-/// void gvr_audio_resume(gvr_audio_context* api);
-///
-/// Note that:
-///
-/// void gvr_audio_update(gvr_audio_context* api);
-///
-/// must be called from the main thread at a regular rate. It is used to execute
-/// background operations outside of the audio thread.
-///
-/// **Listener position and rotation**
-///
-/// To ensure that the audio in your application reacts to listener head
-/// movement, it is important to update the listener's head orientation in the
-/// graphics callback using the head orientation matrix.
-///
-/// The following method is used to control the listener’s head position
-/// and orientation with the audio engine:
-///
-/// void gvr_audio_set_head_pose(gvr_audio_context* api,
-/// gvr_mat4f head_pose_matrix);
-///
-/// **Preloading Sounds**
-///
-/// Both mono sound files for use with Sound Objects and multi-channel Ambisonic
-/// soundfield files can be preloaded into memory before playback or
-/// alternatively streamed during playback. Preloading can be useful to reduce
-/// CPU usage especially if the same audio clip is likely to be played back many
-/// times. In this case playback latency is also reduced.
-///
-/// Sound files can be preloaded into memory by calling:
-///
-/// bool gvr_audio_preload_soundfile(gvr_audio_context* api,
-/// const char* filename);
-///
-/// Unused sound files can be unloaded with a call to:
-///
-/// void gvr_audio_unload_soundfile(gvr_audio_context* api,
-/// const char* filename);
-///
-/// NOTE: If a sound object, soundfield or stereo sound is created with a file
-/// that has not been preloaded, that audio will be streamed.
-///
-/// **Spatialization of sound objects**
-///
-/// The GVR Audio System allows the user to create virtual sound objects which
-/// can be placed anywhere in space around the listener.
-///
-/// To create a new sound object, call:
-///
-/// gvr_audio_source_id
-/// gvr_audio_create_sound_object(gvr_audio_context* api,
-/// const char* filename);
-///
-/// This returns a handle that can be used to set properties such as the
-/// position and the volume of the sound object via calls to the following two
-/// functions:
-///
-/// void
-/// gvr_audio_set_sound_object_position(gvr_audio_context* api,
-/// gvr_audio_source_id sound_object_id,
-/// float x, float y, float z);
-///
-/// void
-/// gvr_audio_set_sound_volume(gvr_audio_context* api,
-/// gvr_audio_source_id source_id, float volume);
-///
-/// The GVR Audio System also support directivity patterns per sound source
-/// which define a shape or pattern that describes the way in which sound
-/// emanates from a source in different directions. The directivity pattern
-/// takes two values: alpha and order. Alpha is a weighting balance between a
-/// figure-8 pattern and omnidirectional pattern for source emission in the
-/// range [0, 1]. A value of 0.5 results in a cardioid pattern. Order is applied
-/// to computed directivity. Higher values will result in narrower and sharper
-/// directivity patterns, with a range of [1, inf).
-///
-/// void gvr_audio_set_sound_object_directivity(
-/// gvr_audio_context* api, gvr_audio_source_id sound_object_id,
-/// float alpha, float order);
-///
-/// void gvr_audio_set_sound_object_rotation(
-/// gvr_audio_context* api, gvr_audio_source_id sound_object_id,
-/// gvr_quatf sound_object_rotation);
-///
-/// The behavior of Sound Objects with respect to their distance from the
-/// listener can be controlled via calls to the following method:
-///
-/// void gvr_audio_set_sound_object_distance_rolloff_model(
-/// gvr_audio_context* api, gvr_audio_source_id sound_object_id,
-/// int32_t rolloff_model, float min_distance, float max_distance);
-///
-/// This enables a user to choose between logarithmic and linear distance
-/// rolloff methods, or to completely disable distance rolloff effects.
-///
-///
-/// The spatialized playback of a sound object can be triggered with a call to:
-///
-/// void gvr_audio_play_sound(gvr_audio_context* api,
-/// gvr_audio_source_id source_id,
-/// bool looping_enabled);
-///
-/// and stopped with a call to:
-///
-/// void gvr_audio_stop_sound(gvr_audio_context* api,
-/// gvr_audio_source_id source_id);
-///
-/// Note that the sound object handle destroys itself at the moment the sound
-/// playback has stopped. This way, no clean up of sound object handles is
-/// needed. On subsequent calls to this function the corresponding
-/// gvr_audio_source_id no longer refers to a valid sound object.
-///
-/// The following function can be used to check if a sound object is currently
-/// active:
-///
-/// bool gvr_audio_is_sound_playing(const gvr_audio_context* api,
-/// gvr_audio_source_id source_id);
-///
-/// **Rendering of ambisonic soundfields**
-///
-/// The GVR Audio System also provides the user with the ability to play back
-/// ambisonic soundfields. Ambisonic soundfields are captured or pre-rendered
-/// 360 degree recordings. It is best to think of them as equivalent to 360
-/// degree video. While they envelop and surround the listener, they only react
-/// to the listener's rotational movement. That is, one cannot walk towards
-/// features in the soundfield. Soundfields are ideal for accompanying 360
-/// degree video playback, for introducing background and environmental effects
-/// such as rain or crowd noise, or even for pre baking 3D audio to reduce
-/// rendering costs. The GVR Audio System supports full 3D First Order
-/// Ambisonic recordings using ACN channel ordering and SN3D normalization. For
-/// more information please see our Spatial Audio specification at:
-/// https://github.com/google/spatial-media/blob/master/docs/spatial-audio-rfc.md#semantics
-///
-/// Note that Soundfield playback is directly streamed from the sound file and
-/// no sound file preloading is needed.
-///
-/// To obtain a soundfield handler, call:
-///
-/// gvr_audio_source_id gvr_audio_create_soundfield(gvr_audio_context* api,
-/// const char* filename);
-///
-/// This returns a gvr_audio_source_id handle that allows the user to begin
-/// playback of the soundfield, to alter the soundfield’s volume or to stop
-/// soundfield playback and as such destroy the object. These actions can be
-/// achieved with calls to the following functions:
-///
-/// void gvr_audio_play_sound(gvr_audio_context* api,
-/// gvr_audio_source_id source_id,
-/// bool looping_enabled);
-///
-/// void gvr_audio_set_sound_volume(gvr_audio_context* api,
-/// gvr_audio_source_id source_id,
-/// float volume);
-///
-/// void gvr_audio_stop_sound(gvr_audio_context* api,
-/// gvr_audio_source_id source_id);
-///
-/// Ambisonic soundfields can also be rotated about the listener's head in order
-/// to align the components of the soundfield with the visuals of the game/app.
-///
-/// void gvr_audio_set_soundfield_rotation(gvr_audio_context* api,
-/// gvr_audio_source_id soundfield_id,
-/// gvr_quatf soundfield_rotation);
-///
-/// **Direct Playback of Stereo or Mono Sounds**
-///
-/// The GVR Audio System allows the direct non-spatialized playback of both
-/// stereo and mono audio. Such audio is often used for music or sound effects
-/// that should not be spatialized.
-///
-/// A stereo sound can be created with a call to:
-///
-/// gvr_audio_source_id gvr_audio_create_stereo_sound(gvr_audio_context* api,
-/// const char* filename);
-///
-/// **Paused Sounds and Stopped Sounds**
-///
-/// When using sound sources of any of the above types, the user can ensure that
-/// the given source is currently playing before calling.
-///
-/// bool gvr_audio_is_sound_playing(gvr_audio_source_id source_id);
-///
-/// This method will return false if the source has been either paused or
-/// stopped, and true if the source is currently playing.
-///
-/// Once one is finished with a Sound Object and wish to remove it, a call can
-/// be placed to:
-///
-/// void gvr_audio_stop_sound(gvr_audio_source_id source_id);
-///
-/// Once a source has been stopped it is destroyed and the corresponding
-/// gvr_audio_source_id will be invalid. Sources which have been played with the
-/// |looping_enabled| parameter disabled will also be destroyed once playback
-/// of the full audio clip has completed.
-///
-/// To check whether a given gvr_audio_source_id corresponds to a valid source
-/// which exists and is in a playable state, a call can be made to:
-///
-/// bool gvr_audio_is_source_id_valid(gvr_audio_source_id source_id);
-///
-/// By using this pair of methods a user can differentiate between sources which
-/// have been paused and those which have ceased.
-///
-/// **Room effects**
-///
-/// The GVR Audio System provides a powerful reverb engine which can be used to
-/// create customized room effects by specifying the size of a room and a
-/// material for each surface of the room from the gvr_audio_material_name enum.
-/// Each of these surface materials has unique absorption properties which
-/// differ with frequency. The room created will be centered around the
-/// listener. Note that the Google VR Audio System uses meters as the unit of
-/// distance throughout.
-///
-/// The following methods are used to control room effects:
-///
-/// void gvr_audio_enable_room(gvr_audio_context* api, bool enable);
-///
-/// enables or disables room effects with smooth transitions.
-///
-/// and
-///
-/// void
-/// gvr_audio_set_room_properties(gvr_audio_context* api, float size_x,
-/// float size_y, float size_z,
-/// gvr_audio_material_name wall_material,
-/// gvr_audio_material_name ceiling_material,
-/// gvr_audio_material_name floor_material);
-///
-/// allows the user to describe the room based on its dimensions and its surface
-/// properties. For example, one can expect very large rooms to be more
-/// reverberant than smaller rooms, and a room with hard surface materials
-/// such as brick to be more reverberant than one with soft absorbent materials
-/// such as heavy curtains on every surface.
-///
-/// Note that when a sound source is located outside of the listener's room,
-/// it will sound different from sources located within the room due to
-/// attenuation of both the direct sound and the reverb on that source. Sources
-/// located far outside of the listener's room will not be audible to the
-/// listener.
-///
-/// The following method can be used to subtly adjust the reverb in a room by
-/// changing the gain/attenuation on the reverb, setting a multiplier on the
-/// reverberation time to control the reverb's length, or adjusting the balance
-/// between the low and high frequency components of the reverb.
-///
-/// void gvr_audio_set_room_reverb_adjustments(gvr_audio_context* api,
-/// float gain,
-/// float time_adjust,
-/// float brightness_adjust);
-///
-/// If you are writing C++ code, you might prefer to use the C++ wrapper
-/// rather than implement this C API directly.
-///
-/// **Example usage (C++ API)**
-///
-/// Construction:
-///
-/// std::unique_ptr<gvr::AudioApi> gvr_audio_api(new gvr::AudioApi);
-/// gvr_audio_api->Init(GVR_AUDIO_RENDERING_BINAURAL_HIGH_QUALITY);
-///
-/// Update head rotation in DrawFrame():
-///
-/// head_pose_ = gvr_api_->GetHeadSpaceFromStartSpaceRotation(target_time);
-/// gvr_audio_api_->SetHeadPose(head_pose_);
-/// gvr_audio_api_->Update();
-///
-/// Preload sound file, create sound handle and start playback:
-///
-/// gvr_audio_api->PreloadSoundfile(kSoundFile);
-/// AudioSourceId source_id =
-/// gvr_audio_api_->CreateSoundObject("sound.wav");
-/// gvr_audio_api->SetSoundObjectPosition(source_id,
-/// position_x,
-/// position_y,
-/// position_z);
-/// gvr_audio_api->PlaySound(source_id, /*looped playback=*/true);
-///
-
-/// @{
-
-typedef struct gvr_audio_context_ gvr_audio_context;
-
-/// Creates and initializes a gvr_audio_context. This call also initializes
-/// the audio interface and starts the audio engine. Note that the returned
-/// instance must be deleted with gvr_audio_destroy.
-///
-#ifdef __ANDROID__
-/// @param env The JNI Env associated with the current thread.
-/// @param android_context The Android application context. This must be the
-/// application context, NOT an Activity context (Note: from any Android
-/// Activity in your app, you can call getApplicationContext() to
-/// retrieve the application context).
-/// @param class_loader The class loader to use when loading Java
-/// classes. This must be your app's main class loader (usually
-/// accessible through activity.getClassLoader() on any of your Activities).
-/// @param rendering_mode The gvr_audio_rendering_mode value which determines
-/// the rendering configuration preset. This is passed as an int32_t to
-/// ensure API compatibility.
-/// @return gvr_audio_context instance.
-gvr_audio_context* gvr_audio_create(JNIEnv* env, jobject android_context,
- jobject class_loader,
- int32_t rendering_mode);
-#else
-/// @param rendering_mode The gvr_audio_rendering_mode value which determines
-/// the rendering configuration preset. This is passed as an int32_t to
-/// ensure API compatibility.
-/// @return gvr_audio_context instance.
-gvr_audio_context* gvr_audio_create(int32_t rendering_mode);
-#endif // #ifdef __ANDROID__
-
-/// Destroys a gvr_audio_context that was previously created with
-/// gvr_audio_create or gvr_audio_create_android.
-///
-/// @param api Pointer to a pointer to a gvr_audio_context. The pointer
-/// will be set to NULL after destruction.
-void gvr_audio_destroy(gvr_audio_context** api);
-
-/// Resumes the VR Audio system.
-/// Call this when your app/game loses focus.
-/// Calling this when not paused is a no-op.
-/// Thread-safe (call from any thread).
-///
-/// @param api Pointer to a gvr_audio_context.
-void gvr_audio_resume(gvr_audio_context* api);
-
-/// Pauses the VR Audio system.
-/// Calling this when already paused is a no-op.
-/// Thread-safe (call from any thread).
-///
-/// @param api Pointer to a gvr_audio_context.
-void gvr_audio_pause(gvr_audio_context* api);
-
-/// This method must be called from the main thread at a regular rate. It is
-/// used to execute background operations outside of the audio thread.
-///
-/// @param api Pointer to a gvr_audio_context.
-void gvr_audio_update(gvr_audio_context* api);
-
-/// Preloads a local sound file. Note that the local file access method
-/// depends on the target platform.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param filename Name of the file, used as identifier.
-/// @return True on success or if file has already been preloaded.
-bool gvr_audio_preload_soundfile(gvr_audio_context* api, const char* filename);
-
-/// Unloads a previously preloaded sample from memory. Note that if the sample
-/// is currently used, the memory is freed at the moment playback stops.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param filename Name of the file, used as identifier.
-void gvr_audio_unload_soundfile(gvr_audio_context* api, const char* filename);
-
-/// Returns a new sound object. Note that the sample should only contain a
-/// single audio channel (stereo sources are automatically downmixed to mono).
-/// The handle automatically destroys itself at the moment the sound playback
-/// has stopped.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param filename The path/name of the file to be played.
-/// @return Id of new sound object. Returns GVR_AUDIO_INVALID_SOURCE_ID if the
-/// sound file has not been preloaded or if the number of input channels
-/// is > 1.
-gvr_audio_source_id gvr_audio_create_sound_object(gvr_audio_context* api,
- const char* filename);
-
-/// Returns a new ambisonic sound field. Note that the sample needs to be
-/// preloaded and must have 4 separate audio channels. The handle automatically
-/// destroys itself at the moment the sound playback has stopped.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param filename The path/name of the file to be played.
-/// @return Id of new soundfield. Returns GVR_AUDIO_INVALID_SOURCE_ID if the
-/// sound file has not been preloaded or if the number of input channels
-/// does not match that required.
-gvr_audio_source_id gvr_audio_create_soundfield(gvr_audio_context* api,
- const char* filename);
-
-/// Returns a new stereo non-spatialized source, which directly plays back mono
-/// or stereo audio. Note the sample needs to be preloaded and may contain only
-/// one (mono) or two (stereo) audio channels.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param filename The path/name of the file to be played..
-/// @return Id of new stereo non-spatialized source. Returns
-/// GVR_AUDIO_INVALID_SOURCE_ID if the sound file has not been preloaded or
-/// if the number of input channels is > 2;
-gvr_audio_source_id gvr_audio_create_stereo_sound(gvr_audio_context* api,
- const char* filename);
-
-/// Starts the playback of a sound.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param source_id Id of the audio source to be stopped.
-/// @param looping_enabled Enables looped audio playback.
-void gvr_audio_play_sound(gvr_audio_context* api, gvr_audio_source_id source_id,
- bool looping_enabled);
-
-/// Pauses the playback of a sound.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param source_id Id of the audio source to be paused.
-void gvr_audio_pause_sound(gvr_audio_context* api,
- gvr_audio_source_id source_id);
-
-/// Resumes the playback of a sound.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param source_id Id of the audio source to be resumed.
-void gvr_audio_resume_sound(gvr_audio_context* api,
- gvr_audio_source_id source_id);
-
-/// Stops the playback of a sound and destroys the corresponding sound object
-/// or Soundfield.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param source_id Id of the audio source to be stopped.
-void gvr_audio_stop_sound(gvr_audio_context* api,
- gvr_audio_source_id source_id);
-
-/// Checks if a sound is playing.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param source_id Id of the audio source to be checked.
-/// @return True if the sound is being played.
-bool gvr_audio_is_sound_playing(const gvr_audio_context* api,
- gvr_audio_source_id source_id);
-
-/// Checks if a |source_id| is valid, and that the corresponding source is in a
-/// playable state. Sources that have been stopped will be reported as invalid.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param source_id Id of the audio source to be checked.
-/// @return True if the source exists and is in a playable state.
-bool gvr_audio_is_source_id_valid(const gvr_audio_context* api,
- gvr_audio_source_id source_id);
-
-/// Repositions an existing sound object.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param sound_object_id Id of the sound object to be moved.
-/// @param x X coordinate the sound will be placed at.
-/// @param y Y coordinate the sound will be placed at.
-/// @param z Z coordinate the sound will be placed at.
-void gvr_audio_set_sound_object_position(gvr_audio_context* api,
- gvr_audio_source_id sound_object_id,
- float x, float y, float z);
-
-/// Sets the sound object directivity constants for an existing sound object.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param sound_object_id Id of the sound object to configure.
-/// @param alpha A weighting balance between a figure-8 pattern and
-/// omnidirectional pattern for source emission in the range [0, 1]. A value
-/// of 0.5 results in a cardioid pattern.
-/// @param order Applied to computed directivity. Higher values will result in
-/// narrower and sharper directivity patterns, with a range of [1, inf).
-void gvr_audio_set_sound_object_directivity(gvr_audio_context* api,
- gvr_audio_source_id sound_object_id,
- float alpha, float order);
-
-/// Sets the given sound object's rotation. Only applies if
-/// gvr_audio_set_sound_object_directivity has been called on the sound.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param soundfield_id Id of the sound object to be rotated.
-/// @param object_rotation Quaternion representing the sound object rotation.
-void gvr_audio_set_sound_object_rotation(gvr_audio_context* api,
- gvr_audio_source_id sound_object_id,
- gvr_quatf sound_object_rotation);
-
-/// Sets the given ambisonic soundfields's rotation.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param soundfield_id Id of the soundfield source to be rotated.
-/// @param soundfield_rotation Quaternion representing the soundfield rotation.
-void gvr_audio_set_soundfield_rotation(gvr_audio_context* api,
- gvr_audio_source_id soundfield_id,
- gvr_quatf soundfield_rotation);
-
-/// Sets the given sound object source's distance attenuation method with
-/// minimum and maximum distances. Maximum distance must be greater than the
-/// minimum distance for the method to be set.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param sound_object_id Id of sound object source.
-/// @param rolloff_model Linear or logarithmic distance rolloff models. Note
-/// setting the rolloff model to |GVR_AUDIO_ROLLOFF_NONE| will allow
-/// distance attenuation values to be set manually.
-/// @param min_distance Minimum distance to apply distance attenuation method.
-/// @param max_distance Maximum distance to apply distance attenuation method.
-void gvr_audio_set_sound_object_distance_rolloff_model(
- gvr_audio_context* api, gvr_audio_source_id sound_object_id,
- int32_t rolloff_model, float min_distance, float max_distance);
-
-/// Changes the master volume.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param volume Volume value. Should range from 0 (mute) to 1 (max).
-void gvr_audio_set_master_volume(gvr_audio_context* api, float volume);
-
-/// Changes the volume of an existing sound.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param source_id Id of the audio source to be modified.
-/// @param volume Volume value. Should range from 0 (mute) to 1 (max).
-void gvr_audio_set_sound_volume(gvr_audio_context* api,
- gvr_audio_source_id source_id, float volume);
-
-/// Sets the head pose from a matrix representation of the same.
-///
-/// @param api Pointer to a gvr_audio_context on which to set the pose.
-/// @param head_pose_matrix Matrix representing the head transform to be set.
-/// This matrix is three homogeneous basis vectors stored contiguously in
-/// memory, followed by a translation component. This means that
-/// head_pose_matrix[i] stores the ith basis matrix for 0 <= i <= 3 with
-/// any translation component stored the 4th place. Note that with three
-/// degrees of freedom, the translation component is normally limited to
-/// what is introduced by a neck model.
-void gvr_audio_set_head_pose(gvr_audio_context* api,
- gvr_mat4f head_pose_matrix);
-
-/// Turns on/off the room reverberation effect.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param enable True to enable room effect.
-void gvr_audio_enable_room(gvr_audio_context* api, bool enable);
-
-/// Sets the room properties describing the dimensions and surface materials of
-/// a given room.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param size_x Dimension along X axis.
-/// @param size_y Dimension along Y axis.
-/// @param size_z Dimension along Z axis.
-/// @param wall_material Surface gvr_audio_material_type for the four walls.
-/// @param ceiling_material Surface gvr_audio_material_type for the ceiling.
-/// @param floor_material Surface gvr_audio_material_type for the floor.
-void gvr_audio_set_room_properties(gvr_audio_context* api, float size_x,
- float size_y, float size_z,
- int32_t wall_material,
- int32_t ceiling_material,
- int32_t floor_material);
-
-/// Adjusts the properties of the current reverb, allowing changes to the
-/// reverb's gain, duration and low/high frequency balance.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param gain Reverb volume (linear) adjustment in range [0, 1] for
-/// attenuation, range [1, inf) for gain boost.
-/// @param time_adjust Reverb time adjustment multiplier to scale the
-/// reverberation tail length. This value should be >= 0.
-/// @param brightness_adjust Reverb brightness adjustment that controls the
-/// reverberation ratio across low and high frequency bands.
-void gvr_audio_set_room_reverb_adjustments(gvr_audio_context* api, float gain,
- float time_adjust,
- float brightness_adjust);
-
-/// Enables the stereo speaker mode. It enforces stereo-panning when headphones
-/// are *not* plugged into the phone. This helps to avoid HRTF-based coloring
-/// effects and reduces computational complexity when speaker playback is
-/// active. By default the stereo speaker mode optimization is disabled.
-///
-/// @param api Pointer to a gvr_audio_context.
-/// @param enable True to enable the stereo speaker mode.
-void gvr_audio_enable_stereo_speaker_mode(gvr_audio_context* api, bool enable);
-
-/// @}
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-// Convenience C++ wrapper.
-#if defined(__cplusplus) && !defined(GVR_NO_CPP_WRAPPER)
-
-#include <memory>
-#include <string>
-
-namespace gvr {
-/// This is a convenience C++ wrapper for the Audio C API.
-///
-/// This wrapper strategy prevents ABI compatibility issues between compilers
-/// by ensuring that the interface between client code and the implementation
-/// code in libgvr.so is a pure C interface. The translation from C++ calls
-/// to C calls provided by this wrapper runs entirely in the client's binary
-/// and is compiled by the client's compiler.
-///
-/// Methods in this class are only documented insofar as the C++ wrapping logic
-/// is concerned; for information about the method itself, please refer to the
-/// corresponding function in the C API.
-///
-///
-/// THREADING: this class is thread-safe and reentrant after initialized
-/// with Init().
-class AudioApi : public WrapperBase<gvr_audio_context, gvr_audio_destroy> {
- public:
- using WrapperBase::WrapperBase;
-
- /// Creates and initializes a gvr_audio_context.
- /// For more information, see gvr_audio_create().
-#ifdef __ANDROID__
- bool Init(JNIEnv* env, jobject android_context, jobject class_loader,
- AudioRenderingMode rendering_mode) {
- cobject_ =
- gvr_audio_create(env, android_context, class_loader, rendering_mode);
- return cobject_ != nullptr;
- }
-#else
- bool Init(AudioRenderingMode rendering_mode) {
- cobject_ = gvr_audio_create(rendering_mode);
- return cobject_ != nullptr;
- }
-#endif // #ifdef __ANDROID__
-
- /// Pauses the audio engine.
- /// For more information, see gvr_audio_pause().
- void Pause() { gvr_audio_pause(cobj()); }
-
- /// Resumes the audio engine.
- /// For more information, see gvr_audio_resume().
- void Resume() { gvr_audio_resume(cobj()); }
-
- /// For more information, see gvr_audio_update().
- void Update() { gvr_audio_update(cobj()); }
-
- /// Preloads a local sound file.
- /// For more information, see gvr_audio_preload_soundfile().
- bool PreloadSoundfile(const std::string& filename) {
- return gvr_audio_preload_soundfile(cobj(), filename.c_str());
- }
-
- /// Unloads a previously preloaded sample from memory.
- /// For more information, see gvr_audio_preload_soundfile().
- void UnloadSoundfile(const std::string& filename) {
- gvr_audio_unload_soundfile(cobj(), filename.c_str());
- }
-
- /// Returns a new sound object.
- /// For more information, see gvr_audio_create_sound_object().
- AudioSourceId CreateSoundObject(const std::string& filename) {
- return gvr_audio_create_sound_object(cobj(), filename.c_str());
- }
-
- /// Returns a new sound field.
- /// For more information, see gvr_audio_create_soundfield().
- AudioSourceId CreateSoundfield(const std::string& filename) {
- return gvr_audio_create_soundfield(cobj(), filename.c_str());
- }
-
- /// Returns a new stereo sound.
- /// For more information, see gvr_audio_create_stereo_sound().
- AudioSourceId CreateStereoSound(const std::string& filename) {
- return gvr_audio_create_stereo_sound(cobj(), filename.c_str());
- }
-
- /// Starts the playback of a sound.
- /// For more information, see gvr_audio_play_sound().
- void PlaySound(AudioSourceId source_id, bool looping_enabled) {
- gvr_audio_play_sound(cobj(), source_id, looping_enabled);
- }
-
- /// Pauses the playback of a sound.
- /// For more information, see gvr_audio_pause_sound().
- void PauseSound(AudioSourceId source_id) {
- gvr_audio_pause_sound(cobj(), source_id);
- }
-
- /// Resumes the playback of a sound.
- /// For more information, see gvr_audio_resume_sound().
- void ResumeSound(AudioSourceId source_id) {
- gvr_audio_resume_sound(cobj(), source_id);
- }
-
- /// Stops the playback of a sound.
- /// For more information, see gvr_audio_stop_sound().
- void StopSound(AudioSourceId source_id) {
- gvr_audio_stop_sound(cobj(), source_id);
- }
-
- /// Checks if a sound is playing.
- /// For more information, see gvr_audio_is_sound_playing().
- bool IsSoundPlaying(AudioSourceId source_id) const {
- return gvr_audio_is_sound_playing(cobj(), source_id);
- }
-
- /// Checks if a source is in a valid playable state.
- /// For more information, see gvr_audio_is_source_id_valid().
- bool IsSourceIdValid(AudioSourceId source_id) {
- return gvr_audio_is_source_id_valid(cobj(), source_id);
- }
-
- /// Repositions an existing sound object.
- /// For more information, see gvr_audio_set_sound_object_position().
- void SetSoundObjectPosition(AudioSourceId sound_object_id, float x, float y,
- float z) {
- gvr_audio_set_sound_object_position(cobj(), sound_object_id, x, y, z);
- }
-
- /// Sets directivity constants for an existing sound object.
- /// For more information, see gvr_audio_set_sound_object_directivity.
- void SetSoundObjectDirectivity(AudioSourceId sound_object_id, float alpha,
- float order) {
- gvr_audio_set_sound_object_directivity(cobj(), sound_object_id, alpha,
- order);
- }
-
- /// Sets the rotation for an existing sound object.
- /// For more information, see gvr_audio_set_sound_object_rotation.
- void SetSoundObjectRotation(AudioSourceId sound_object_id,
- const Quatf& sound_object_quat) {
- gvr_audio_set_sound_object_rotation(cobj(), sound_object_id,
- sound_object_quat);
- }
-
- void SetSoundObjectDistanceRolloffModel(
- AudioSourceId sound_object_id,
- gvr_audio_distance_rolloff_type rolloff_model, float min_distance,
- float max_distance) {
- gvr_audio_set_sound_object_distance_rolloff_model(
- cobj(), sound_object_id, rolloff_model, min_distance, max_distance);
- }
-
- /// Rotates an existing soundfield.
- /// For more information, see gvr_audio_set_soundfield_rotation().
- void SetSoundfieldRotation(AudioSourceId soundfield_id,
- const Quatf& soundfield_rotation) {
- gvr_audio_set_soundfield_rotation(cobj(), soundfield_id,
- soundfield_rotation);
- }
-
- /// Changes the master volume.
- /// For more information, see gvr_audio_set_master_volume().
- void SetMasterVolume(float volume) {
- gvr_audio_set_master_volume(cobj(), volume);
- }
-
- /// Changes the volume of an existing sound.
- /// For more information, see gvr_audio_set_sound_volume().
- void SetSoundVolume(AudioSourceId source_id, float volume) {
- gvr_audio_set_sound_volume(cobj(), source_id, volume);
- }
-
- /// Sets the head position from a matrix representation.
- /// For more information, see gvr_audio_set_head_pose().
- void SetHeadPose(const Mat4f& head_pose_matrix) {
- gvr_audio_set_head_pose(cobj(), head_pose_matrix);
- }
-
- /// Turns on/off the room reverberation effect.
- /// For more information, see gvr_audio_enable_room().
- void EnableRoom(bool enable) { gvr_audio_enable_room(cobj(), enable); }
-
- /// Sets the room properties describing the dimensions and surface materials
- /// of a given room. For more information, see
- /// gvr_audio_set_room_properties().
- void SetRoomProperties(float size_x, float size_y, float size_z,
- gvr_audio_material_type wall_material,
- gvr_audio_material_type ceiling_material,
- gvr_audio_material_type floor_material) {
- gvr_audio_set_room_properties(cobj(), size_x, size_y, size_z,
- wall_material, ceiling_material,
- floor_material);
- }
-
- /// Adjusts the properties of the current reverb, allowing changes to the
- /// reverb's gain, duration and low/high frequency balance. For more
- /// information see gvr_audio_set_room_reverb_adjustments().
- void SetRoomReverbAdjustments(float gain, float time_adjust,
- float brightness_adjust) {
- gvr_audio_set_room_reverb_adjustments(cobj(), gain, time_adjust,
- brightness_adjust);
- }
-
- /// Enables the stereo speaker mode. For more information see
- /// gvr_audio_enable_stereo_speaker_mode().
- void EnableStereoSpeakerMode(bool enable) {
- gvr_audio_enable_stereo_speaker_mode(cobj(), enable);
- }
-};
-
-} // namespace gvr
-#endif // #if defined(__cplusplus) && !defined(GVR_NO_CPP_WRAPPER)
-
-#endif // VR_GVR_CAPI_INCLUDE_GVR_AUDIO_H_
diff --git a/libraries/headers/vr/gvr/capi/include/gvr_audio_surround.h b/libraries/headers/vr/gvr/capi/include/gvr_audio_surround.h
deleted file mode 100644
index b936e78..0000000
--- a/libraries/headers/vr/gvr/capi/include/gvr_audio_surround.h
+++ /dev/null
@@ -1,225 +0,0 @@
-/* Copyright 2016 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef VR_GVR_CAPI_INCLUDE_GVR_AUDIO_SURROUND_H_
-#define VR_GVR_CAPI_INCLUDE_GVR_AUDIO_SURROUND_H_
-
-#include <stdint.h>
-
-#include "vr/gvr/capi/include/gvr_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif // __cplusplus
-
-/// @defgroup AudioSurround Surround Renderer API
-/// @brief This is the GVR Binaural Surround Renderer C API which reads in
-/// PCM buffers of surround sound as well as ambisonic soundfield content
-/// to render binaural stereo. In contrast to GVR's Spatial Audio API, the
-/// Surround Renderer API is designed to be integrated into media players to
-/// enable head-tracked binaural audio in VR movie and 360 video experiences. It
-/// accepts input and output buffers of arbitrary frame size. However note that
-/// the binaural output is only generated when the number of input frames exceed
-/// the process_num_frames size specified during construction.
-
-/// @{
-
-typedef struct gvr_audio_surround_context_ gvr_audio_surround_context;
-
-/// Creates and initializes a gvr_audio_surround_context. Note that
-/// the returned instance must be deleted with
-/// gvr_audio_surround_destroy.
-///
-/// @param surround_format Input surround format.
-/// @param num_input_channels Number of input channels. This must match with
-/// the selected surround rendering mode.
-/// @param frames_per_processing Number of frames required to trigger internal
-/// processing. Best performance is achieved for power of two sizes.
-/// @param sample_rate_hz Sample rate of audio buffers.
-gvr_audio_surround_context* gvr_audio_surround_create(
- gvr_audio_surround_format_type surround_format, int32_t num_input_channels,
- int32_t frames_per_processing, int sample_rate_hz);
-
-/// Destroys a gvr_audio_surround_context that was previously created
-/// with gvr_audio_surround_create.
-///
-/// @param api Pointer to a pointer to a gvr_audio_surround_context.
-/// The pointer will be set to NULL after destruction.
-void gvr_audio_surround_destroy(gvr_audio_surround_context** api);
-
-/// Returns the number of samples the input buffer is currently able to consume.
-///
-/// @param api Pointer to a gvr_audio_surround_context.
-/// @return Number of available samples in input buffer.
-int64_t gvr_audio_surround_get_available_input_size_samples(
- const gvr_audio_surround_context* api);
-
-/// Adds interleaved audio data to the renderer. If enough data has been
-/// provided for an output buffer to be generated then it will be immediately
-/// available via gvr_audio_surround_get_interleaved_output(). The
-/// input data is copied into an internal buffer which allows the caller to
-/// re-use the input buffer immediately. The available space in the internal
-/// buffer can be obtained via
-/// gvr_audio_surround_get_available_output_size_samples().
-///
-/// @param api Pointer to a gvr_audio_surround_context.
-/// @param input_buffer_ptr Pointer to interleaved input data.
-/// @param num_samples Size of interleaved input data in samples.
-/// @return The number of consumed samples.
-int64_t gvr_audio_surround_add_interleaved_input(
- gvr_audio_surround_context* api, const int16_t* input_buffer_ptr,
- int64_t num_samples);
-
-/// Returns the number of samples available in the output buffer.
-///
-/// @param api Pointer to a gvr_audio_surround_context.
-/// @return Number of available samples in output buffer.
-int64_t gvr_audio_surround_get_available_output_size_samples(
- const gvr_audio_surround_context* api);
-
-/// Gets a processed output buffer in interleaved format.
-///
-/// @param api Pointer to a gvr_audio_surround_context.
-/// @param output_buffer_ptr Pointer to allocated interleaved output buffer.
-/// @param num_samples Size of output buffer in samples.
-/// @return The number of consumed samples.
-int64_t gvr_audio_surround_get_interleaved_output(
- gvr_audio_surround_context* api, int16_t* output_buffer_ptr,
- int64_t num_samples);
-
-/// Removes all buffered input and processed output buffers from the buffer
-/// queues.
-///
-/// @param api Pointer to a gvr_audio_surround_context.
-void gvr_audio_surround_clear(gvr_audio_surround_context* api);
-
-/// Triggers the processing of data that has been input but not yet processed.
-/// Note after calling this method, all processed output must be consumed via
-/// gvr_audio_surround_get_interleaved_output() before adding new input
-/// buffers.
-///
-/// @param api Pointer to a gvr_audio_surround_context.
-/// @return Whether any data was processed.
-bool gvr_audio_surround_trigger_processing(gvr_audio_surround_context* api);
-
-/// Updates the head rotation.
-///
-/// @param api Pointer to a gvr_audio_surround_context.
-/// @param w W component of quaternion.
-/// @param x X component of quaternion.
-/// @param y Y component of quaternion.
-/// @param z Z component of quaternion.
-void gvr_audio_surround_set_head_rotation(gvr_audio_surround_context* api,
- float w, float x, float y, float z);
-
-/// @}
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-// Convenience C++ wrapper.
-#if defined(__cplusplus) && !defined(GVR_NO_CPP_WRAPPER)
-
-#include <memory>
-#include <string>
-
-namespace gvr {
-/// This is a convenience C++ wrapper for the Audio Surround C API.
-///
-/// This wrapper strategy prevents ABI compatibility issues between compilers
-/// by ensuring that the interface between client code and the implementation
-/// code in libgvr.so is a pure C interface. The translation from C++ calls
-/// to C calls provided by this wrapper runs entirely in the client's binary
-/// and is compiled by the client's compiler.
-///
-/// Methods in this class are only documented insofar as the C++ wrapping logic
-/// is concerned; for information about the method itself, please refer to the
-/// corresponding function in the C API.
-///
-///
-/// THREADING: this class is thread-safe and reentrant after initialized
-/// with Init().
-class AudioSurroundApi
- : public WrapperBase<gvr_audio_surround_context,
- gvr_audio_surround_destroy> {
- public:
- using WrapperBase::WrapperBase;
-
- /// Creates and initializes a gvr_audio_context.
- /// For more information, see gvr_audio_surround_create().
- bool Init(AudioSurroundFormat surround_format, int32_t num_input_channels,
- int32_t frames_per_buffer, int sample_rate_hz) {
- cobject_ = gvr_audio_surround_create(surround_format, num_input_channels,
- frames_per_buffer, sample_rate_hz);
- return cobject_ != nullptr;
- }
-
- /// Returns the number of samples the input buffer is currently able to
- /// consume.
- /// For more information, see
- /// gvr_audio_surround_get_available_input_size_samples().
- int64_t GetAvailableInputSizeSamples() const {
- return gvr_audio_surround_get_available_input_size_samples(cobj());
- }
-
- /// Adds interleaved audio data to the renderer.
- /// For more information, see
- /// gvr_audio_surround_add_interleaved_input().
- int64_t AddInterleavedInput(const int16_t* input_buffer_ptr,
- int64_t num_samples) {
- return gvr_audio_surround_add_interleaved_input(cobj(), input_buffer_ptr,
- num_samples);
- }
-
- /// Returns the number of samples available in the output buffer.
- /// For more information, see
- /// gvr_audio_surround_get_available_output_size_samples().
- int64_t GetAvailableOutputSizeSamples() const {
- return gvr_audio_surround_get_available_output_size_samples(cobj());
- }
-
- /// Gets a processed output buffer in interleaved format.
- /// For more information, see
- /// gvr_audio_surround_get_interleaved_output().
- int64_t GetInterleavedOutput(int16_t* output_buffer_ptr,
- int64_t num_samples) {
- return gvr_audio_surround_get_interleaved_output(
- cobj(), output_buffer_ptr, num_samples);
- }
-
- /// Removes all buffered input and processed output buffers from the buffer
- /// queues.
- /// For more information, see gvr_audio_surround_clear().
- void Clear() { gvr_audio_surround_clear(cobj()); }
-
- /// Triggers the processing of data that has been input but not yet processed.
- /// For more information, see
- /// gvr_audio_surround_trigger_processing().
- bool TriggerProcessing() {
- return gvr_audio_surround_trigger_processing(cobj());
- }
-
- /// Updates the head rotation.
- /// For more information, see gvr_audio_surround_set_head_rotation().
- void SetHeadRotation(float w, float x, float y, float z) {
- gvr_audio_surround_set_head_rotation(cobj(), w, x, y, z);
- }
-};
-
-} // namespace gvr
-#endif // #if defined(__cplusplus) && !defined(GVR_NO_CPP_WRAPPER)
-
-#endif // VR_GVR_CAPI_INCLUDE_GVR_AUDIO_SURROUND_H_
diff --git a/libraries/headers/vr/gvr/capi/include/gvr_beta.h b/libraries/headers/vr/gvr/capi/include/gvr_beta.h
deleted file mode 100644
index 6720394..0000000
--- a/libraries/headers/vr/gvr/capi/include/gvr_beta.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Copyright 2018 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef VR_GVR_CAPI_INCLUDE_GVR_BETA_H_
-#define VR_GVR_CAPI_INCLUDE_GVR_BETA_H_
-
-#include "vr/gvr/capi/include/gvr_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/// @defgroup Beta GVR Beta APIs
-///
-/// @brief These are experimental APIs that are likely to change between
-/// releases.
-///
-/// This file contains functions that are part of the Daydream Labs APIs. These
-/// APIs are public, but there is no guarantee about how long they will be
-/// supported. They may also be using functionality that is not available for
-/// all users of a given platform.
-
-/// @{
-
-// ************************************************************************** //
-// * 6DOF Controllers * //
-// ************************************************************************** //
-
-/// Configuration for a specific controller
-typedef enum {
- /// Used when controller configuration is unknown.
- GVR_BETA_CONTROLLER_CONFIGURATION_UNKNOWN = 0,
- /// 3DOF controller. This controller may have simulated position data.
- GVR_BETA_CONTROLLER_CONFIGURATION_3DOF = 1,
- /// 6DOF controller.
- GVR_BETA_CONTROLLER_CONFIGURATION_6DOF = 2,
-} gvr_beta_controller_configuration_type;
-
-/// Tracking state for 6DOF controllers.
-typedef enum {
- /// Indicates whether the controller's tracking status is unknown.
- GVR_BETA_CONTROLLER_TRACKING_STATUS_FLAG_TRACKING_UNKNOWN = (1U << 0),
- /// Indicates whether the controller is tracking in full 6DOF mode.
- GVR_BETA_CONTROLLER_TRACKING_STATUS_FLAG_TRACKING_NOMINAL = (1U << 1),
- /// Indicates whether the controller is occluded. For optically tracked
- /// controllers, occlusion happens for a brief time as the user blocks the
- /// tracking system with their hand or the other controller. The position of
- /// the controller will be clamped to the last known value.
- GVR_BETA_CONTROLLER_TRACKING_STATUS_FLAG_OCCLUDED = (1U << 2),
- /// Indicates whether the controller is out of field of view of the tracking
- /// system. The position of the controller is no longer accurate and should be
- /// ignored.
- GVR_BETA_CONTROLLER_TRACKING_STATUS_FLAG_OUT_OF_FOV = (1U << 3),
-} gvr_beta_controller_tracking_status_flags;
-
-/// Returns the configuration of the given controller.
-///
-/// @param controller_context Controller API context.
-/// @param state The controller to query.
-/// @return the current controller configuration of type
-/// |gvr_beta_controller_configuration_type|.
-int32_t gvr_beta_controller_get_configuration_type(
- const gvr_controller_context* controller_context,
- const gvr_controller_state* state);
-
-/// Returns the tracking status of the controller. The status is an OR'd
-/// combination of GVR_BETA_CONTROLLER_TRACKING_STATUS_FLAG_* flags.
-///
-/// @param state The controller state to get the tracking status from.
-/// @return The set of flags representing the current the tracking status.
-int32_t gvr_beta_controller_state_get_tracking_status(
- const gvr_controller_state* state);
-
-/// @}
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-#endif // VR_GVR_CAPI_INCLUDE_GVR_BETA_H_
diff --git a/libraries/headers/vr/gvr/capi/include/gvr_controller.h b/libraries/headers/vr/gvr/capi/include/gvr_controller.h
deleted file mode 100644
index 7d13f50..0000000
--- a/libraries/headers/vr/gvr/capi/include/gvr_controller.h
+++ /dev/null
@@ -1,931 +0,0 @@
-/* Copyright 2016 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef VR_GVR_CAPI_INCLUDE_GVR_CONTROLLER_H_
-#define VR_GVR_CAPI_INCLUDE_GVR_CONTROLLER_H_
-
-#ifdef __ANDROID__
-#include <jni.h>
-#endif
-
-#include <stdint.h>
-
-#include "vr/gvr/capi/include/gvr.h"
-#include "vr/gvr/capi/include/gvr_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/// @defgroup Controller Controller API
-/// @brief This is the Controller C API, which allows access to a VR controller.
-///
-/// If you are writing C++ code, you might prefer to use the C++ wrapper rather
-/// than implement this C API directly.
-///
-/// Typical initialization example:
-///
-/// // Get your gvr_context* pointer from GvrLayout:
-/// gvr_context* gvr = ......; // (get from GvrLayout in Java)
-///
-/// // Set up the API features:
-/// int32_t options = gvr_controller_get_default_options();
-///
-/// // Enable non-default options, if needed:
-/// options |= GVR_CONTROLLER_ENABLE_GYRO | GVR_CONTROLLER_ENABLE_ACCEL;
-///
-/// // Create and init:
-/// gvr_controller_context* context =
-/// gvr_controller_create_and_init(options, gvr);
-///
-/// // Check if init was successful.
-/// if (!context) {
-/// // Handle error.
-/// return;
-/// }
-///
-/// gvr_controller_state* state = gvr_controller_state_create();
-///
-/// // Resume:
-/// gvr_controller_resume(context);
-///
-/// Usage:
-///
-/// void DrawFrame() {
-/// gvr_controller_state_update(context, 0, state);
-/// // ... process controller state ...
-/// }
-///
-/// // When your application gets paused:
-/// void OnPause() {
-/// gvr_controller_pause(context);
-/// }
-///
-/// // When your application gets resumed:
-/// void OnResume() {
-/// gvr_controller_resume(context);
-/// }
-///
-/// To conserve battery, be sure to call gvr_controller_pause and
-/// gvr_controller_resume when your app gets paused and resumed, respectively.
-///
-/// THREADING: unless otherwise noted, all functions are thread-safe, so
-/// you can operate on the same gvr_controller_context object from multiple
-/// threads.
-/// @{
-
-/// Represents a Daydream Controller API object, used to invoke the
-/// Daydream Controller API.
-typedef struct gvr_controller_context_ gvr_controller_context;
-
-/// Returns the default features for the controller API.
-///
-/// @return The set of default features, as bit flags (an OR'ed combination of
-/// the GVR_CONTROLLER_ENABLE_* feature flags).
-int32_t gvr_controller_get_default_options();
-
-/// Creates and initializes a gvr_controller_context instance which can be used
-/// to invoke the Daydream Controller API functions. Important: after creation
-/// the API will be in the paused state (the controller will be inactive).
-/// You must call gvr_controller_resume() explicitly (typically, in your Android
-/// app's onResume() callback).
-///
-/// @param options The API options. To get the defaults, use
-/// gvr_controller_get_default_options().
-/// @param context The GVR Context object to sync with (optional).
-/// This can be nullptr. If provided, the context's state will
-/// be synchronized with the controller's state where possible. For
-/// example, when the user recenters the controller, this will
-/// automatically recenter head tracking as well.
-/// WARNING: the caller is responsible for making sure the pointer
-/// remains valid for the lifetime of this object.
-/// @return A pointer to the initialized API, or NULL if an error occurs.
-gvr_controller_context* gvr_controller_create_and_init(
- int32_t options, gvr_context* context);
-
-#ifdef __ANDROID__
-/// Creates and initializes a gvr_controller_context instance with an explicit
-/// Android context and class loader.
-///
-/// @param env The JNI Env associated with the current thread.
-/// @param android_context The Android application context. This must be the
-/// application context, NOT an Activity context (Note: from any Android
-/// Activity in your app, you can call getApplicationContext() to
-/// retrieve the application context).
-/// @param class_loader The class loader to use when loading Java
-/// classes. This must be your app's main class loader (usually
-/// accessible through activity.getClassLoader() on any of your Activities).
-/// @param options The API options. To get the defaults, use
-/// gvr_controller_get_default_options().
-/// @param context The GVR Context object to sync with (optional).
-/// This can be nullptr. If provided, the context's state will
-/// be synchronized with the controller's state where possible. For
-/// example, when the user recenters the controller, this will
-/// automatically recenter head tracking as well.
-/// WARNING: the caller is responsible for making sure the pointer
-/// remains valid for the lifetime of this object.
-/// @return A pointer to the initialized API, or NULL if an error occurs.
-gvr_controller_context* gvr_controller_create_and_init_android(
- JNIEnv *env, jobject android_context, jobject class_loader,
- int32_t options, gvr_context* context);
-#endif // #ifdef __ANDROID__
-
-/// Destroys a gvr_controller_context that was previously created with
-/// gvr_controller_init.
-///
-/// @param api Pointer to a pointer to a gvr_controller_context. The pointer
-/// will be set to NULL after destruction.
-void gvr_controller_destroy(gvr_controller_context** api);
-
-/// Pauses the controller, possibly releasing resources.
-/// Call this when your app/game loses focus.
-/// Calling this when already paused is a no-op.
-/// Thread-safe (call from any thread).
-///
-/// @param api Pointer to a gvr_controller_context.
-void gvr_controller_pause(gvr_controller_context* api);
-
-/// Resumes the controller. Call this when your app/game regains focus.
-/// Calling this when already resumed is a no-op.
-/// Thread-safe (call from any thread).
-///
-/// @param api Pointer to a gvr_controller_context.
-void gvr_controller_resume(gvr_controller_context* api);
-
-/// Returns the number (N) of controllers currently available.
-///
-/// Each controller can be identified by an index in the range [0, N), which
-/// can be passed to gvr_controller_state_update to set a gvr_controller_state
-/// instance to the state of the controller for that index.
-///
-/// @param api Pointer to a gvr_controller_context.
-/// @return The number of controllers currently available.
-int32_t gvr_controller_get_count(gvr_controller_context* api);
-
-/// Convenience to convert an API status code to string. The returned pointer
-/// is static and valid throughout the lifetime of the application.
-///
-/// @param status The gvr_controller_api_status to convert to string.
-/// @return A pointer to a string that describes the value.
-const char* gvr_controller_api_status_to_string(int32_t status);
-
-/// Convenience to convert an connection state to string. The returned pointer
-/// is static and valid throughout the lifetime of the application.
-///
-/// @param state The state to convert to string.
-/// @return A pointer to a string that describes the value.
-const char* gvr_controller_connection_state_to_string(int32_t state);
-
-/// Convenience to convert an connection state to string. The returned pointer
-/// is static and valid throughout the lifetime of the application.
-///
-/// @param button The gvr_controller_button to convert to string.
-/// @return A pointer to a string that describes the value.
-const char* gvr_controller_button_to_string(int32_t button);
-
-/// Creates a gvr_controller_state.
-///
-/// @return A gvr_controller_state instance that will receive state updates for
-/// a controller.
-gvr_controller_state* gvr_controller_state_create();
-
-/// Destroys and sets to NULL a gvr_controller_state that was previously
-/// created with gvr_controller_state_create.
-///
-/// @param state Pointer to a pointer to the controller state to be destroyed
-/// and nulled.
-void gvr_controller_state_destroy(gvr_controller_state** state);
-
-/// Updates the controller state. Reading the controller state is not a
-/// const getter: it has side-effects. In particular, some of the
-/// gvr_controller_state fields (the ones documented as "transient") represent
-/// one-time events and will be true for only one read operation, and false
-/// in subsequent reads.
-///
-/// If the controller_index passed here does not correspond to an available
-/// controller (i.e. the controller_index is not in the range [0,N) where N is
-/// the number of controllers returned by gvr_controller_get_count), then the
-/// values of fields set for the gvr_controller_state instance passed in here
-/// are undefined.
-///
-/// The index of each controller device will remain constant the same across
-/// controller disconnects/connects during a given VR session. If the
-/// underlying set of controllers expected to be available to applications has
-/// changed, the gvr_controller_context may no longer be valid, and must be
-/// recreated by the applicaion when notified of this.
-///
-/// @param api Pointer to a gvr_controller_context.
-/// @param controller_index The index of the controller to update the state
-/// from.
-/// @param out_state A pointer where the controller's state
-/// is to be written. This must have been allocated with
-/// gvr_controller_state_create().
-void gvr_controller_state_update(gvr_controller_context* api,
- int32_t controller_index,
- gvr_controller_state* out_state);
-
-/// Sets up arm model with user's handedness, gaze behavior and head rotation.
-/// This setting needs to be applied for every frame. User preferences of
-/// handedness and gaze behavior can be changed as needed in a sequence of
-/// frames. This needs to be called before gvr_controller_state_update() to
-/// apply arm model. GVR_CONTROLLER_ENABLE_ARM_MODEL flag needs to be enabled
-/// to apply arm model. The controller position computed with arm model is
-/// relative to the head origin. If using the opt-in neck model, the effective
-/// eye position after using vr_apply_neck_model() is shifted forward from the
-/// head origin by the neck-to-eye distance (8cm) when the head is in
-/// neutral position, and a matching forward offset should be applied to the
-/// controller position to compensate.
-///
-/// Note that this method will not generate a simulated position if real
-/// position information is available. Clear the GVR_CONTROLLER_ENABLE_POSITION
-/// option to discard any real position data and force the arm model on systems
-/// with real position data.
-///
-/// When multiple controllers are configured, this arm model will be applied to
-/// the controller at the given controller_index, if one exists.
-///
-/// @param api Pointer to a gvr_controller_context.
-/// @param controller_index Index of the controller to apply the arm model to.
-/// @param handedness User's preferred handedness (GVR_CONTROLLER_RIGHT_HANDED
-/// or GVR_CONTROLLER_LEFT_HANDED). Arm model will assume this is the hand
-/// that is holding the controller and position the arm accordingly.
-/// @param behavior User's preferred gaze behavior (SYNC_GAZE / FOLLOW_GAZE
-/// / IGNORE_GAZE). Arm model uses this to determine how the body rotates as
-/// gaze direction (i.e. head rotation) changes.
-/// @param head_space_from_start_space_rotation User's head rotation with
-/// respect to start space.
-void gvr_controller_apply_arm_model(
- gvr_controller_context* api, int32_t controller_index, int32_t handedness,
- int32_t behavior, gvr_mat4f head_space_from_start_space_rotation);
-
-/// Gets the API status of the controller state. Returns one of the
-/// gvr_controller_api_status variants, but returned as an int32_t for ABI
-/// compatibility.
-///
-/// @param state The controller state to get the status from.
-/// @return The status code from the controller state, as a
-/// gvr_controller_api_status variant.
-int32_t gvr_controller_state_get_api_status(const gvr_controller_state* state);
-
-/// Gets the connection state of the controller. Returns one of the
-/// gvr_controller_connection_state variants, but returned as an int32_t for ABI
-/// compatibility.
-///
-/// @param state The controller state to get the connection state from.
-/// @return The connection state from the controller state as a
-/// gvr_controller_connection_state variant.
-int32_t gvr_controller_state_get_connection_state(
- const gvr_controller_state* state);
-
-/// Returns the current controller orientation, in Start Space. The Start Space
-/// is the same space as the headset space and has these three axes
-/// (right-handed):
-///
-/// * The positive X axis points to the right.
-/// * The positive Y axis points upwards.
-/// * The positive Z axis points backwards.
-///
-/// The definition of "backwards" and "to the right" are based on the position
-/// of the controller when tracking started. For Daydream, this is when the
-/// controller was first connected in the "Connect your Controller" screen
-/// which is shown when the user enters VR.
-///
-/// The definition of "upwards" is given by gravity (away from the pull of
-/// gravity). This API may not work in environments without gravity, such
-/// as space stations or near the center of the Earth.
-///
-/// Since the coordinate system is right-handed, rotations are given by the
-/// right-hand rule. For example, rotating the controller counter-clockwise
-/// on a table top as seen from above means a positive rotation about the
-/// Y axis, while clockwise would mean negative.
-///
-/// Note that this is the Start Space for the *controller*, which initially
-/// coincides with the Start Space for the headset, but they may diverge over
-/// time due to controller/headset drift. A recentering operation will bring
-/// the two spaces back into sync.
-///
-/// Remember that a unit quaternion expresses a rotation. Given a rotation of
-/// theta radians about the (x, y, z) axis, the corresponding quaternion (in
-/// xyzw order) is:
-///
-/// (x * sin(theta/2), y * sin(theta/2), z * sin(theta/2), cos(theta/2))
-///
-/// Here are some examples of orientations of the controller and their
-/// corresponding quaternions, all given in xyzw order:
-///
-/// * Initial pose, pointing forward and lying flat on a surface: identity
-/// quaternion (0, 0, 0, 1). Corresponds to "no rotation".
-///
-/// * Flat on table, rotated 90 degrees counter-clockwise: (0, 0.7071, 0,
-/// 0.7071). Corresponds to a +90 degree rotation about the Y axis.
-///
-/// * Flat on table, rotated 90 degrees clockwise: (0, -0.7071, 0, 0.7071).
-/// Corresponds to a -90 degree rotation about the Y axis.
-///
-/// * Flat on table, rotated 180 degrees (pointing backwards): (0, 1, 0, 0).
-/// Corresponds to a 180 degree rotation about the Y axis.
-///
-/// * Pointing straight up towards the sky: (0.7071, 0, 0, 0.7071).
-/// Corresponds to a +90 degree rotation about the X axis.
-///
-/// * Pointing straight down towards the ground: (-0.7071, 0, 0, 0.7071).
-/// Corresponds to a -90 degree rotation about the X axis.
-///
-/// * Banked 90 degrees to the left: (0, 0, 0.7071, 0.7071). Corresponds
-/// to a +90 degree rotation about the Z axis.
-///
-/// * Banked 90 degrees to the right: (0, 0, -0.7071, 0.7071). Corresponds
-/// to a -90 degree rotation about the Z axis.
-///
-/// @param state The controller state to get the orientation from.
-/// @return The unit quaternion orientation from the controller state.
-gvr_quatf gvr_controller_state_get_orientation(
- const gvr_controller_state* state);
-
-/// Returns the current controller gyro reading, in Start Space.
-///
-/// The gyro measures the controller's angular speed in radians per second.
-/// Note that this is an angular *speed*, so it reflects how fast the
-/// controller's orientation is changing with time.
-/// In particular, if the controller is not being rotated, the angular speed
-/// will be zero on all axes, regardless of the current pose.
-///
-/// The axes are in the controller's device space. Specifically:
-///
-/// * The X axis points to the right of the controller.
-/// * The Y axis points upwards perpendicular to the top surface of the
-/// controller.
-/// * The Z axis points backwards along the body of the controller,
-/// towards its rear, where the charging port is.
-///
-/// As usual in a right-handed coordinate system, the sign of the angular
-/// velocity is given by the right-hand rule. So, for example:
-///
-/// * If the controller is flat on a table top spinning counter-clockwise
-/// as seen from above, you will read a positive angular velocity
-/// about the Y axis. Clockwise would be negative.
-/// * If the controller is initially pointing forward and lying flat and
-/// is then gradually angled up so that its tip points towards the sky,
-/// it will report a positive angular velocity about the X axis during
-/// that motion. Likewise, angling it down will report a negative angular
-/// velocity about the X axis.
-/// * If the controller is banked (rolled) to the right, this will
-/// report a negative angular velocity about the Z axis during the
-/// motion (remember the Z axis points backwards along the controller).
-/// Banking to the left will report a positive angular velocity about
-/// the Z axis.
-///
-/// @param state The controller state to get the gyro reading from.
-/// @return The gyro reading from the controller state.
-gvr_vec3f gvr_controller_state_get_gyro(const gvr_controller_state* state);
-
-/// Current (latest) controller accelerometer reading, in Start Space.
-///
-/// The accelerometer indicates the direction in which the controller feels
-/// an acceleration, including gravity. The reading is given in meters
-/// per second squared (m/s^2). The axes are the same as for the gyro.
-/// To have an intuition for the signs used in the accelerometer, it is useful
-/// to imagine that, when at rest, the controller is being "pushed" by a
-/// force opposite to gravity. It is as if, by the equivalency princle, it were
-/// on a frame of reference that is accelerating in the opposite direction to
-/// gravity. For example:
-///
-/// * If the controller is lying flat on a table top, it will read a positive
-/// acceleration of about 9.8 m/s^2 along the Y axis, corresponding to
-/// the acceleration of gravity (as if the table were pushing the controller
-/// upwards at 9.8 m/s^2 to counteract gravity).
-/// * If, in that situation, the controller is now accelerated upwards at
-/// 3.0 m/s^2, then the reading will be 12.8 m/s^2 along the Y axis,
-/// since the controller will now feel a stronger acceleration corresponding
-/// to the 9.8 m/s^2 plus the upwards push of 3.0 m/s^2.
-/// * If, the controller is accelerated downwards at 5.0 m/s^2, then the
-/// reading will now be 4.8 m/s^2 along the Y axis, since the controller
-/// will now feel a weaker acceleration (as the acceleration is giving in
-/// to gravity).
-/// * If you were to give in to gravity completely, letting the controller
-/// free fall towards the ground, it will read 0 on all axes, as there
-/// will be no force acting on the controller. (Please do not put your
-/// controller in a free-fall situation. This is just a theoretical
-/// example.)
-///
-/// @param state The controller state to get the accelerometer reading from.
-/// @return The accelerometer reading from the controller state.
-gvr_vec3f gvr_controller_state_get_accel(const gvr_controller_state* state);
-
-/// Returns whether the user is touching the touchpad.
-///
-/// @param state The controller state to get the touchpad being touched state
-/// from.
-/// @return True iff the user is touching the controller, false otherwise.
-bool gvr_controller_state_is_touching(const gvr_controller_state* state);
-
-/// Returns the normalized coordinates on the touchpad. Each value ranges from
-/// [0, 1]. The x value of the touch point aligns with the controller's x-axis,
-/// which points to the right of the controller, and the y value aligns with the
-/// controller's z-axis. See
-/// https://developers.google.com/vr/reference/gvr-ndk-controller#controller_space
-/// for more information.
-/// This is initially (0, 0) until an event is received.
-/// If the user is not touching the touchpad, then this is the position of the
-/// last touch.
-/// On circular touchpad hardware, the valid touch area will be a 0.5 radius
-/// circle centered around (0.5, 0.5).
-///
-/// @param state The controller state to get the touchpad touch position from.
-/// @return The touchpad touch position in normalized coordinates iff the user
-/// is touching the toucpad. The last touched coordinate otherwise.
-gvr_vec2f gvr_controller_state_get_touch_pos(const gvr_controller_state* state);
-
-/// Returns true iff user just started touching touchpad. This is a transient
-/// event (i.e., it is true for only one frame after the event).
-///
-/// @param state The controller state to get the touch down data from.
-/// @return True iff the user just started touching the touchpad, false
-/// otherwise.
-bool gvr_controller_state_get_touch_down(const gvr_controller_state* state);
-
-/// Returns true if user just stopped touching touchpad. This is a transient
-/// event: (i.e., it is true for only one frame after the event).
-///
-/// @param state The controller state to get the touch up data from.
-/// @return True iff the user just released the touchpad, false otherwise.
-bool gvr_controller_state_get_touch_up(const gvr_controller_state* state);
-
-/// Returns true if a recenter operation just ended. This is a transient event:
-/// (i.e., it is true only for one frame after the recenter ended). If this is
-/// true then the `orientation` field is already relative to the new center.
-///
-/// @param state The controller state to get the recenter information from.
-/// @return True iff a recenter operation just ended, false otherwise.
-bool gvr_controller_state_get_recentered(const gvr_controller_state* state);
-
-/// @deprecated Use gvr_controller_state_get_recentered instead.
-///
-/// Returns whether the recenter flow is currently in progress.
-///
-/// @param state The controller state to get the recenter information from.
-/// @return True iff recenter flow is in progress, false otherwise.
-bool gvr_controller_state_get_recentering(const gvr_controller_state* state);
-
-/// Returns whether the given button is currently pressed.
-///
-/// @param state The controller state to get the button state from.
-/// @return True iff the button specified by the 'state' parameter is pressed,
-/// false otherwise.
-bool gvr_controller_state_get_button_state(const gvr_controller_state* state,
-
- int32_t button);
-
-/// Returns whether the given button was just pressed (transient).
-///
-/// @param state The controller state to get the button pressed data from.
-/// @return True iff the button specified by the 'state' parameter was just
-/// pressed, false otherwise.
-bool gvr_controller_state_get_button_down(const gvr_controller_state* state,
- int32_t button);
-
-/// Returns whether the given button was just released (transient).
-///
-/// @param state The controller state to get the button released data from.
-/// @return True iff the button specified by the 'state' parameter was just
-/// released, false otherwise.
-bool gvr_controller_state_get_button_up(const gvr_controller_state* state,
- int32_t button);
-
-/// Returns the timestamp (nanos) when the last orientation event was received.
-///
-/// @param state The controller state to get the last orientation event
-/// timestamp from.
-/// @return A 64-bit integer representation of the timestamp when the last
-/// orientation event was recieved.
-int64_t gvr_controller_state_get_last_orientation_timestamp(
- const gvr_controller_state* state);
-
-/// Returns the timestamp (nanos) when the last gyro event was received.
-///
-/// @param state The controller state to get the last gyro event timestamp from.
-/// @return A 64-bit integer representation of the timestamp when the last
-/// gyro event was recieved.
-int64_t gvr_controller_state_get_last_gyro_timestamp(
- const gvr_controller_state* state);
-
-/// Returns the timestamp (nanos) when the last accelerometer event was
-/// received.
-///
-/// @param state The controller state to get the last accelerometer timestamp
-/// from.
-/// @return A 64-bit integer representation of the timestamp when the last
-/// accelerometer event was recieved.
-int64_t gvr_controller_state_get_last_accel_timestamp(
- const gvr_controller_state* state);
-
-/// Returns the timestamp (nanos) when the last touch event was received.
-///
-/// @param state The controller state to get the last touch timestamp from.
-/// @return A 64-bit integer representation of the timestamp when the last
-/// touch event was recieved.
-int64_t gvr_controller_state_get_last_touch_timestamp(
- const gvr_controller_state* state);
-
-/// Returns the timestamp (nanos) when the last button event was received.
-///
-/// @param state The controller state to get the last button event timestamp
-/// from.
-/// @return A 64-bit integer representation of the timestamp when the last
-/// button event was recieved.
-int64_t gvr_controller_state_get_last_button_timestamp(
- const gvr_controller_state* state);
-
-/// Current (latest) controller position. This may be real position data from
-/// the controller if GVR_CONTROLLER_ENABLE_POSITION is used and real data is
-/// available, or it may be simulated data if GVR_CONTROLLER_ENABLE_ARM_MODEL
-/// and gvr_controller_apply_arm_model() are used. For more information,
-/// see gvr_controller_apply_arm_model().
-///
-/// @param state The controller state to get the latest simulated position from.
-/// @return The current controller simulated position (intended for use with an
-/// elbow model).
-gvr_vec3f gvr_controller_state_get_position(const gvr_controller_state* state);
-
-/// Returns the timestamp (nanos) when the last position event was received.
-///
-/// @param state The controller state to get the last position event timestamp
-/// from.
-/// @return A 64-bit integer representation of the timestamp when the last
-/// position event was recieved.
-int64_t gvr_controller_state_get_last_position_timestamp(
- const gvr_controller_state* state);
-
-/// Returns whether the controller battery is currently charging.
-/// This may not be real time information and may be slow to be updated.
-/// The last battery update time is available by calling
-/// gvr_controller_state_get_battery_timestamp.
-///
-/// @param state The controller state to get the battery charging state from.
-/// @return True iff the battery was charging at the last available update,
-/// false otherwise.
-bool gvr_controller_state_get_battery_charging(
- const gvr_controller_state* state);
-
-/// Returns the bucketed controller battery level at the last update.
-/// Note this is a gvr_controller_battery_level and not a percent.
-/// The last battery update time is available by calling
-/// gvr_controller_state_get_battery_timestamp.
-///
-/// @param state The controller state to get the battery level from.
-/// @return The last known battery level as a gvr_controller_battery_level
-/// variant.
-int32_t gvr_controller_state_get_battery_level(
- const gvr_controller_state* state);
-
-/// Returns the timestamp (nanos) when the last battery event was received.
-///
-/// @param state The controller state to get battery event timestamp from.
-/// @return A 64-bit integer representation of the timestamp when the last
-/// battery event was received.
-int64_t gvr_controller_state_get_last_battery_timestamp(
- const gvr_controller_state* state);
-
-/// Convenience to convert a battery level to string. The returned pointer
-/// is static and valid throughout the lifetime of the application.
-///
-/// @param level The gvr_controller_battery_level to convert to string.
-/// @return A pointer to a string that describes the value.
-const char* gvr_controller_battery_level_to_string(int32_t level);
-
-/// @}
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-// Convenience C++ wrapper.
-#if defined(__cplusplus) && !defined(GVR_NO_CPP_WRAPPER)
-
-#include <memory>
-
-namespace gvr {
-/// This is a convenience C++ wrapper for the Controller C API.
-///
-/// This wrapper strategy prevents ABI compatibility issues between compilers
-/// by ensuring that the interface between client code and the implementation
-/// code in libgvr.so is a pure C interface. The translation from C++ calls
-/// to C calls provided by this wrapper runs entirely in the client's binary
-/// and is compiled by the client's compiler.
-///
-/// Methods in this class are only documented insofar as the C++ wrapping logic
-/// is concerned; for information about the method itself, please refer to the
-/// corresponding function in the C API.
-///
-/// Typical C++ initialization example:
-///
-/// std::unique_ptr<ControllerApi> controller_api(new ControllerApi);
-///
-/// // Your GVR context pointer (which can be obtained from GvrLayout)
-/// gvr_context* context = .....; // (get it from GvrLayout)
-///
-/// // Set up the options:
-/// int32_t options = ControllerApi::DefaultOptions();
-///
-/// // Enable non-default options, if you need them:
-/// options |= GVR_CONTROLLER_ENABLE_GYRO;
-///
-/// // Init the ControllerApi object:
-/// bool success = controller_api->Init(options, context);
-/// if (!success) {
-/// // Handle failure.
-/// // Do NOT call other methods (like Resume, etc) if init failed.
-/// return;
-/// }
-///
-/// // Resume the ControllerApi (if your app is on the foreground).
-/// controller_api->Resume();
-///
-/// ControllerState state;
-///
-/// Usage example:
-///
-/// void DrawFrame() {
-/// state.Update(*controller_api);
-/// // ... process controller state ...
-/// }
-///
-/// // When your application gets paused:
-/// void OnPause() {
-/// controller_api->Pause();
-/// }
-///
-/// // When your application gets resumed:
-/// void OnResume() {
-/// controller_api->Resume();
-/// }
-///
-/// To conserve battery, be sure to call Pause() and Resume() when your app
-/// gets paused and resumed, respectively. This will allow the underlying
-/// logic to unbind from the VR service and let the controller sleep when
-/// no apps are using it.
-///
-/// THREADING: this class is thread-safe and reentrant after initialized
-/// with Init().
-class ControllerApi
- : public WrapperBase<gvr_controller_context, gvr_controller_destroy> {
- public:
- using WrapperBase::WrapperBase;
-
- /// Returns the default controller options.
- static int32_t DefaultOptions() {
- return gvr_controller_get_default_options();
- }
-
- // Deprecated factory-style create method.
- // TODO(btco): remove this once no one is using it.
- static std::unique_ptr<ControllerApi> Create() {
- return std::unique_ptr<ControllerApi>(new ControllerApi);
- }
-
- /// Initializes the controller API.
- ///
- /// This method must be called exactly once in the lifetime of this object.
- /// Other methods in this class may only be called after Init() returns true.
- /// Note: this does not cause the ControllerApi to be resumed. You must call
- /// Resume() explicitly in order to start using the controller.
- ///
- /// For more information see gvr_controller_create_and_init().
- ///
- /// @return True if initialization was successful, false if it failed.
- /// Initialization may fail, for example, because invalid options were
- /// supplied.
- bool Init(int32_t options, gvr_context* context) {
- cobject_ = gvr_controller_create_and_init(options, context);
- return cobject_ != nullptr;
- }
-
-#ifdef __ANDROID__
- /// Overload of Init() with explicit Android context and class loader
- /// (for Android only). For more information, see:
- /// gvr_controller_create_and_init_android().
- bool Init(JNIEnv *env, jobject android_context, jobject class_loader,
- int32_t options, gvr_context* context) {
- cobject_ = gvr_controller_create_and_init_android(
- env, android_context, class_loader, options, context);
- return cobject_ != nullptr;
- }
-#endif // #ifdef __ANDROID__
-
- /// Convenience overload that calls Init without a gvr_context.
- // TODO(btco): remove once it is no longer being used.
- bool Init(int32_t options) {
- return Init(options, nullptr);
- }
-
- /// Pauses the controller.
- /// For more information, see gvr_controller_pause().
- void Pause() {
- gvr_controller_pause(cobj());
- }
-
- /// Resumes the controller.
- /// For more information, see gvr_controller_resume().
- void Resume() {
- gvr_controller_resume(cobj());
- }
-
- /// Convenience functions to convert enums to strings.
- /// For more information, see the corresponding functions in the C API.
- static const char* ToString(ControllerApiStatus status) {
- return gvr_controller_api_status_to_string(status);
- }
-
- static const char* ToString(ControllerConnectionState state) {
- return gvr_controller_connection_state_to_string(state);
- }
-
- static const char* ToString(ControllerButton button) {
- return gvr_controller_button_to_string(button);
- }
-
- static const char* ToString(ControllerBatteryLevel level) {
- return gvr_controller_battery_level_to_string(level);
- }
-
- /// Returns the number (N) of controllers currently available.
- ///
- /// Each controller can be identified by an index in the range [0, N), which
- /// can be passed to the ControllerState constructor to get the state instance
- /// corresponding to the controller at that index.
- int32_t GetControllerCount() { return gvr_controller_get_count(cobj()); }
-
- /// For more information, see gvr_controller_apply_arm_model().
- void ApplyArmModel(const ControllerHandedness handedness,
- const ArmModelBehavior behavior,
- const Mat4f& head_space_from_start_space_rotation) {
- ApplyArmModel(
- 0, handedness, behavior, head_space_from_start_space_rotation);
- }
-
- /// For more information, see gvr_controller_apply_arm_model().
- void ApplyArmModel(int32_t controller_index,
- const ControllerHandedness handedness,
- const ArmModelBehavior behavior,
- const Mat4f& head_space_from_start_space_rotation) {
- gvr_controller_apply_arm_model(cobj(), controller_index, handedness,
- behavior,
- head_space_from_start_space_rotation);
- }
-};
-
-/// Convenience C++ wrapper for the opaque gvr_controller_state type. See the
-/// gvr_controller_state functions for more information.
-class ControllerState
- : public WrapperBase<gvr_controller_state, gvr_controller_state_destroy> {
- public:
- using WrapperBase::WrapperBase;
- ControllerState() : WrapperBase(gvr_controller_state_create()) {}
-
- /// For more information, see gvr_controller_state_update().
- void Update(const ControllerApi& api) {
- gvr_controller_state_update(const_cast<gvr_controller_context*>(api.cobj()),
- 0, cobj());
- }
-
- /// For more information, see gvr_controller_state_update().
- void Update(const ControllerApi& api, int32_t controller_index) {
- gvr_controller_state_update(const_cast<gvr_controller_context*>(api.cobj()),
- controller_index, cobj());
- }
-
- /// For more information, see gvr_controller_state_get_api_status().
- ControllerApiStatus GetApiStatus() const {
- return static_cast<ControllerApiStatus>(
- gvr_controller_state_get_api_status(cobj()));
- }
-
- /// For more information, see gvr_controller_state_get_connection_state().
- ControllerConnectionState GetConnectionState() const {
- return static_cast<ControllerConnectionState>(
- gvr_controller_state_get_connection_state(cobj()));
- }
-
- /// For more information, see gvr_controller_state_get_orientation().
- gvr_quatf GetOrientation() const {
- return gvr_controller_state_get_orientation(cobj());
- }
-
- /// For more information, see gvr_controller_state_get_gyro().
- gvr_vec3f GetGyro() const { return gvr_controller_state_get_gyro(cobj()); }
-
- /// For more information, see gvr_controller_state_get_accel().
- gvr_vec3f GetAccel() const { return gvr_controller_state_get_accel(cobj()); }
-
- /// For more information, see gvr_controller_state_is_touching().
- bool IsTouching() const { return gvr_controller_state_is_touching(cobj()); }
-
- /// For more information, see gvr_controller_state_get_touch_pos().
- gvr_vec2f GetTouchPos() const {
- return gvr_controller_state_get_touch_pos(cobj());
- }
-
- /// For more information, see gvr_controller_state_get_touch_down().
- bool GetTouchDown() const {
- return gvr_controller_state_get_touch_down(cobj());
- }
-
- /// For more information, see gvr_controller_state_get_touch_up().
- bool GetTouchUp() const { return gvr_controller_state_get_touch_up(cobj()); }
-
- /// For more information, see gvr_controller_state_get_recentered().
- bool GetRecentered() const {
- return gvr_controller_state_get_recentered(cobj());
- }
-
- /// For more information, see gvr_controller_state_get_recentering().
- bool GetRecentering() const {
- return gvr_controller_state_get_recentering(cobj());
- }
-
- /// For more information, see gvr_controller_state_get_button_state().
- bool GetButtonState(ControllerButton button) const {
- return gvr_controller_state_get_button_state(cobj(), button);
- }
-
- /// For more information, see gvr_controller_state_get_button_down().
- bool GetButtonDown(ControllerButton button) const {
- return gvr_controller_state_get_button_down(cobj(), button);
- }
-
- /// For more information, see gvr_controller_state_get_button_up().
- bool GetButtonUp(ControllerButton button) const {
- return gvr_controller_state_get_button_up(cobj(), button);
- }
-
- /// For more information, see
- /// gvr_controller_state_get_last_orientation_timestamp().
- int64_t GetLastOrientationTimestamp() const {
- return gvr_controller_state_get_last_orientation_timestamp(cobj());
- }
-
- /// For more information, see gvr_controller_state_get_last_gyro_timestamp().
- int64_t GetLastGyroTimestamp() const {
- return gvr_controller_state_get_last_gyro_timestamp(cobj());
- }
-
- /// For more information, see gvr_controller_state_get_last_accel_timestamp().
- int64_t GetLastAccelTimestamp() const {
- return gvr_controller_state_get_last_accel_timestamp(cobj());
- }
-
- /// For more information, see gvr_controller_state_get_last_touch_timestamp().
- int64_t GetLastTouchTimestamp() const {
- return gvr_controller_state_get_last_touch_timestamp(cobj());
- }
-
- /// For more information, see
- /// gvr_controller_state_get_last_button_timestamp().
- int64_t GetLastButtonTimestamp() const {
- return gvr_controller_state_get_last_button_timestamp(cobj());
- }
-
- /// For more information, see gvr_controller_state_get_position().
- gvr_vec3f GetPosition() const {
- return gvr_controller_state_get_position(cobj());
- }
-
- /// For more information, see
- /// gvr_controller_state_get_last_position_timestamp().
- int64_t GetLastPositionTimestamp() const {
- return gvr_controller_state_get_last_position_timestamp(cobj());
- }
-
- /// For more information, see gvr_controller_state_get_battery_charging
- bool GetBatteryCharging() const {
- return gvr_controller_state_get_battery_charging(cobj());
- }
-
- /// For more information, see gvr_controller_state_get_battery_level
- ControllerBatteryLevel GetBatteryLevel() const {
- return static_cast<ControllerBatteryLevel>(
- gvr_controller_state_get_battery_level(cobj()));
- }
-
- /// For more information, see gvr_controller_state_get_last_battery_timestamp
- int64_t GetLastBatteryTimestamp() const {
- return gvr_controller_state_get_last_battery_timestamp(cobj());
- }
-};
-
-} // namespace gvr
-#endif // #if defined(__cplusplus) && !defined(GVR_NO_CPP_WRAPPER)
-
-#endif // VR_GVR_CAPI_INCLUDE_GVR_CONTROLLER_H_
diff --git a/libraries/headers/vr/gvr/capi/include/gvr_gesture.h b/libraries/headers/vr/gvr/capi/include/gvr_gesture.h
deleted file mode 100644
index ed3c23c..0000000
--- a/libraries/headers/vr/gvr/capi/include/gvr_gesture.h
+++ /dev/null
@@ -1,333 +0,0 @@
-/* Copyright 2016 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef VR_GVR_CAPI_INCLUDE_GVR_GESTURE_H_
-#define VR_GVR_CAPI_INCLUDE_GVR_GESTURE_H_
-
-#ifdef __ANDROID__
-#include <jni.h>
-#endif
-
-#if defined(__cplusplus) && !defined(GVR_NO_CPP_WRAPPER)
-#include <memory>
-#endif
-
-#include <stdint.h>
-#include "vr/gvr/capi/include/gvr_controller.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/// @defgroup Gesture Gesture C API
-/// @brief
-/// The Gesture C API allows clients to recognize touchpad and button
-/// gestures from a controller. Disclaimer: This API is experimental and is
-/// subject to changes.
-///
-/// If you are writing C++ code, you might prefer to use the C++ wrapper rather
-/// than implement this C API directly.
-///
-/// If you are using multiple controllers, you will need to create multiple
-/// gvr_gesture_context objects, one for each controller.
-///
-/// Example API usage:
-///
-/// Initialization:
-///
-/// // Create the gesture context.
-/// gvr_gesture_context* context = gvr_gesture_context_create();
-///
-/// Usage:
-///
-/// // Get the controller state from client.
-/// gvr_controller_state* controller_state = ...
-///
-/// // Detect the gestures.
-/// gvr_gesture_update(context, controller_state);
-///
-/// // Get the number of detected gestures.
-/// int num_gestures = gvr_gesture_get_count(context);
-///
-/// for (int i = 0; i < num_gestures; i ++) {
-/// gvr_gesture* gesture_ptr = gvr_gesture_get(context, i);
-/// switch (gvr_gesture_get_type(gesture_ptr)) {
-/// case GVR_GESTURE_SWIPE:
-/// // Handle swipe gesture.
-/// break;
-/// case GVR_GESTURE_SCROLL_START:
-/// // Handle the start of a sequence of scroll gestures.
-/// break;
-/// case GVR_GESTURE_SCROLL_UPDATE:
-/// // Handle an update in a sequence of scroll gestures.
-/// break;
-/// case GVR_GESTURE_SCROLL_END:
-/// // Handle the end of a sequence of scroll gestures.
-/// break;
-/// default:
-/// // Unexpected gesture type.
-/// break;
-/// }
-/// }
-///
-/// @{
-
-/// Gesture types.
-typedef enum {
- /// Finger moves quickly across the touch pad. This is a transient state that
- /// is only true for a single frame.
- GVR_GESTURE_SWIPE = 1,
- /// Finger starts scrolling on touch pad. This is a transient state that is
- /// only true for a single frame.
- GVR_GESTURE_SCROLL_START = 2,
- /// Finger is in the process of scrolling.
- GVR_GESTURE_SCROLL_UPDATE = 3,
- /// Finger stops scrolling. This is a transient state that is only true for a
- /// single frame.
- GVR_GESTURE_SCROLL_END = 4
-} gvr_gesture_type;
-
-/// Gesture directions.
-typedef enum {
- /// Finger moves up on the touch pad.
- GVR_GESTURE_DIRECTION_UP = 1,
- /// Finger moves down on the touch pad.
- GVR_GESTURE_DIRECTION_DOWN = 2,
- /// Finger moves left on the touch pad.
- GVR_GESTURE_DIRECTION_LEFT = 3,
- /// Finger moves right on the touch pad.
- GVR_GESTURE_DIRECTION_RIGHT = 4
-} gvr_gesture_direction;
-
-/// Opaque handle to gesture context.
-typedef struct gvr_gesture_context_ gvr_gesture_context;
-
-/// Opaque handle to gesture.
-typedef struct gvr_gesture_ gvr_gesture;
-
-/// Creates and initializes a gesture context instance which can be used to
-/// invoke the gesture API functions.
-///
-/// @return A pointer to the created gesture context instance.
-gvr_gesture_context* gvr_gesture_context_create();
-
-/// Destroys the gesture context.
-///
-/// @param context A pointer to a pointer to the gesture context instance. The
-/// pointer will be set to null after destruction.
-void gvr_gesture_context_destroy(gvr_gesture_context** context);
-
-/// Restarts gesture detection. This should be used whenever the user does not
-/// lift up the finger from the controller touchpad, but the gesture detection
-/// needs to be restarted (e.g. the controller reticle moves from a
-/// non-scrollable region to a scrollable region).
-///
-/// @param context A pointer to the gesture context instance.
-void gvr_gesture_restart(gvr_gesture_context* context);
-
-/// Updates the gesture context based on controller state.
-///
-/// @param controller_state A pointer to the controller state instance.
-/// @param context A pointer to the gesture context instance.
-void gvr_gesture_update(const gvr_controller_state* controller_state,
- gvr_gesture_context* context);
-
-/// Returns the number of gestures detected in previous gvr_gesture_update().
-///
-/// @param context A pointer to the gesture context instance.
-/// @return The number of detected gestures.
-int gvr_gesture_get_count(const gvr_gesture_context* context);
-
-/// Returns the gesture with the given index.
-/// The returned pointer remains valid only until the list is modified i.e. by
-/// calling gvr_gesture_update() or gvr_gesture_context_destroy().
-///
-/// @param context A pointer to the gesture context instance.
-/// @param index The index of the gesture to be returned.
-/// @return A pointer to the gesture instance at the given index.
-const gvr_gesture* gvr_gesture_get(const gvr_gesture_context* context,
- int index);
-
-/// Returns the type (swipe/scroll_start/scroll_update/scroll_end) of given
-/// gesture.
-///
-/// @param gesture A pointer to the gesture instance.
-/// @return The type of the given gesture.
-gvr_gesture_type gvr_gesture_get_type(const gvr_gesture* gesture);
-
-/// Returns the direction (up/down/left/right) of given gesture.
-///
-/// @param gesture A pointer to the gesture instance.
-/// @return The direction of the given gesture.
-gvr_gesture_direction gvr_gesture_get_direction(const gvr_gesture* gesture);
-
-/// Returns the velocity (in normalized distance / second) of the given gesture,
-/// where (0,0) is the top-left of the touchpad and (1,1) is the bottom right.
-///
-/// @param gesture A pointer to the gesture instance.
-/// @return The velocity of the given gesture.
-gvr_vec2f gvr_gesture_get_velocity(const gvr_gesture* gesture);
-
-/// Returns the displacement (in touchpad unit) of given gesture.
-///
-/// @param gesture A pointer to the gesture instance.
-/// @return The displacement of the given gesture.
-gvr_vec2f gvr_gesture_get_displacement(const gvr_gesture* gesture);
-
-/// Returns whether a long press on controller button has been detected.
-///
-/// @param controller_state A pointer to the controller state instance.
-/// @param context A pointer to the gesture context instance.
-/// @param button A controller button type.
-/// @return Whether the given button has been long pressed.
-bool gvr_get_button_long_press(const gvr_controller_state* controller_state,
- const gvr_gesture_context* context,
- gvr_controller_button button);
-
-/// @}
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-// Convenience C++ wrapper.
-#if defined(__cplusplus) && !defined(GVR_NO_CPP_WRAPPER)
-
-namespace gvr {
-
-typedef gvr_gesture_direction GestureDirection;
-typedef gvr_gesture_type GestureType;
-typedef gvr_gesture Gesture;
-
-/// This is a convenience C++ wrapper for the Gesture C API.
-///
-/// This wrapper strategy prevents ABI compatibility issues between compilers
-/// by ensuring that the interface between client code and the implementation
-/// code in libgvr_gesture.so is a pure C interface. The translation from C++
-/// calls to C calls provided by this wrapper runs entirely in the client's
-/// binary and is compiled by the client's compiler.
-///
-/// If you are using multiple controllers, you will need to create multiple
-/// GestureApi objects, one for each controller.
-///
-/// Methods in this class are only documented insofar as the C++ wrapping logic
-/// is concerned; for information about the method itself, please refer to the
-/// corresponding function in the C API.
-///
-/// Example API usage:
-///
-/// Initialization:
-///
-/// GestureApi gesture_api;
-///
-/// Usage:
-///
-/// // Get the controller state from client
-/// ControllerState* controller_state = ...
-///
-/// // Detect the gestures.
-/// gesture_api.Update(controller_state);
-///
-/// // Get the number of detected gestures
-/// int num_gestures = gesture_api.GetGestureCount();
-///
-/// for (int i = 0; i < num_gestures; i ++) {
-/// Gesture* gesture_ptr = gesture_api.GetGesture(i);
-/// switch (gesture_api.GetGestureType(gesture_ptr)) {
-/// case GVR_GESTURE_SWIPE:
-/// // Handle swipe gesture.
-/// break;
-/// case GVR_GESTURE_SCROLL_START:
-/// // Handle the start of a sequence of scroll gestures.
-/// break;
-/// case GVR_GESTURE_SCROLL_UPDATE:
-/// // Handle an update in a sequence of scroll gestures.
-/// break;
-/// case GVR_GESTURE_SCROLL_END:
-/// // Handle the end of a sequence of scroll gestures.
-/// break;
-/// default:
-/// // Unexpected gesture type.
-/// break;
-/// }
-/// }
-///
-class GestureApi
- : public WrapperBase<gvr_gesture_context, gvr_gesture_context_destroy> {
- public:
- using WrapperBase::WrapperBase;
-
- /// Creates a GestureApi object. It is properly initialized and can handle
- /// gesture detection immediately.
- GestureApi() : WrapperBase(gvr_gesture_context_create()) {}
-
- /// Restarts gesture detection.
- /// For more information, see gvr_gesture_restart().
- void Restart() { gvr_gesture_restart(cobj()); }
-
- /// Updates gesture context based on current controller state.
- /// For more information, see gvr_gesture_update().
- void Update(const ControllerState* controller_state) {
- gvr_gesture_update(controller_state->cobj(), cobj());
- }
-
- /// Returns the number of gestures detected.
- /// For more information, see gvr_gesture_get_count().
- int GetGestureCount() { return gvr_gesture_get_count(cobj()); }
-
- /// Returns the gesture at given index.
- /// For more information, see gvr_gesture_get().
- const Gesture* GetGesture(int index) {
- return gvr_gesture_get(cobj(), index);
- }
-
- /// Returns the type of the given gesture.
- /// For more information, see gvr_gesture_get_type().
- GestureType GetGestureType(const Gesture* gesture) {
- return gvr_gesture_get_type(gesture);
- }
-
- /// Returns the direction of current gesture.
- /// For more information, see gvr_gesture_get_direction().
- GestureDirection GetGestureDirection(const Gesture* gesture) {
- return gvr_gesture_get_direction(gesture);
- }
-
- /// Returns gesture velocity.
- /// For more information, see gvr_gesture_get_velocity().
- gvr_vec2f GetVelocity(const Gesture* gesture) {
- return gvr_gesture_get_velocity(gesture);
- }
-
- /// Returns gesture displacement.
- /// For more information, see gvr_gesture_get_displacement().
- gvr_vec2f GetDisplacement(const Gesture* gesture) {
- return gvr_gesture_get_displacement(gesture);
- }
-
- /// Returns whether long press on the given controller button is detected.
- /// For more information, see gvr_get_button_long_press().
- bool GetButtonLongPress(const ControllerState* controller_state,
- ControllerButton button) {
- return gvr_get_button_long_press(controller_state->cobj(), cobj(),
- button);
- }
-};
-
-} // namespace gvr
-
-#endif // #if defined(__cplusplus) && !defined(GVR_NO_CPP_WRAPPER)
-
-#endif // VR_GVR_CAPI_INCLUDE_GVR_GESTURE_H_
diff --git a/libraries/headers/vr/gvr/capi/include/gvr_types.h b/libraries/headers/vr/gvr/capi/include/gvr_types.h
deleted file mode 100644
index 896ccb5..0000000
--- a/libraries/headers/vr/gvr/capi/include/gvr_types.h
+++ /dev/null
@@ -1,1060 +0,0 @@
-/* Copyright 2016 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef VR_GVR_CAPI_INCLUDE_GVR_TYPES_H_
-#define VR_GVR_CAPI_INCLUDE_GVR_TYPES_H_
-
-#include <stdbool.h>
-#include <stdint.h>
-
-#if defined(__cplusplus) && !defined(GVR_NO_CPP_WRAPPER)
-#include <cassert>
-#include <type_traits>
-#include <utility> // for std::swap
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/// @defgroup types Google VR Types
-/// @brief Various types used in the Google VR NDK.
-/// @{
-
-/// Primary context for invoking Google VR APIs.
-typedef struct gvr_context_ gvr_context;
-
-/// An enum for the left and right eye.
-typedef enum {
- GVR_LEFT_EYE = 0,
- GVR_RIGHT_EYE,
- GVR_NUM_EYES
-} gvr_eye;
-
-/// The type of VR viewer.
-typedef enum {
- /// A Cardboard-compatible viewer. A typical Cardboard viewer supports a
- /// simple touchscreen-based trigger input mechanism. On most platforms, this
- /// is the default viewer type if no viewer has been explicitly paired.
- GVR_VIEWER_TYPE_CARDBOARD = 0,
- /// A Daydream-compatible viewer. A typical Daydream viewer supports 3DOF
- /// controller input (as defined in gvr_controller.h), and is intended only
- /// for Daydream-ready platforms. It does *not* support touchscreen-based
- /// input unless Cardboard emulation is explicitly enabled.
- GVR_VIEWER_TYPE_DAYDREAM = 1,
-} gvr_viewer_type;
-
-/// Types of VR-specific features which may or may not be supported on the
-/// underlying platform.
-typedef enum {
- /// Asynchronous reprojection warps the app's rendered frame using the most
- /// recent head pose just before pushing the frame to the display.
- GVR_FEATURE_ASYNC_REPROJECTION = 0,
- /// Support for framebuffers suitable for rendering with the GL_OVR_multiview2
- /// and GL_OVR_multiview_multisampled_render_to_texture extensions.
- GVR_FEATURE_MULTIVIEW = 1,
- /// Support for external surface creation and compositing. Note that this
- /// feature may be supported only under certain configurations, e.g., when
- /// async reprojection is explicitly enabled.
- GVR_FEATURE_EXTERNAL_SURFACE = 2,
- /// Support for providing head poses with 6 degrees-of-freedom (orientation
- /// and position).
- GVR_FEATURE_HEAD_POSE_6DOF = 3,
- /// Indicates that buffers which are part of a frame are backed by Android
- /// AHardwareBuffer objects. When this feature is available, the function
- /// gvr_frame_get_hardware_buffer can be called to get the AHardwareBuffer
- /// pointer.
- /// Hardware buffers are only supported on Android O and later, on a
- /// best-effort basis. Future versions of GVR and/or Android may also cease to
- /// support hardware buffers if the underlying implementation no longer
- /// supports this rendering path.
- GVR_FEATURE_HARDWARE_BUFFERS = 4,
-} gvr_feature;
-
-/// @}
-
-/// Version information for the Google VR API.
-typedef struct gvr_version_ {
- int32_t major;
- int32_t minor;
- int32_t patch;
-} gvr_version;
-
-/// An integral 2D size. Used for render target sizes.
-typedef struct gvr_sizei {
- int32_t width;
- int32_t height;
-} gvr_sizei;
-
-/// An integral 2D rect. Used for window bounds in pixels.
-typedef struct gvr_recti {
- int32_t left;
- int32_t right;
- int32_t bottom;
- int32_t top;
-} gvr_recti;
-
-/// A floating point 2D rect. Used for field of view, and also for ranges
-/// in texture space. When used for a field of view, all angles are in positive
-/// degrees from the optical axis.
-typedef struct gvr_rectf {
- float left;
- float right;
- float bottom;
- float top;
-} gvr_rectf;
-
-/// A floating point 2D vector.
-typedef struct gvr_vec2f {
- float x;
- float y;
-} gvr_vec2f;
-
-/// A floating point 3D vector.
-typedef struct gvr_vec3f {
- float x;
- float y;
- float z;
-} gvr_vec3f;
-
-/// A floating point 4x4 matrix stored in row-major form. It needs to be
-/// transposed before being used with OpenGL.
-typedef struct gvr_mat4f {
- float m[4][4];
-} gvr_mat4f;
-
-/// A floating point quaternion, in JPL format.
-/// We use this simple struct in order not to impose a dependency on a
-/// particular math library. The user of this API is free to encapsulate this
-/// into any math library they want.
-typedef struct gvr_quatf {
- /// qx, qy, qz are the vector components.
- float qx;
- float qy;
- float qz;
- /// qw is the scalar component.
- float qw;
-} gvr_quatf;
-
-/// A *monotonic system time* representation. On Android, this is equivalent to
-/// System.nanoTime(), or clock_gettime(CLOCK_MONOTONIC). If there is any doubt
-/// about how to get the current time for the current platform, simply use
-/// gvr_get_time_point_now().
-typedef struct gvr_clock_time_point {
- int64_t monotonic_system_time_nanos;
-} gvr_clock_time_point;
-
-/// A structure that ties together a region of a buffer, the field of view
-/// rendered into that region and a target eye index to define part of the
-/// user's field of view. The SDK implementation uses this information to
-/// transform the images generated by the app output into the final display that
-/// is sent to the screen.
-///
-/// A set of these structures will most often be generated by the API, via
-/// gvr_get_recommended_buffer_viewports() or
-/// gvr_get_screen_buffer_viewports(). However, the client may also customize
-/// these values via gvr_buffer_viewport_list_set(), constructing a custom
-/// gvr_buffer_viewport_list for use in the distortion pass.
-typedef struct gvr_buffer_viewport_ gvr_buffer_viewport;
-
-/// List of buffer viewports that completely specifies how to transform the
-/// frame's buffers into the image displayed on the screen.
-typedef struct gvr_buffer_viewport_list_ gvr_buffer_viewport_list;
-
-/// Specification of a pixel buffer. A pixel buffer can have color, depth and
-/// stencil attachments and mostly corresponds to the OpenGL concept of a
-/// framebuffer object. However, since there can be multiple such objects for
-/// each frame, we avoid calling them "framebuffers". Pixel buffers which are
-/// part of the currently acquired frame are immutable, i.e., they cannot be
-/// resized or otherwise reconfigured.
-typedef struct gvr_buffer_spec_ gvr_buffer_spec;
-
-/// Swap chain that contains some number of frames. Frames in the swap chain
-/// can be unused, in the process of being distorted and presented on the
-/// screen, or acquired and being rendered to by the application. The swap chain
-/// ensures that the most recent available frame is always shown and that the
-/// application never has to wait to render the next frame.
-typedef struct gvr_swap_chain_ gvr_swap_chain;
-
-/// A single frame acquired from the swap chain. Each frame is composed of one
-/// or more buffers, which are then lens distorted and composited into the final
-/// output. Buffers are identified by indices that correspond to the position
-/// of their gvr_buffer_spec in the list passed when constructing the swap
-/// chain.
-typedef struct gvr_frame_ gvr_frame;
-
-/// Generic flag type.
-typedef uint32_t gvr_flags;
-
-/// Generic 64-bit flag type.
-typedef uint64_t gvr_flags64;
-
-/// Opaque handle to a collection of properties.
-typedef struct gvr_properties_ gvr_properties;
-
-/// Represents a Daydream Controller API object, used to invoke the
-/// Daydream Controller API.
-typedef struct gvr_controller_context_ gvr_controller_context;
-
-/// A generic container for various pure value types.
-typedef struct gvr_value {
- int32_t value_type; // gvr_value_type
- gvr_flags flags;
- union {
- float f;
- double d;
- int32_t i;
- int64_t i64;
- gvr_flags fl;
- gvr_flags64 fl64;
- gvr_sizei si;
- gvr_recti ri;
- gvr_rectf rf;
- gvr_vec2f v2f;
- gvr_vec3f v3f;
- gvr_quatf qf;
- gvr_mat4f m4f;
- gvr_clock_time_point t;
-
- // Pad the struct to 256 bytes.
- uint8_t padding[248];
- };
-} gvr_value;
-
-/// @addtogroup types
-/// @{
-
-/// The type of a recentering associated with a GVR_EVENT_RECENTER event.
-typedef enum {
- /// Recentering state received from the platform upon starting or resuming the
- /// application. This event is usually precedes a
- /// GVR_EVENT_HEAD_TRACKING_RESUMED event in the same frame.
- GVR_RECENTER_EVENT_RESTART = 1,
-
- /// A recenter event triggered by the controller (e.g. long-press on Home
- /// button or connecting controller as part of donning UX).
- GVR_RECENTER_EVENT_ALIGNED = 2,
-
- /// A recenter event triggered by proximity sensor detecting the user has put
- /// put the headset on (a.k.a. donned the headset).
- GVR_RECENTER_EVENT_DON = 3,
-} gvr_recenter_event_type;
-
-/// @}
-
-/// Event data associated with a GVR_EVENT_RECENTER event, which indicates head
-/// tracking recentering. (Controller recentering is signaled separately
-/// through gvr_controller_state_get_recentered().) The client may wish to
-/// handle this event to provide custom recentering logic.
-typedef struct gvr_recenter_event_data {
- int32_t recenter_type; // gvr_recenter_event_type
- gvr_flags recenter_event_flags;
-
- /// The new transform that maps from headset's "sensor" space to the
- /// recentered "start" space. This transform can also be retrieved by querying
- /// for the GVR_PROPERTY_RECENTER_TRANSFORM property.
- gvr_mat4f start_space_from_tracking_space_transform;
-} gvr_recenter_event_data;
-
-/// Container for various GVR-events to which the client can optionally respond.
-typedef struct gvr_event {
- gvr_clock_time_point timestamp;
- int32_t type; // gvr_event_type
- gvr_flags flags;
- union {
- gvr_recenter_event_data recenter_event_data;
-
- // Pad the struct to 512 bytes.
- uint8_t padding[496];
- };
-} gvr_event;
-
-/// @addtogroup types
-/// @{
-
-/// Constants that represent GVR error codes.
-typedef enum {
- GVR_ERROR_NONE = 0,
- GVR_ERROR_CONTROLLER_CREATE_FAILED = 2,
- GVR_ERROR_NO_FRAME_AVAILABLE = 3,
-
- /// Error code indicating that no events are currently available.
- /// See also gvr_poll_event()
- GVR_ERROR_NO_EVENT_AVAILABLE = 1000000,
-
- /// Error code indicating that the given property is not available.
- /// See also gvr_properties_get().
- GVR_ERROR_NO_PROPERTY_AVAILABLE = 1000001,
-} gvr_error;
-
-/// Flags indicating the current status of the tracker.
-/// See also GVR_PROPERTY_TRACKING_STATUS.
-enum {
- /// The tracker is in an invalid (potentially paused) state, or no valid
- /// tracker exists.
- GVR_TRACKING_STATUS_FLAG_INVALID = (1U << 0),
- /// The tracker is still initializing, so the pose may not be accurate.
- GVR_TRACKING_STATUS_FLAG_INITIALIZING = (1U << 1),
- /// The tracker pose is derived from 6DoF sensors and has a translational
- /// component.
- GVR_TRACKING_STATUS_FLAG_HAS_6DOF = (1U << 2),
-};
-
-/// Controller API options (bit flags).
-enum {
- /// Indicates that controller orientation data should be reported.
- GVR_CONTROLLER_ENABLE_ORIENTATION = 1 << 0,
- /// Indicates that controller touchpad data should be reported.
- GVR_CONTROLLER_ENABLE_TOUCH = 1 << 1,
- /// Indicates that controller gyroscope data should be reported.
- GVR_CONTROLLER_ENABLE_GYRO = 1 << 2,
- /// Indicates that controller accelerometer data should be reported.
- GVR_CONTROLLER_ENABLE_ACCEL = 1 << 3,
- /// Indicates that controller gestures should be reported.
- GVR_CONTROLLER_ENABLE_GESTURES = 1 << 4,
- /// Indicates that controller pose prediction should be enabled.
- GVR_CONTROLLER_ENABLE_POSE_PREDICTION = 1 << 5,
- /// Indicates that system should provide real position data if available.
- GVR_CONTROLLER_ENABLE_POSITION = 1 << 6,
- /// Indicates that controller battery data should be reported.
- GVR_CONTROLLER_ENABLE_BATTERY = 1 << 7,
- /// Indicates that elbow model should be enabled if the system doesn't provide
- /// real position data.
- GVR_CONTROLLER_ENABLE_ARM_MODEL = 1 << 8,
-};
-
-/// Constants that represent the status of the controller API.
-typedef enum {
- /// API is happy and healthy. This doesn't mean the controller itself
- /// is connected, it just means that the underlying service is working
- /// properly.
- GVR_CONTROLLER_API_OK = 0,
-
- /// Any other status represents a permanent failure that requires
- /// external action to fix:
-
- /// API failed because this device does not support controllers (API is too
- /// low, or other required feature not present).
- GVR_CONTROLLER_API_UNSUPPORTED = 1,
- /// This app was not authorized to use the service (e.g., missing permissions,
- /// the app is blacklisted by the underlying service, etc).
- GVR_CONTROLLER_API_NOT_AUTHORIZED = 2,
- /// The underlying VR service is not present.
- GVR_CONTROLLER_API_UNAVAILABLE = 3,
- /// The underlying VR service is too old, needs upgrade.
- GVR_CONTROLLER_API_SERVICE_OBSOLETE = 4,
- /// The underlying VR service is too new, is incompatible with current client.
- GVR_CONTROLLER_API_CLIENT_OBSOLETE = 5,
- /// The underlying VR service is malfunctioning. Try again later.
- GVR_CONTROLLER_API_MALFUNCTION = 6,
-} gvr_controller_api_status;
-
-/// Constants that represent the state of the controller.
-typedef enum {
- /// Controller is disconnected.
- GVR_CONTROLLER_DISCONNECTED = 0,
- /// Controller is scanning.
- GVR_CONTROLLER_SCANNING = 1,
- /// Controller is connecting.
- GVR_CONTROLLER_CONNECTING = 2,
- /// Controller is connected.
- GVR_CONTROLLER_CONNECTED = 3,
-} gvr_controller_connection_state;
-
-/// Controller buttons.
-typedef enum {
- GVR_CONTROLLER_BUTTON_NONE = 0,
- GVR_CONTROLLER_BUTTON_CLICK = 1, ///< Touchpad Click.
- GVR_CONTROLLER_BUTTON_HOME = 2,
- GVR_CONTROLLER_BUTTON_APP = 3,
- GVR_CONTROLLER_BUTTON_VOLUME_UP = 4,
- GVR_CONTROLLER_BUTTON_VOLUME_DOWN = 5,
- GVR_CONTROLLER_BUTTON_TRIGGER = 6,
- GVR_CONTROLLER_BUTTON_GRIP = 7,
- GVR_CONTROLLER_BUTTON_RESERVED2 = 8,
-
- /// Note: there are 8 buttons on the controller, but the state arrays have
- /// this many elements due to the inclusion of a dummy "none" button.
- GVR_CONTROLLER_BUTTON_COUNT = 9,
-} gvr_controller_button;
-
-/// Controller battery states.
-typedef enum {
- GVR_CONTROLLER_BATTERY_LEVEL_UNKNOWN = 0,
- GVR_CONTROLLER_BATTERY_LEVEL_CRITICAL_LOW = 1,
- GVR_CONTROLLER_BATTERY_LEVEL_LOW = 2,
- GVR_CONTROLLER_BATTERY_LEVEL_MEDIUM = 3,
- GVR_CONTROLLER_BATTERY_LEVEL_ALMOST_FULL = 4,
- GVR_CONTROLLER_BATTERY_LEVEL_FULL = 5,
-
- /// Note: there are 5 distinct levels, but there are 6 due to the inclusion
- /// of an UNKNOWN state before any battery information is collected, etc.
- GVR_CONTROLLER_BATTERY_LEVEL_COUNT = 6,
-} gvr_controller_battery_level;
-
-/// @}
-
-/// Opaque handle to controller state.
-typedef struct gvr_controller_state_ gvr_controller_state;
-
-/// @addtogroup types
-/// @{
-
-/// Rendering modes define CPU load / rendering quality balances.
-typedef enum {
- /// Stereo panning of all Sound Objects. This disables HRTF-based rendering.
- GVR_AUDIO_RENDERING_STEREO_PANNING = 0,
- /// HRTF-based rendering over a virtual array of 8 loudspeakers arranged in
- /// a cube configuration around the listener’s head.
- GVR_AUDIO_RENDERING_BINAURAL_LOW_QUALITY = 1,
- /// HRTF-based rendering over a virtual array of 16 loudspeakers arranged in
- /// an approximate equidistribution about the around the listener’s head.
- GVR_AUDIO_RENDERING_BINAURAL_HIGH_QUALITY = 2,
-} gvr_audio_rendering_mode;
-
-/// Room surface material names, used to set room properties.
-typedef enum {
- /// Acoustically transparent material, reflects no sound.
- GVR_AUDIO_MATERIAL_TRANSPARENT = 0,
- /// Acoustic ceiling tiles, absorbs most frequencies.
- GVR_AUDIO_MATERIAL_ACOUSTIC_CEILING_TILES = 1,
- /// Bare brick, relatively reflective.
- GVR_AUDIO_MATERIAL_BRICK_BARE = 2,
- /// Painted brick
- GVR_AUDIO_MATERIAL_BRICK_PAINTED = 3,
- /// Coarse surface concrete block.
- GVR_AUDIO_MATERIAL_CONCRETE_BLOCK_COARSE = 4,
- /// Painted concrete block.
- GVR_AUDIO_MATERIAL_CONCRETE_BLOCK_PAINTED = 5,
- /// Heavy curtains.
- GVR_AUDIO_MATERIAL_CURTAIN_HEAVY = 6,
- /// Fiber glass insulation.
- GVR_AUDIO_MATERIAL_FIBER_GLASS_INSULATION = 7,
- /// Thin glass.
- GVR_AUDIO_MATERIAL_GLASS_THIN = 8,
- /// Thick glass.
- GVR_AUDIO_MATERIAL_GLASS_THICK = 9,
- /// Grass.
- GVR_AUDIO_MATERIAL_GRASS = 10,
- /// Linoleum on concrete.
- GVR_AUDIO_MATERIAL_LINOLEUM_ON_CONCRETE = 11,
- /// Marble.
- GVR_AUDIO_MATERIAL_MARBLE = 12,
- /// Galvanized sheet metal.
- GVR_AUDIO_MATERIAL_METAL = 13,
- /// Wooden parquet on concrete.
- GVR_AUDIO_MATERIAL_PARQUET_ON_CONCRETE = 14,
- /// Rough plaster surface.
- GVR_AUDIO_MATERIAL_PLASTER_ROUGH = 15,
- /// Smooth plaster surface.
- GVR_AUDIO_MATERIAL_PLASTER_SMOOTH = 16,
- /// Plywood panel.
- GVR_AUDIO_MATERIAL_PLYWOOD_PANEL = 17,
- /// Polished concrete OR tile surface.
- GVR_AUDIO_MATERIAL_POLISHED_CONCRETE_OR_TILE = 18,
- /// Sheet rock.
- GVR_AUDIO_MATERIAL_SHEET_ROCK = 19,
- /// Surface of water or ice.
- GVR_AUDIO_MATERIAL_WATER_OR_ICE_SURFACE = 20,
- /// Wooden ceiling.
- GVR_AUDIO_MATERIAL_WOOD_CEILING = 21,
- /// Wood paneling.
- GVR_AUDIO_MATERIAL_WOOD_PANEL = 22,
-} gvr_audio_material_type;
-
-/// Distance rolloff models used for distance attenuation.
-typedef enum {
- /// Logarithmic distance rolloff model.
- GVR_AUDIO_ROLLOFF_LOGARITHMIC = 0,
- /// Linear distance rolloff model.
- GVR_AUDIO_ROLLOFF_LINEAR = 1,
- /// No distance attenuation will be applied.
- GVR_AUDIO_ROLLOFF_NONE = 2,
-} gvr_audio_distance_rolloff_type;
-
-/// Sound object and sound field identifier.
-typedef int32_t gvr_audio_source_id;
-
-/// Supported surround sound formats.
-typedef enum {
- // Enables to initialize a yet undefined rendering mode.
- GVR_AUDIO_SURROUND_FORMAT_INVALID = 0,
-
- // Virtual mono speaker at 0 degrees (front).
- GVR_AUDIO_SURROUND_FORMAT_SURROUND_MONO = 1,
-
- // Virtual stereo speakers at -30 degrees and +30 degrees.
- GVR_AUDIO_SURROUND_FORMAT_SURROUND_STEREO = 2,
-
- // 5.1 surround sound according to the ITU-R BS.775-3 speaker configuration
- // recommendation:
- // - Left (L) at 30 degrees.
- // - Right (R) at -30 degrees.
- // - Center (C) at 0 degrees.
- // - Low frequency effects (LFE) at front center at 0 degrees.
- // - Left surround (LS) at 110 degrees.
- // - Right surround (RS) at -110 degrees.
- //
- // The 5.1 channel input layout must matches AAC: L, R, C, LFE, LS, RS.
- // Note that this differs from the Vorbis/Opus 5.1 channel layout, which
- // is: L, C, R, LS, RS, LFE.
- GVR_AUDIO_SURROUND_FORMAT_SURROUND_FIVE_DOT_ONE = 3,
-
- // 7.1 surround sound according to the ITU-R BS.775-3 speaker configuration
- // recommendation:
- // - Left (FL) at 30 degrees.
- // - Right (FR) at -30 degrees.
- // - Center (C) at 0 degrees.
- // - Low frequency effects (LFE) at front center at 0 degrees.
- // - Left surround 1 (LS1) at 90 degrees.
- // - Right surround 1 (RS1) at -90 degrees.
- // - Left surround 2 (LS2) at 150 degrees.
- // - Right surround 2 (LS2) at -150 degrees.
- //
- // The 7.1 channel input layout must matches AAC: L, R, C, LFE, LS1, RS1,
- // LS2, RS2.
- // Note that this differs from the Vorbis/Opus 7.1 channel layout, which
- // is: L, C, R, LS1, RS1, LS2, RS2, LFE.
- GVR_AUDIO_SURROUND_FORMAT_SURROUND_SEVEN_DOT_ONE = 10,
-
- // First-order ambisonics (AmbiX format: 4 channels, ACN channel ordering,
- // SN3D normalization).
- GVR_AUDIO_SURROUND_FORMAT_FIRST_ORDER_AMBISONICS = 4,
-
- // Second-order ambisonics (AmbiX format: 9 channels, ACN channel ordering,
- // SN3D normalization).
- GVR_AUDIO_SURROUND_FORMAT_SECOND_ORDER_AMBISONICS = 5,
-
- // Third-order ambisonics (AmbiX format: 16 channels, ACN channel ordering,
- // SN3D normalization).
- GVR_AUDIO_SURROUND_FORMAT_THIRD_ORDER_AMBISONICS = 6,
-
- // First-order ambisonics with a non-diegetic stereo. The first 4 channels
- // contain ambisonic AmbiX format.
- // (AmbiX format: 4 channels, ACN channel ordering, SN3D normalization).
- // Channel 5 to 6 contain non-diegetic stereo.
- GVR_AUDIO_SURROUND_FORMAT_FIRST_ORDER_AMBISONICS_WITH_NON_DIEGETIC_STEREO = 7,
-
- // Second-order ambisonics with a non-diegetic stereo. The first 9 channels
- // contain ambisonic AmbiX format.
- // (AmbiX format: 9 channels, ACN channel ordering, SN3D normalization).
- // Channel 10 to 11 contain non-diegetic stereo.
- GVR_AUDIO_SURROUND_FORMAT_SECOND_ORDER_AMBISONICS_WITH_NON_DIEGETIC_STEREO =
- 8,
-
- // Third-order ambisonics with a non-diegetic stereo. The first 16 channels
- // contain ambisonic AmbiX format.
- // (AmbiX format: 16 channels, ACN channel ordering, SN3D normalization).
- // Channel 17 to 18 contain non-diegetic stereo.
- GVR_AUDIO_SURROUND_FORMAT_THIRD_ORDER_AMBISONICS_WITH_NON_DIEGETIC_STEREO = 9,
-
- // Note: Next available value is: 11
-} gvr_audio_surround_format_type;
-
-/// Valid color formats for swap chain buffers.
-typedef enum {
- /// Equivalent to GL_RGBA8. Pixel values are expected to be premultiplied
- /// with alpha.
- GVR_COLOR_FORMAT_RGBA_8888 = 0,
- /// Equivalent to GL_RGB565.
- GVR_COLOR_FORMAT_RGB_565 = 1,
-} gvr_color_format_type;
-
-typedef enum {
- /// No depth or stencil buffer.
- GVR_DEPTH_STENCIL_FORMAT_NONE = 255,
- /// Equivalent to GL_DEPTH_COMPONENT16.
- GVR_DEPTH_STENCIL_FORMAT_DEPTH_16 = 0,
- /// Equivalent to GL_DEPTH_COMPONENT24.
- GVR_DEPTH_STENCIL_FORMAT_DEPTH_24 = 1,
- /// Equivlaent to GL_DEPTH24_STENCIL8.
- GVR_DEPTH_STENCIL_FORMAT_DEPTH_24_STENCIL_8 = 2,
- /// Equivalent to GL_DEPTH_COMPONENT32F.
- GVR_DEPTH_STENCIL_FORMAT_DEPTH_32_F = 3,
- /// Equivalent to GL_DEPTH_32F_STENCIL8.
- GVR_DEPTH_STENCIL_FORMAT_DEPTH_32_F_STENCIL_8 = 4,
- /// Equivalent to GL_STENCIL8.
- GVR_DEPTH_STENCIL_FORMAT_STENCIL_8 = 5,
-} gvr_depth_stencil_format_type;
-
-/// Types of asynchronous reprojection.
-typedef enum {
- /// Do not reproject.
- GVR_REPROJECTION_NONE = 0,
- /// Reproject in all dimensions.
- GVR_REPROJECTION_FULL = 1,
-} gvr_reprojection;
-
-typedef enum {
- GVR_CONTROLLER_RIGHT_HANDED = 0,
- GVR_CONTROLLER_LEFT_HANDED = 1,
-} gvr_controller_handedness;
-
-/// Types of gaze behaviors used for arm model.
-typedef enum {
- // Body rotation matches head rotation all the time.
- GVR_ARM_MODEL_SYNC_GAZE = 0,
- // Body rotates as head rotates, but at a smaller angle.
- GVR_ARM_MODEL_FOLLOW_GAZE = 1,
- // Body doesn't rotate as head rotates.
- GVR_ARM_MODEL_IGNORE_GAZE = 2,
-} gvr_arm_model_behavior;
-
-typedef struct gvr_user_prefs_ gvr_user_prefs;
-
-// Anonymous enum for miscellaneous integer constants.
-enum {
- /// Constant that represents a nonexistent external surface. Pass to
- /// gvr_buffer_viewport_set_external_surface_id() to disable sampling from
- /// an external surface.
- GVR_EXTERNAL_SURFACE_ID_NONE = -1,
- /// Special index for a source buffer that has the same contents as the
- /// external surface attached to the given viewport. Pass this to
- /// gvr_buffer_viewport_set_source_buffer_index() to use the external surface
- /// as the buffer contents.
- GVR_BUFFER_INDEX_EXTERNAL_SURFACE = -1,
- /// Invalid source id that can be used to initialize source id variables
- /// during construction.
- GVR_AUDIO_INVALID_SOURCE_ID = -1,
-};
-
-/// Property types exposed by the gvr_properties_get() API.
-typedef enum {
- /// The height of the floor, if available, relative to the current start space
- /// origin. In general, for tracking systems with an eye level origin, this
- /// value will be negative.
- /// Type: float
- GVR_PROPERTY_TRACKING_FLOOR_HEIGHT = 1,
-
- /// The current transform that maps from headset's "sensor" space to the
- /// recentered "start" space. Apps can optionally undo or extend this
- /// transform to perform custom recentering logic with the SDK-provided poses,
- /// but the SDK assumes poses supplied during frame submission are in start
- /// space. This transform matches the one reported in the most recent
- /// gvr_recenter_event_data.
- /// Type: gvr_mat4f
- GVR_PROPERTY_RECENTER_TRANSFORM = 2,
-
- /// The type of safety region, if any, currently employed by the headset's
- /// tracker.
- /// Type: int (gvr_safety_region_type)
- GVR_PROPERTY_SAFETY_REGION = 3,
-
- /// Distance from safety cylinder axis at which the user's state transitions
- /// from outside to inside, generating a GVR_EVENT_SAFETY_REGION_ENTER event.
- /// This value is guaranteed to be less than
- /// GVR_PROPERTY_SAFETY_CYLINDER_EXIT_RADIUS.
- /// Type: float
- GVR_PROPERTY_SAFETY_CYLINDER_ENTER_RADIUS = 4,
-
- /// Distance from safety cylinder axis at which the user's state transitions
- /// from inside to outside, generating a GVR_EVENT_SAFETY_REGION_EXIT event.
- /// This value is guaranteed to be greater than
- /// GVR_PROPERTY_SAFETY_CYLINDER_ENTER_RADIUS.
- /// Type: float
- GVR_PROPERTY_SAFETY_CYLINDER_EXIT_RADIUS = 5,
-
- /// The current status of the head tracker, if available.
- /// Type: gvr_flags
- GVR_PROPERTY_TRACKING_STATUS = 6
-} gvr_property_type;
-
-/// Safety region types exposed from the GVR_PROPERTY_SAFETY_REGION property.
-typedef enum {
- GVR_SAFETY_REGION_NONE = 0,
-
- /// A safety region defined by a vertically-oriented cylinder, extending
- /// infinitely along the Y axis, and centered at the start space origin.
- /// Extents can be queried with the GVR_PROPERTY_SAFETY_CYLINDER_INNER_RADIUS
- /// and GVR_PROPERTY_SAFETY_CYLINDER_OUTER_RADIUS property keys.
- GVR_SAFETY_REGION_CYLINDER = 1,
-} gvr_safety_region_type;
-
-/// Value types for the contents of a gvr_value object instance.
-typedef enum {
- GVR_VALUE_TYPE_NONE = 0,
- GVR_VALUE_TYPE_FLOAT = 1,
- GVR_VALUE_TYPE_DOUBLE = 2,
- GVR_VALUE_TYPE_INT = 3,
- GVR_VALUE_TYPE_INT64 = 4,
- GVR_VALUE_TYPE_FLAGS = 5,
- GVR_VALUE_TYPE_SIZEI = 6,
- GVR_VALUE_TYPE_RECTI = 7,
- GVR_VALUE_TYPE_RECTF = 8,
- GVR_VALUE_TYPE_VEC2F = 9,
- GVR_VALUE_TYPE_VEC3F = 10,
- GVR_VALUE_TYPE_QUATF = 11,
- GVR_VALUE_TYPE_MAT4F = 12,
- GVR_VALUE_TYPE_CLOCK_TIME_POINT = 13,
-} gvr_value_type;
-
-/// The type of gvr_event.
-typedef enum {
- /// Notification that head tracking has been recentered. (Note that controller
- /// recentering is signaled separately through
- /// gvr_controller_state_get_recentered().)
- /// Event data type: gvr_recenter_event_data
- GVR_EVENT_RECENTER = 1,
-
- /// Notification that the user has exited the safety region, as defined by the
- /// gvr_safety_region_type.
- /// Event data type: none
- GVR_EVENT_SAFETY_REGION_EXIT = 2,
-
- /// Notification that the user has re-entered the safety region, as defined by
- /// the gvr_safety_region_type.
- /// Event data type: none
- GVR_EVENT_SAFETY_REGION_ENTER = 3,
-
- /// Notification that head tracking was resumed (or started for the first
- /// time). Before this event is sent, head tracking will always return the
- /// identity pose. This event is usually preceded in the same frame by a
- /// GVR_EVENT_RECENTER of recenter_type GVR_RECENTER_EVENT_RESTART.
- /// Event data type: none
- GVR_EVENT_HEAD_TRACKING_RESUMED = 4,
-
- /// Notification that head tracking was paused.
- /// Event data type: none
- GVR_EVENT_HEAD_TRACKING_PAUSED = 5,
-} gvr_event_type;
-
-/// @}
-
-// Forward declaration of Android AHardwareBuffer.
-typedef struct AHardwareBuffer AHardwareBuffer;
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-#if defined(__cplusplus) && !defined(GVR_NO_CPP_WRAPPER)
-namespace gvr {
-
-template <typename WrappedType>
-void NoopDestroy(WrappedType** cobject) {
- // Make sure that we don't forget to specify the destroy function.
- // If the wrapped object type doesn't need destruction, add it here.
- static_assert(std::is_same<WrappedType, gvr_frame>::value ||
- std::is_same<WrappedType, const gvr_user_prefs>::value ||
- std::is_same<WrappedType, const gvr_properties>::value,
- "Did you forget to specify a destroy function?");
-}
-
-/// Base class for all C++ wrapper objects.
-template <typename WrappedType,
- void (*DestroyFunction)(WrappedType**) = NoopDestroy<WrappedType>>
-class WrapperBase {
- public:
- /// Initializes a wrapper that holds a C object.
- explicit WrapperBase(WrappedType* cobject = nullptr) : cobject_(cobject) {}
-
- ~WrapperBase() {
- if (cobject_ != nullptr) DestroyFunction(&cobject_);
- }
-
- WrapperBase(WrapperBase&& other) : cobject_(nullptr) {
- std::swap(cobject_, other.cobject_);
- }
-
- WrapperBase& operator=(WrapperBase&& other) {
- std::swap(cobject_, other.cobject_);
- return *this;
- }
-
- // Disallow copy and assign.
- WrapperBase(const WrapperBase&) = delete;
- void operator=(const WrapperBase&) = delete;
-
- /// Returns the wrapped C object. Does not affect ownership.
- WrappedType* cobj() { return cobject_; }
- const WrappedType* cobj() const { return cobject_; }
-
- /// Returns the wrapped C object and transfers its ownership to the caller.
- /// The wrapper becomes invalid and should not be used.
- WrappedType* release() {
- auto result = cobject_;
- cobject_ = nullptr;
- return result;
- }
-
- /// Returns true if the wrapper holds an object.
- explicit operator bool() const {
- return cobj() != nullptr;
- }
-
- protected:
- WrappedType* cobject_;
-};
-
-// These typedefs convert the C-style names to C++-style names.
-const int32_t kControllerEnableOrientation =
- static_cast<int32_t>(GVR_CONTROLLER_ENABLE_ORIENTATION);
-const int32_t kControllerEnableTouch =
- static_cast<int32_t>(GVR_CONTROLLER_ENABLE_TOUCH);
-const int32_t kControllerEnableGyro =
- static_cast<int32_t>(GVR_CONTROLLER_ENABLE_GYRO);
-const int32_t kControllerEnableAccel =
- static_cast<int32_t>(GVR_CONTROLLER_ENABLE_ACCEL);
-const int32_t kControllerEnableGestures =
- static_cast<int32_t>(GVR_CONTROLLER_ENABLE_GESTURES);
-const int32_t kControllerEnablePosePrediction =
- static_cast<int32_t>(GVR_CONTROLLER_ENABLE_POSE_PREDICTION);
-const int32_t kControllerEnablePosition =
- static_cast<int32_t>(GVR_CONTROLLER_ENABLE_POSITION);
-const int32_t kControllerEnableBattery =
- static_cast<int32_t>(GVR_CONTROLLER_ENABLE_BATTERY);
-
-typedef gvr_controller_api_status ControllerApiStatus;
-const ControllerApiStatus kControllerApiOk =
- static_cast<ControllerApiStatus>(GVR_CONTROLLER_API_OK);
-const ControllerApiStatus kControllerApiUnsupported =
- static_cast<ControllerApiStatus>(GVR_CONTROLLER_API_UNSUPPORTED);
-const ControllerApiStatus kControllerApiNotAuthorized =
- static_cast<ControllerApiStatus>(GVR_CONTROLLER_API_NOT_AUTHORIZED);
-const ControllerApiStatus kControllerApiUnavailable =
- static_cast<ControllerApiStatus>(GVR_CONTROLLER_API_UNAVAILABLE);
-const ControllerApiStatus kControllerApiServiceObsolete =
- static_cast<ControllerApiStatus>(GVR_CONTROLLER_API_SERVICE_OBSOLETE);
-const ControllerApiStatus kControllerApiClientObsolete =
- static_cast<ControllerApiStatus>(GVR_CONTROLLER_API_CLIENT_OBSOLETE);
-const ControllerApiStatus kControllerApiMalfunction =
- static_cast<ControllerApiStatus>(GVR_CONTROLLER_API_MALFUNCTION);
-
-typedef gvr_controller_connection_state ControllerConnectionState;
-const ControllerConnectionState kControllerDisconnected =
- static_cast<ControllerConnectionState>(GVR_CONTROLLER_DISCONNECTED);
-const ControllerConnectionState kControllerScanning =
- static_cast<ControllerConnectionState>(GVR_CONTROLLER_SCANNING);
-const ControllerConnectionState kControllerConnecting =
- static_cast<ControllerConnectionState>(GVR_CONTROLLER_CONNECTING);
-const ControllerConnectionState kControllerConnected =
- static_cast<ControllerConnectionState>(GVR_CONTROLLER_CONNECTED);
-
-typedef gvr_controller_button ControllerButton;
-const ControllerButton kControllerButtonNone =
- static_cast<ControllerButton>(GVR_CONTROLLER_BUTTON_NONE);
-const ControllerButton kControllerButtonClick =
- static_cast<ControllerButton>(GVR_CONTROLLER_BUTTON_CLICK);
-const ControllerButton kControllerButtonHome =
- static_cast<ControllerButton>(GVR_CONTROLLER_BUTTON_HOME);
-const ControllerButton kControllerButtonApp =
- static_cast<ControllerButton>(GVR_CONTROLLER_BUTTON_APP);
-const ControllerButton kControllerButtonVolumeUp =
- static_cast<ControllerButton>(GVR_CONTROLLER_BUTTON_VOLUME_UP);
-const ControllerButton kControllerButtonVolumeDown =
- static_cast<ControllerButton>(GVR_CONTROLLER_BUTTON_VOLUME_DOWN);
-const ControllerButton kControllerButtonTrigger =
- static_cast<ControllerButton>(GVR_CONTROLLER_BUTTON_TRIGGER);
-const ControllerButton kControllerButtonGrip =
- static_cast<ControllerButton>(GVR_CONTROLLER_BUTTON_GRIP);
-const ControllerButton kControllerButtonReserved2 =
- static_cast<ControllerButton>(GVR_CONTROLLER_BUTTON_RESERVED2);
-const ControllerButton kControllerButtonCount =
- static_cast<ControllerButton>(GVR_CONTROLLER_BUTTON_COUNT);
-
-typedef gvr_controller_battery_level ControllerBatteryLevel;
-const ControllerBatteryLevel kControllerBatteryLevelUnknown =
- static_cast<ControllerBatteryLevel>(
- GVR_CONTROLLER_BATTERY_LEVEL_UNKNOWN);
-const ControllerBatteryLevel kControllerBatteryLevelCriticalLow =
- static_cast<ControllerBatteryLevel>(
- GVR_CONTROLLER_BATTERY_LEVEL_CRITICAL_LOW);
-const ControllerBatteryLevel kControllerBatteryLevelLow =
- static_cast<ControllerBatteryLevel>(
- GVR_CONTROLLER_BATTERY_LEVEL_LOW);
-const ControllerBatteryLevel kControllerBatteryLevelMedium =
- static_cast<ControllerBatteryLevel>(
- GVR_CONTROLLER_BATTERY_LEVEL_MEDIUM);
-const ControllerBatteryLevel kControllerBatteryLevelAlmostFull =
- static_cast<ControllerBatteryLevel>(
- GVR_CONTROLLER_BATTERY_LEVEL_ALMOST_FULL);
-const ControllerBatteryLevel kControllerBatteryLevelFull =
- static_cast<ControllerBatteryLevel>(
- GVR_CONTROLLER_BATTERY_LEVEL_FULL);
-
-enum {
- kTrackingStatusFlagInvalid = GVR_TRACKING_STATUS_FLAG_INVALID,
- kTrackingStatusFlagInitializing = GVR_TRACKING_STATUS_FLAG_INITIALIZING,
- kTrackingStatusFlagHas6Dof = GVR_TRACKING_STATUS_FLAG_HAS_6DOF
-};
-
-/// An uninitialized external surface ID.
-const int32_t kUninitializedExternalSurface = GVR_BUFFER_INDEX_EXTERNAL_SURFACE;
-/// The default source buffer index for viewports.
-const int32_t kDefaultBufferIndex = 0;
-/// Invalid source id that can be used to initialize source id variables
-/// during construction.
-typedef gvr_audio_source_id AudioSourceId;
-const AudioSourceId kInvalidSourceId = GVR_AUDIO_INVALID_SOURCE_ID;
-
-typedef gvr_eye Eye;
-
-typedef gvr_viewer_type ViewerType;
-const ViewerType kViewerTypeCardboard =
- static_cast<ViewerType>(GVR_VIEWER_TYPE_CARDBOARD);
-const ViewerType kViewerTypeDaydream =
- static_cast<ViewerType>(GVR_VIEWER_TYPE_DAYDREAM);
-
-typedef gvr_version Version;
-typedef gvr_sizei Sizei;
-typedef gvr_recti Recti;
-typedef gvr_rectf Rectf;
-typedef gvr_vec2f Vec2f;
-typedef gvr_vec3f Vec3f;
-typedef gvr_mat4f Mat4f;
-typedef gvr_quatf Quatf;
-typedef gvr_clock_time_point ClockTimePoint;
-typedef gvr_value Value;
-typedef gvr_event Event;
-typedef gvr_flags Flags;
-
-typedef gvr_vec2f ControllerVec2;
-typedef gvr_vec3f ControllerVec3;
-typedef gvr_quatf ControllerQuat;
-
-typedef gvr_audio_rendering_mode AudioRenderingMode;
-typedef gvr_audio_material_type AudioMaterialName;
-typedef gvr_audio_distance_rolloff_type AudioRolloffMethod;
-typedef gvr_audio_surround_format_type AudioSurroundFormat;
-
-typedef gvr_color_format_type ColorFormat;
-const ColorFormat kColorFormatRgba8888 =
- static_cast<ColorFormat>(GVR_COLOR_FORMAT_RGBA_8888);
-const ColorFormat kColorFormatRgb565 =
- static_cast<ColorFormat>(GVR_COLOR_FORMAT_RGB_565);
-
-typedef gvr_depth_stencil_format_type DepthStencilFormat;
-const DepthStencilFormat kDepthStencilFormatNone =
- static_cast<DepthStencilFormat>(GVR_DEPTH_STENCIL_FORMAT_NONE);
-const DepthStencilFormat kDepthStencilFormatDepth16 =
- static_cast<DepthStencilFormat>(GVR_DEPTH_STENCIL_FORMAT_DEPTH_16);
-const DepthStencilFormat kDepthStencilFormatDepth24 =
- static_cast<DepthStencilFormat>(GVR_DEPTH_STENCIL_FORMAT_DEPTH_24);
-const DepthStencilFormat kDepthStencilFormatDepth24Stencil8 =
- static_cast<DepthStencilFormat>(
- GVR_DEPTH_STENCIL_FORMAT_DEPTH_24_STENCIL_8);
-const DepthStencilFormat kDepthStencilFormatDepth32f =
- static_cast<DepthStencilFormat>(GVR_DEPTH_STENCIL_FORMAT_DEPTH_32_F);
-const DepthStencilFormat kDepthStencilFormatDepth32fStencil8 =
- static_cast<DepthStencilFormat>(
- GVR_DEPTH_STENCIL_FORMAT_DEPTH_32_F_STENCIL_8);
-const DepthStencilFormat kDepthStencilFormatStencil8 =
- static_cast<DepthStencilFormat>(GVR_DEPTH_STENCIL_FORMAT_STENCIL_8);
-
-typedef gvr_controller_handedness ControllerHandedness;
-const ControllerHandedness kControllerRightHanded =
- static_cast<ControllerHandedness>(GVR_CONTROLLER_RIGHT_HANDED);
-const ControllerHandedness kControllerLeftHanded =
- static_cast<ControllerHandedness>(GVR_CONTROLLER_LEFT_HANDED);
-
-typedef gvr_arm_model_behavior ArmModelBehavior;
-const ArmModelBehavior kArmModelBehaviorFollowGaze =
- static_cast<ArmModelBehavior>(GVR_ARM_MODEL_FOLLOW_GAZE);
-const ArmModelBehavior kArmModelBehaviorSyncGaze =
- static_cast<ArmModelBehavior>(GVR_ARM_MODEL_SYNC_GAZE);
-const ArmModelBehavior kArmModelBehaviorIgnoreGaze =
- static_cast<ArmModelBehavior>(GVR_ARM_MODEL_IGNORE_GAZE);
-
-typedef gvr_error Error;
-const Error kErrorNone = static_cast<Error>(GVR_ERROR_NONE);
-const Error kErrorControllerCreateFailed =
- static_cast<Error>(GVR_ERROR_CONTROLLER_CREATE_FAILED);
-const Error kErrorNoFrameAvailable =
- static_cast<Error>(GVR_ERROR_NO_FRAME_AVAILABLE);
-
-class AudioApi;
-class BufferSpec;
-class ControllerApi;
-class ControllerState;
-class GvrApi;
-class BufferViewport;
-class BufferViewportList;
-class SwapChain;
-class UserPrefs;
-
-} // namespace gvr
-
-// Non-member operators for convenience. Since typedefs do not trigger
-// argument-dependent lookup, these operators have to be defined for the
-// underlying types.
-inline bool operator==(const gvr_vec2f& lhs, const gvr_vec2f& rhs) {
- return lhs.x == rhs.x && lhs.y == rhs.y;
-}
-
-inline bool operator!=(const gvr_vec2f& lhs, const gvr_vec2f& rhs) {
- return !(lhs == rhs);
-}
-
-inline bool operator==(const gvr_vec3f& lhs, const gvr_vec3f& rhs) {
- return lhs.x == rhs.x && lhs.y == rhs.y;
-}
-
-inline bool operator!=(const gvr_vec3f& lhs, const gvr_vec3f& rhs) {
- return !(lhs == rhs);
-}
-
-inline bool operator==(const gvr_recti& lhs, const gvr_recti& rhs) {
- return lhs.left == rhs.left && lhs.right == rhs.right &&
- lhs.bottom == rhs.bottom && lhs.top == rhs.top;
-}
-
-inline bool operator!=(const gvr_recti& lhs, const gvr_recti& rhs) {
- return !(lhs == rhs);
-}
-
-inline bool operator==(const gvr_rectf& lhs, const gvr_rectf& rhs) {
- return lhs.left == rhs.left && lhs.right == rhs.right &&
- lhs.bottom == rhs.bottom && lhs.top == rhs.top;
-}
-
-inline bool operator!=(const gvr_rectf& lhs, const gvr_rectf& rhs) {
- return !(lhs == rhs);
-}
-
-inline bool operator==(const gvr_sizei& lhs, const gvr_sizei& rhs) {
- return lhs.width == rhs.width && lhs.height == rhs.height;
-}
-
-inline bool operator!=(const gvr_sizei& lhs, const gvr_sizei& rhs) {
- return !(lhs == rhs);
-}
-
-inline bool operator==(gvr_clock_time_point lhs, gvr_clock_time_point rhs) {
- return lhs.monotonic_system_time_nanos == rhs.monotonic_system_time_nanos;
-}
-
-inline bool operator!=(gvr_clock_time_point lhs, gvr_clock_time_point rhs) {
- return lhs.monotonic_system_time_nanos != rhs.monotonic_system_time_nanos;
-}
-
-inline bool operator<(gvr_clock_time_point lhs, gvr_clock_time_point rhs) {
- return lhs.monotonic_system_time_nanos < rhs.monotonic_system_time_nanos;
-}
-
-inline bool operator<=(gvr_clock_time_point lhs, gvr_clock_time_point rhs) {
- return lhs.monotonic_system_time_nanos <= rhs.monotonic_system_time_nanos;
-}
-
-inline bool operator>(gvr_clock_time_point lhs, gvr_clock_time_point rhs) {
- return lhs.monotonic_system_time_nanos > rhs.monotonic_system_time_nanos;
-}
-
-inline bool operator>=(gvr_clock_time_point lhs, gvr_clock_time_point rhs) {
- return lhs.monotonic_system_time_nanos >= rhs.monotonic_system_time_nanos;
-}
-
-#endif // #if defined(__cplusplus) && !defined(GVR_NO_CPP_WRAPPER)
-
-#endif // VR_GVR_CAPI_INCLUDE_GVR_TYPES_H_
diff --git a/libraries/headers/vr/gvr/capi/include/gvr_version.h b/libraries/headers/vr/gvr/capi/include/gvr_version.h
deleted file mode 100644
index d3f598b..0000000
--- a/libraries/headers/vr/gvr/capi/include/gvr_version.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright 2016 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef VR_GVR_CAPI_INCLUDE_GVR_VERSION_H_
-#define VR_GVR_CAPI_INCLUDE_GVR_VERSION_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/// A string representation of the current GVR build version. This is of
-/// the form "MAJOR.MINOR.PATCH". Note that this may differ from the runtime
-/// GVR version as reported by gvr_get_version_string().
-#define GVR_SDK_VERSION_STRING "1.180.0"
-
-/// Semantic components for the current GVR build version. Note that these
-/// values may differ from the runtime GVR version as reported by
-/// gvr_get_version().
-enum {
- GVR_SDK_MAJOR_VERSION = 1,
- GVR_SDK_MINOR_VERSION = 180,
- GVR_SDK_PATCH_VERSION = 0,
-};
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-#endif // VR_GVR_CAPI_INCLUDE_GVR_VERSION_H_
diff --git a/libraries/sdk-audio-1.180.0.aar b/libraries/sdk-audio-1.180.0.aar
deleted file mode 100644
index 007485c..0000000
--- a/libraries/sdk-audio-1.180.0.aar
+++ /dev/null
Binary files differ
diff --git a/libraries/sdk-audio-1.180.0.pom b/libraries/sdk-audio-1.180.0.pom
deleted file mode 100644
index 6c7fb31..0000000
--- a/libraries/sdk-audio-1.180.0.pom
+++ /dev/null
@@ -1,25 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>com.google.vr</groupId>
- <artifactId>sdk-audio</artifactId>
- <version>1.180.0</version>
- <packaging>aar</packaging>
-
- <name>Google VR SDK-Audio</name>
- <url>https://developers.google.com/vr/</url>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>com.google.vr</groupId>
- <artifactId>sdk-base</artifactId>
- <type>aar</type>
- <version>1.180.0</version>
- </dependency>
- </dependencies>
-</project>
diff --git a/libraries/sdk-base-1.180.0.aar b/libraries/sdk-base-1.180.0.aar
deleted file mode 100644
index e9047d2..0000000
--- a/libraries/sdk-base-1.180.0.aar
+++ /dev/null
Binary files differ
diff --git a/libraries/sdk-base-1.180.0.pom b/libraries/sdk-base-1.180.0.pom
deleted file mode 100644
index 33168f7..0000000
--- a/libraries/sdk-base-1.180.0.pom
+++ /dev/null
@@ -1,25 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>com.google.vr</groupId>
- <artifactId>sdk-base</artifactId>
- <version>1.180.0</version>
- <packaging>aar</packaging>
-
- <name>Google VR SDK-Base</name>
- <url>https://developers.google.com/vr/</url>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>com.google.vr</groupId>
- <artifactId>sdk-common</artifactId>
- <type>aar</type>
- <version>1.180.0</version>
- </dependency>
- </dependencies>
-</project>
diff --git a/libraries/sdk-common-1.180.0.aar b/libraries/sdk-common-1.180.0.aar
deleted file mode 100644
index 7ba5cff..0000000
--- a/libraries/sdk-common-1.180.0.aar
+++ /dev/null
Binary files differ
diff --git a/libraries/sdk-common-1.180.0.pom b/libraries/sdk-common-1.180.0.pom
deleted file mode 100644
index 1f70739..0000000
--- a/libraries/sdk-common-1.180.0.pom
+++ /dev/null
@@ -1,25 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>com.google.vr</groupId>
- <artifactId>sdk-common</artifactId>
- <version>1.180.0</version>
- <packaging>aar</packaging>
-
- <name>Google VR SDK-Common</name>
- <url>https://developers.google.com/vr/</url>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>com.google.protobuf.nano</groupId>
- <artifactId>protobuf-javanano</artifactId>
- <type>jar</type>
- <version>3.1.0</version>
- </dependency>
- </dependencies>
-</project>
diff --git a/libraries/sdk-commonwidget-1.180.0.aar b/libraries/sdk-commonwidget-1.180.0.aar
deleted file mode 100644
index 5101ecb..0000000
--- a/libraries/sdk-commonwidget-1.180.0.aar
+++ /dev/null
Binary files differ
diff --git a/libraries/sdk-commonwidget-1.180.0.pom b/libraries/sdk-commonwidget-1.180.0.pom
deleted file mode 100644
index bae4c73..0000000
--- a/libraries/sdk-commonwidget-1.180.0.pom
+++ /dev/null
@@ -1,25 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>com.google.vr</groupId>
- <artifactId>sdk-commonwidget</artifactId>
- <version>1.180.0</version>
- <packaging>aar</packaging>
-
- <name>Google VR SDK-CommonWidget</name>
- <url>https://developers.google.com/vr/</url>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>com.google.vr</groupId>
- <artifactId>sdk-common</artifactId>
- <type>aar</type>
- <version>1.180.0</version>
- </dependency>
- </dependencies>
-</project>
diff --git a/libraries/sdk-controller-1.180.0.aar b/libraries/sdk-controller-1.180.0.aar
deleted file mode 100644
index ea9c610..0000000
--- a/libraries/sdk-controller-1.180.0.aar
+++ /dev/null
Binary files differ
diff --git a/libraries/sdk-controller-1.180.0.pom b/libraries/sdk-controller-1.180.0.pom
deleted file mode 100644
index 0e716d3..0000000
--- a/libraries/sdk-controller-1.180.0.pom
+++ /dev/null
@@ -1,25 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>com.google.vr</groupId>
- <artifactId>sdk-controller</artifactId>
- <version>1.180.0</version>
- <packaging>aar</packaging>
-
- <name>Google VR SDK-Controller</name>
- <url>https://developers.google.com/vr/</url>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>com.google.vr</groupId>
- <artifactId>sdk-base</artifactId>
- <type>aar</type>
- <version>1.180.0</version>
- </dependency>
- </dependencies>
-</project>
diff --git a/libraries/sdk-panowidget-1.180.0.aar b/libraries/sdk-panowidget-1.180.0.aar
deleted file mode 100644
index c9b224d..0000000
--- a/libraries/sdk-panowidget-1.180.0.aar
+++ /dev/null
Binary files differ
diff --git a/libraries/sdk-panowidget-1.180.0.pom b/libraries/sdk-panowidget-1.180.0.pom
deleted file mode 100644
index c4c67cf..0000000
--- a/libraries/sdk-panowidget-1.180.0.pom
+++ /dev/null
@@ -1,25 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>com.google.vr</groupId>
- <artifactId>sdk-panowidget</artifactId>
- <version>1.180.0</version>
- <packaging>aar</packaging>
-
- <name>Google VR SDK-CommonWidget</name>
- <url>https://developers.google.com/vr/</url>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>com.google.vr</groupId>
- <artifactId>sdk-commonwidget</artifactId>
- <type>aar</type>
- <version>1.180.0</version>
- </dependency>
- </dependencies>
-</project>
diff --git a/libraries/sdk-videowidget-1.180.0.aar b/libraries/sdk-videowidget-1.180.0.aar
deleted file mode 100644
index f6ab9f7..0000000
--- a/libraries/sdk-videowidget-1.180.0.aar
+++ /dev/null
Binary files differ
diff --git a/libraries/sdk-videowidget-1.180.0.pom b/libraries/sdk-videowidget-1.180.0.pom
deleted file mode 100644
index c314c55..0000000
--- a/libraries/sdk-videowidget-1.180.0.pom
+++ /dev/null
@@ -1,38 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>com.google.vr</groupId>
- <artifactId>sdk-videowidget</artifactId>
- <version>1.180.0</version>
- <packaging>aar</packaging>
-
- <name>Google VR SDK-CommonWidget</name>
- <url>https://developers.google.com/vr/</url>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>com.android.support</groupId>
- <artifactId>support-annotations</artifactId>
- <version>25.2.0</version>
- </dependency>
-
- <dependency>
- <groupId>com.android.support</groupId>
- <artifactId>support-core-utils</artifactId>
- <type>aar</type>
- <version>25.2.0</version>
- </dependency>
-
- <dependency>
- <groupId>com.google.vr</groupId>
- <artifactId>sdk-commonwidget</artifactId>
- <type>aar</type>
- <version>1.180.0</version>
- </dependency>
- </dependencies>
-</project>
diff --git a/proguard-gvr.txt b/proguard-gvr.txt
index 44d7910..7ee4e8a 100644
--- a/proguard-gvr.txt
+++ b/proguard-gvr.txt
@@ -31,5 +31,5 @@
@com.google.vr.cardboard.annotations.UsedByReflection *;
}
--dontwarn com.google.protobuf.nano.NanoEnumValue
--dontwarn com.google.common.logging.nano.*
+-dontwarn sun.misc.Unsafe
+-dontwarn libcore.io.Memory
diff --git a/samples/ndk-hellovr/build.gradle b/samples/ndk-hellovr/build.gradle
index 0f77f87..241663b 100644
--- a/samples/ndk-hellovr/build.gradle
+++ b/samples/ndk-hellovr/build.gradle
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
+
apply plugin: 'com.android.application'
android {
@@ -56,10 +56,8 @@
}
}
-
dependencies {
- compile 'com.google.vr:sdk-audio:1.180.0'
- compile 'com.google.vr:sdk-base:1.180.0'
+ implementation 'com.google.vr:sdk-base:1.190.0'
}
build.dependsOn(':extractNdk')
diff --git a/samples/ndk-hellovr/src/main/AndroidManifest.xml b/samples/ndk-hellovr/src/main/AndroidManifest.xml
index 83991df..81c6d9b 100644
--- a/samples/ndk-hellovr/src/main/AndroidManifest.xml
+++ b/samples/ndk-hellovr/src/main/AndroidManifest.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.vr.ndk.samples.hellovr"
- android:versionCode="180905036"
- android:versionName="1.180.0">
+ android:versionCode="181016016"
+ android:versionName="1.190.0">
<!-- The GVR SDK requires API 19+ and OpenGL ES 2+. -->
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="24" />
diff --git a/samples/ndk-hellovr/src/main/jni/hello_vr_app.cc b/samples/ndk-hellovr/src/main/jni/hello_vr_app.cc
index 771eb76..715d7e8 100644
--- a/samples/ndk-hellovr/src/main/jni/hello_vr_app.cc
+++ b/samples/ndk-hellovr/src/main/jni/hello_vr_app.cc
@@ -36,13 +36,15 @@
// The objects are about 1 meter in radius, so the min/max target distance are
// set so that the objects are always within the room (which is about 5 meters
// across) and the reticle is always closer than any objects.
-static constexpr float kMinTargetDistance = 3.0f;
+static constexpr float kMinTargetDistance = 2.5f;
static constexpr float kMaxTargetDistance = 3.5f;
+static constexpr float kMinTargetHeight = 0.5f;
+static constexpr float kMaxTargetHeight = kMinTargetHeight + 3.0f;
static constexpr float kReticleDistance = 1.9f;
// Depth of the ground plane, in meters. If this (and other distances)
// are too far, 6DOF tracking will have no visible effect.
-static constexpr float kDefaultFloorHeight = -2.0f;
+static constexpr float kDefaultFloorHeight = -1.7f;
static constexpr float kSafetyRingHeightDelta = 0.01f;
static constexpr float kDefaultSafetyRingRadius = 1.0f;
@@ -55,12 +57,6 @@
// object.
static constexpr float kAngleLimit = 0.2f;
-// The maximum yaw and pitch of the target object, in degrees. After hiding the
-// target, its yaw will be within [-kMaxYaw, kMaxYaw] and pitch will be within
-// [-kMaxPitch, kMaxPitch].
-static constexpr float kMaxYaw = 100.0f;
-static constexpr float kMaxPitch = 25.0f;
-
// Sound file in APK assets.
static constexpr const char* kObjectSoundFile = "audio/HelloVR_Loop.ogg";
static constexpr const char* kSuccessSoundFile = "audio/HelloVR_Activation.ogg";
@@ -312,11 +308,8 @@
CheckGLError("Reticle program params");
// Target object first appears directly in front of user.
- model_target_ = {
- {{1.0f, 0.0f, 0.0f, 0.0f},
- {0.0f, cosf(M_PI / 4.0f), -sinf(M_PI / 4.0f), 0.0f},
- {0.0f, sinf(M_PI / 4.0f), cosf(M_PI / 4.0f), -kMinTargetDistance},
- {0.0f, 0.0f, 0.0f, 1.0f}}};
+ model_target_ = GetTranslationMatrix({0.0f, 1.5f, -kMinTargetDistance});
+
const float rs = 0.04f; // Reticle scale.
model_reticle_ = {{{rs, 0.0f, 0.0f, 0.0f},
{0.0f, rs, 0.0f, 0.0f},
@@ -401,9 +394,10 @@
gvr_controller_state_.GetConnectionState()));
}
- // Trigger click event if app/click button is clicked.
+ // Trigger click event if app/click/trigger button is clicked.
if (gvr_controller_state_.GetButtonDown(GVR_CONTROLLER_BUTTON_APP) ||
- gvr_controller_state_.GetButtonDown(GVR_CONTROLLER_BUTTON_CLICK)) {
+ gvr_controller_state_.GetButtonDown(GVR_CONTROLLER_BUTTON_CLICK) ||
+ gvr_controller_state_.GetButtonDown(GVR_CONTROLLER_BUTTON_TRIGGER)) {
OnTriggerEvent();
}
}
@@ -436,6 +430,17 @@
head_view_ = gvr_api_->ApplyNeckModel(
gvr_api_->GetHeadSpaceFromStartSpaceTransform(target_time),
kNeckModelFactor);
+
+ gvr::Value floor_height;
+ // This may change when the floor height changes so it's computed every frame.
+ float ground_y = gvr_api_->GetCurrentProperties().Get(
+ GVR_PROPERTY_TRACKING_FLOOR_HEIGHT, &floor_height)
+ ? floor_height.f
+ : kDefaultFloorHeight;
+ // Incorporate the floor height into the head_view
+ head_view_ =
+ MatrixMul(head_view_, GetTranslationMatrix({0.0f, ground_y, 0.0f}));
+
viewport_list_->SetToRecommendedBufferViewports();
gvr::BufferViewport reticle_viewport = gvr_api_->CreateBufferViewport();
@@ -448,16 +453,6 @@
reticle_viewport.SetSourceUv(fullscreen);
UpdateReticlePosition();
- gvr::Value floor_height;
- // This may change when the floor height changes so it's computed every frame.
- float ground_y = gvr_api_->GetCurrentProperties().Get(
- GVR_PROPERTY_TRACKING_FLOOR_HEIGHT, &floor_height)
- ? floor_height.f
- : kDefaultFloorHeight;
- gvr::Mat4f model_room = {{{1.0f, 0.0f, 0.0f, 0.0f},
- {0.0f, 1.0f, 0.0f, ground_y},
- {0.0f, 0.0f, 1.0f, 0.0f},
- {0.0f, 0.0f, 0.0f, 1.0f}}};
gvr::Mat4f modelview_room[2];
gvr::Value cylinder_radius;
@@ -494,7 +489,7 @@
viewport_list_->SetBufferViewport(2 + eye, reticle_viewport);
modelview_target_[eye] = MatrixMul(eye_views[eye], model_target_);
- modelview_room[eye] = MatrixMul(eye_views[eye], model_room);
+ modelview_room[eye] = eye_views[eye];
modelview_safety_ring[eye] = MatrixMul(eye_views[eye], model_safety_ring);
const gvr_rectf fov = viewport[eye]->GetSourceFov();
@@ -695,40 +690,19 @@
void HelloVrApp::HideTarget() {
cur_target_object_ = RandomUniformInt(kTargetMeshCount);
- const float yaw =
- (RandomUniformFloat() - 0.5) * 2.0f * kMaxYaw * M_PI / 180.0f;
- const float pitch =
- (RandomUniformFloat() - 0.5) * 2.0f * kMaxPitch * M_PI / 180.0f;
- const float target_object_distance =
- RandomUniformFloat() * (kMaxTargetDistance - kMinTargetDistance) +
- kMinTargetDistance;
- model_target_ = {
- {{1.0f, 0.0f, 0.0f, 0.0f},
- {0.0f, cosf(M_PI / 4.0f), -sinf(M_PI / 4.0f), 0.0f},
- {0.0f, sinf(M_PI / 4.0f), cosf(M_PI / 4.0f), -target_object_distance},
- {0.0f, 0.0f, 0.0f, 1.0f}}};
+ float angle = RandomUniformFloat(-M_PI, M_PI);
+ float distance = RandomUniformFloat(kMinTargetDistance, kMaxTargetDistance);
+ float height = RandomUniformFloat(kMinTargetHeight, kMaxTargetHeight);
+ gvr::Vec3f target_position = {std::cos(angle) * distance, height,
+ std::sin(angle) * distance};
- std::array<float, 4> target_position = {
- model_target_.m[0][3], model_target_.m[1][3], model_target_.m[2][3], 1.f};
-
- const gvr::Mat4f rotation_matrix = {{{cosf(yaw), 0.f, -sinf(yaw), 0.f},
- {0.f, 1.f, 0.f, 0.f},
- {sinf(yaw), 0.f, cosf(yaw), 0.f},
- {0.f, 0.f, 0.f, 1.f}}};
- target_position = MatrixVectorMul(rotation_matrix, target_position);
- model_target_ = MatrixMul(rotation_matrix, model_target_);
-
- target_position[1] = tanf(pitch) * target_object_distance;
-
- model_target_.m[0][3] = target_position[0];
- model_target_.m[1][3] = target_position[1];
- model_target_.m[2][3] = target_position[2];
+ model_target_ = GetTranslationMatrix(target_position);
if (audio_source_id_ >= 0) {
- gvr_audio_api_->SetSoundObjectPosition(audio_source_id_, target_position[0],
- target_position[1],
- target_position[2]);
+ gvr_audio_api_->SetSoundObjectPosition(audio_source_id_, target_position.x,
+ target_position.y,
+ target_position.z);
}
}
diff --git a/samples/ndk-hellovr/src/main/jni/util.cc b/samples/ndk-hellovr/src/main/jni/util.cc
index d8e119d..5898f65 100644
--- a/samples/ndk-hellovr/src/main/jni/util.cc
+++ b/samples/ndk-hellovr/src/main/jni/util.cc
@@ -350,6 +350,13 @@
return result;
}
+gvr::Mat4f GetTranslationMatrix(const gvr::Vec3f& translation) {
+ return {{{1.0f, 0.0f, 0.0f, translation.x},
+ {0.0f, 1.0f, 0.0f, translation.y},
+ {0.0f, 0.0f, 1.0f, translation.z},
+ {0.0f, 0.0f, 0.0f, 1.0f}}};
+}
+
gvr::Mat4f MatrixMul(const gvr::Mat4f& matrix1, const gvr::Mat4f& matrix2) {
gvr::Mat4f result;
for (int i = 0; i < 4; ++i) {
@@ -418,11 +425,11 @@
return result;
}
-float RandomUniformFloat() {
+float RandomUniformFloat(float min, float max) {
static std::random_device random_device;
static std::mt19937 random_generator(random_device());
static std::uniform_real_distribution<float> random_distribution(0, 1);
- return random_distribution(random_generator);
+ return random_distribution(random_generator) * (max - min) + min;
}
int RandomUniformInt(int max_val) {
diff --git a/samples/ndk-hellovr/src/main/jni/util.h b/samples/ndk-hellovr/src/main/jni/util.h
index 7ce1c92..86918cf 100644
--- a/samples/ndk-hellovr/src/main/jni/util.h
+++ b/samples/ndk-hellovr/src/main/jni/util.h
@@ -53,6 +53,9 @@
std::array<float, 4> MatrixVectorMul(const gvr::Mat4f& matrix,
const std::array<float, 4>& vec);
+// Construct a translation matrix.
+gvr::Mat4f GetTranslationMatrix(const gvr::Vec3f& translation);
+
// Multiplies two matrices.
gvr::Mat4f MatrixMul(const gvr::Mat4f& matrix1, const gvr::Mat4f& matrix2);
@@ -73,8 +76,8 @@
gvr::Recti CalculatePixelSpaceRect(const gvr::Sizei& texture_size,
const gvr::Rectf& texture_rect);
-// Generates a random floating point number between 0 and 1.
-float RandomUniformFloat();
+// Generates a random floating point number between |min| and |max|.
+float RandomUniformFloat(float min, float max);
// Generates a random integer in the range [0, max_val).
int RandomUniformInt(int max_val);
diff --git a/samples/ndk-hellovrbeta/build.gradle b/samples/ndk-hellovrbeta/build.gradle
index a507873..7f1d69e 100644
--- a/samples/ndk-hellovrbeta/build.gradle
+++ b/samples/ndk-hellovrbeta/build.gradle
@@ -58,8 +58,7 @@
dependencies {
- compile 'com.google.vr:sdk-audio:1.180.0'
- compile 'com.google.vr:sdk-base:1.180.0'
+ implementation 'com.google.vr:sdk-base:1.190.0'
}
build.dependsOn(':extractNdk')
diff --git a/samples/ndk-hellovrbeta/src/main/AndroidManifest.xml b/samples/ndk-hellovrbeta/src/main/AndroidManifest.xml
index 0faaa1e..0daab74 100644
--- a/samples/ndk-hellovrbeta/src/main/AndroidManifest.xml
+++ b/samples/ndk-hellovrbeta/src/main/AndroidManifest.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.vr.ndk.samples.hellovrbeta"
- android:versionCode="180905036"
- android:versionName="1.180.0">
+ android:versionCode="181016016"
+ android:versionName="1.190.0">
<!-- The GVR SDK Beta requires API 26+ and OpenGL ES 2+. -->
<uses-sdk android:minSdkVersion="26" android:targetSdkVersion="26" />
diff --git a/samples/ndk-hellovrbeta/src/main/assets/Controller3DOFDiffuse.png b/samples/ndk-hellovrbeta/src/main/assets/Controller3DOFDiffuse.png
index 87c31c8..f547413 100644
--- a/samples/ndk-hellovrbeta/src/main/assets/Controller3DOFDiffuse.png
+++ b/samples/ndk-hellovrbeta/src/main/assets/Controller3DOFDiffuse.png
Binary files differ
diff --git a/samples/ndk-hellovrbeta/src/main/assets/Controller6DOF.obj b/samples/ndk-hellovrbeta/src/main/assets/Controller6DOF.obj
index 49ff32d..6053896 100644
--- a/samples/ndk-hellovrbeta/src/main/assets/Controller6DOF.obj
+++ b/samples/ndk-hellovrbeta/src/main/assets/Controller6DOF.obj
@@ -1,233 +1,226 @@
-v 0.003329203129 -0.009500827789 -0.05584674835
-v 0.003598003387 -0.006275997162 -0.0577214241
-v 0.0000000001433734 -0.006321220398 -0.05810649872
-v 0.0000000001433734 -0.00953037262 -0.05617097855
-v -0.003598003387 -0.006275997162 -0.0577214241
v -0.003329203129 -0.009500827789 -0.05584674835
-v 0.0000000001433734 -0.01298009872 -0.054083004
-v 0.003128654957 -0.01285179138 -0.0538744545
+v -0.003598003387 -0.006275997162 -0.0577214241
+v -0.0000000001433734 -0.006321220398 -0.05810649872
+v -0.0000000001433734 -0.00953037262 -0.05617097855
+v 0.003598003387 -0.006275997162 -0.0577214241
+v 0.003329203129 -0.009500827789 -0.05584674835
+v -0.0000000001433734 -0.01298009872 -0.054083004
v -0.003128654957 -0.01285179138 -0.0538744545
-v 0.00672349453 -0.009366550446 -0.05495159149
-v 0.007151732445 -0.006267194748 -0.0566318512
-v -0.007151732445 -0.006267194748 -0.0566318512
+v 0.003128654957 -0.01285179138 -0.0538744545
v -0.00672349453 -0.009366550446 -0.05495159149
-v 0.006336226463 -0.01248186111 -0.05324645996
+v -0.007151732445 -0.006267194748 -0.0566318512
+v 0.007151732445 -0.006267194748 -0.0566318512
+v 0.00672349453 -0.009366550446 -0.05495159149
v -0.006336226463 -0.01248186111 -0.05324645996
-v 0.009949502945 -0.006253519058 -0.05519712448
-v 0.009510726929 -0.009181632996 -0.05373003006
-v -0.009510726929 -0.009181632996 -0.05373003006
+v 0.006336226463 -0.01248186111 -0.05324645996
v -0.009949502945 -0.006253519058 -0.05519712448
-v 0.009062891006 -0.01205595016 -0.05229270935
+v -0.009510726929 -0.009181632996 -0.05373003006
+v 0.009510726929 -0.009181632996 -0.05373003006
+v 0.009949502945 -0.006253519058 -0.05519712448
v -0.009062891006 -0.01205595016 -0.05229270935
-v 0.01206634521 -0.00892206192 -0.05211444855
-v 0.01242824554 -0.006306371689 -0.05330858231
-v -0.01242824554 -0.006306371689 -0.05330858231
+v 0.009062891006 -0.01205595016 -0.05229270935
v -0.01206634521 -0.00892206192 -0.05211444855
-v 0.01170659065 -0.01129850388 -0.05105140686
+v -0.01242824554 -0.006306371689 -0.05330858231
+v 0.01242824554 -0.006306371689 -0.05330858231
+v 0.01206634521 -0.00892206192 -0.05211444855
v -0.01170659065 -0.01129850388 -0.05105140686
-v 0.01428190231 -0.008574142456 -0.05018371582
-v 0.01448109627 -0.006320056915 -0.05118855476
-v -0.01448109627 -0.006320056915 -0.05118855476
+v 0.01170659065 -0.01129850388 -0.05105140686
v -0.01428190231 -0.008574142456 -0.05018371582
-v 0.01410157204 -0.01043117523 -0.04937984467
+v -0.01448109627 -0.006320056915 -0.05118855476
+v 0.01448109627 -0.006320056915 -0.05118855476
+v 0.01428190231 -0.008574142456 -0.05018371582
v -0.01410157204 -0.01043117523 -0.04937984467
-v 0.01612512589 -0.008159122467 -0.0479554081
-v 0.01630450249 -0.006395244598 -0.04860887527
-v -0.01630450249 -0.006395244598 -0.04860887527
+v 0.01410157204 -0.01043117523 -0.04937984467
v -0.01612512589 -0.008159122467 -0.0479554081
-v 0.01597001076 -0.009468193054 -0.047466259
+v -0.01630450249 -0.006395244598 -0.04860887527
+v 0.01630450249 -0.006395244598 -0.04860887527
+v 0.01612512589 -0.008159122467 -0.0479554081
v -0.01597001076 -0.009468193054 -0.047466259
-v 0.01718331337 -0.007714176178 -0.0462087822
-v 0.01728191376 -0.006518039703 -0.04667886734
-v -0.01728191376 -0.006518039703 -0.04667886734
+v 0.01597001076 -0.009468193054 -0.047466259
v -0.01718331337 -0.007714176178 -0.0462087822
-v 0.01713835716 -0.00861082077 -0.04576390266
+v -0.01728191376 -0.006518039703 -0.04667886734
+v 0.01728191376 -0.006518039703 -0.04667886734
+v 0.01718331337 -0.007714176178 -0.0462087822
v -0.01713835716 -0.00861082077 -0.04576390266
-v 0.01804826736 -0.007526111603 -0.04358107567
-v 0.01791688919 -0.007083339691 -0.04454338074
-v -0.01791688919 -0.007083339691 -0.04454338074
+v 0.01713835716 -0.00861082077 -0.04576390266
v -0.01804826736 -0.007526111603 -0.04358107567
-v 0.01765286446 -0.006705360413 -0.04563510895
+v -0.01791688919 -0.007083339691 -0.04454338074
+v 0.01791688919 -0.007083339691 -0.04454338074
+v 0.01804826736 -0.007526111603 -0.04358107567
v -0.01765286446 -0.006705360413 -0.04563510895
-v 0.0000000001433734 -0.00505396843 -0.05777576447
-v 0.003557019234 -0.00506067276 -0.05741966248
+v 0.01765286446 -0.006705360413 -0.04563510895
+v -0.0000000001433734 -0.00505396843 -0.05777576447
v -0.003557019234 -0.00506067276 -0.05741966248
-v 0.007099056244 -0.005053730011 -0.05635416031
+v 0.003557019234 -0.00506067276 -0.05741966248
v -0.007099056244 -0.005053730011 -0.05635416031
-v 0.009818782806 -0.005042572021 -0.05497499466
+v 0.007099056244 -0.005053730011 -0.05635416031
v -0.009818782806 -0.005042572021 -0.05497499466
-v 0.01218804359 -0.005048866272 -0.05326290131
+v 0.009818782806 -0.005042572021 -0.05497499466
v -0.01218804359 -0.005048866272 -0.05326290131
-v 0.0142147541 -0.005075387955 -0.05128352165
+v 0.01218804359 -0.005048866272 -0.05326290131
v -0.0142147541 -0.005075387955 -0.05128352165
-v 0.01606985092 -0.005094499588 -0.04880558014
+v 0.0142147541 -0.005075387955 -0.05128352165
v -0.01606985092 -0.005094499588 -0.04880558014
-v 0.01705196381 -0.005262145996 -0.04705836296
+v 0.01606985092 -0.005094499588 -0.04880558014
v -0.01705196381 -0.005262145996 -0.04705836296
-v 0.01770698547 -0.005549564362 -0.04547868729
+v 0.01705196381 -0.005262145996 -0.04705836296
v -0.01770698547 -0.005549564362 -0.04547868729
-v 0.01815084457 -0.006086616516 -0.04385913849
+v 0.01770698547 -0.005549564362 -0.04547868729
v -0.01815084457 -0.006086616516 -0.04385913849
-v 0.0183454895 -0.006868667603 -0.04231203556
+v 0.01815084457 -0.006086616516 -0.04385913849
v -0.0183454895 -0.006868667603 -0.04231203556
-v 0.003008797169 -0.01329334259 -0.05296113968
-v 0.0000000001433734 -0.01340286255 -0.05317268372
+v 0.0183454895 -0.006868667603 -0.04231203556
v -0.003008797169 -0.01329334259 -0.05296113968
-v 0.006078596115 -0.01297473907 -0.05235271454
+v -0.0000000001433734 -0.01340286255 -0.05317268372
+v 0.003008797169 -0.01329334259 -0.05296113968
v -0.006078596115 -0.01297473907 -0.05235271454
-v 0.008786759377 -0.01250099182 -0.05139577866
+v 0.006078596115 -0.01297473907 -0.05235271454
v -0.008786759377 -0.01250099182 -0.05139577866
-v 0.0113055706 -0.01186870575 -0.0501845932
+v 0.008786759377 -0.01250099182 -0.05139577866
v -0.0113055706 -0.01186870575 -0.0501845932
-v 0.01361620903 -0.01103494644 -0.04856619835
+v 0.0113055706 -0.01186870575 -0.0501845932
v -0.01361620903 -0.01103494644 -0.04856619835
-v 0.01543774605 -0.01009368896 -0.04677047729
+v 0.01361620903 -0.01103494644 -0.04856619835
v -0.01543774605 -0.01009368896 -0.04677047729
-v 0.01657022476 -0.009222755432 -0.04504542351
+v 0.01543774605 -0.01009368896 -0.04677047729
v -0.01657022476 -0.009222755432 -0.04504542351
-v 0.01747493744 -0.008114814758 -0.04293308735
+v 0.01657022476 -0.009222755432 -0.04504542351
v -0.01747493744 -0.008114814758 -0.04293308735
-v 0.01780124664 -0.007370643616 -0.04148112297
+v 0.01747493744 -0.008114814758 -0.04293308735
v -0.01780124664 -0.007370643616 -0.04148112297
-v 0.0000000001433734 -0.01213029861 -0.05053622246
-v 0.002778713703 -0.01206357956 -0.05040717125
+v 0.01780124664 -0.007370643616 -0.04148112297
+v -0.0000000001433734 -0.01213029861 -0.05053622246
v -0.002778713703 -0.01206357956 -0.05040717125
-v 0.01415257454 -0.009693546295 -0.04582177162
-v 0.01235969543 -0.01039808273 -0.04718482971
-v -0.01235969543 -0.01039808273 -0.04718482971
+v 0.002778713703 -0.01206357956 -0.05040717125
v -0.01415257454 -0.009693546295 -0.04582177162
-v 0.01015925407 -0.01105937958 -0.0484642601
+v -0.01235969543 -0.01039808273 -0.04718482971
+v 0.01235969543 -0.01039808273 -0.04718482971
+v 0.01415257454 -0.009693546295 -0.04582177162
v -0.01015925407 -0.01105937958 -0.0484642601
-v 0.008017525673 -0.01150566101 -0.04932772636
+v 0.01015925407 -0.01105937958 -0.0484642601
v -0.008017525673 -0.01150566101 -0.04932772636
-v 0.005453047752 -0.01183227539 -0.04995959282
+v 0.008017525673 -0.01150566101 -0.04932772636
v -0.005453047752 -0.01183227539 -0.04995959282
-v 0.01623310089 -0.008105487823 -0.04274929047
-v 0.01635726929 -0.007421665192 -0.0414262867
-v -0.01635726929 -0.007421665192 -0.0414262867
+v 0.005453047752 -0.01183227539 -0.04995959282
v -0.01623310089 -0.008105487823 -0.04274929047
-v 0.01512348175 -0.008980617523 -0.04444245338
+v -0.01635726929 -0.007421665192 -0.0414262867
+v 0.01635726929 -0.007421665192 -0.0414262867
+v 0.01623310089 -0.008105487823 -0.04274929047
v -0.01512348175 -0.008980617523 -0.04444245338
-v 0.0000000001433734 -0.007456951141 -0.04149456501
-v 0.002949271202 -0.007428588867 -0.0414396143
-v -0.002949268818 -0.007428588867 -0.0414396143
-v 0.005739269257 -0.007412033081 -0.0414076376
+v 0.01512348175 -0.008980617523 -0.04444245338
+v -0.0000000001433734 -0.007456951141 -0.04149456501
+v -0.002949271202 -0.007428588867 -0.0414396143
+v 0.002949268818 -0.007428588867 -0.0414396143
v -0.005739269257 -0.007412033081 -0.0414076376
-v 0.008197889328 -0.007412033081 -0.0414076376
+v 0.005739269257 -0.007412033081 -0.0414076376
v -0.008197889328 -0.007412033081 -0.0414076376
-v 0.01045669556 -0.007412033081 -0.0414076376
+v 0.008197889328 -0.007412033081 -0.0414076376
v -0.01045669556 -0.007412033081 -0.0414076376
-v 0.01247023582 -0.007419433594 -0.04142196178
+v 0.01045669556 -0.007412033081 -0.0414076376
v -0.01247023582 -0.007419433594 -0.04142196178
-v 0.01440351486 -0.007412033081 -0.0414076376
+v 0.01247023582 -0.007419433594 -0.04142196178
v -0.01440351486 -0.007412033081 -0.0414076376
-v 0.01543107986 -0.007418556213 -0.04142024994
+v 0.01440351486 -0.007412033081 -0.0414076376
v -0.01543107986 -0.007418556213 -0.04142024994
-v -0.01522431374 -0.005796737671 -0.04384480953
-v -0.01398766518 -0.005527458191 -0.04458936691
-v -0.01321782112 -0.005464439392 -0.04534695625
-v -0.01186089516 -0.005399723053 -0.04615376472
-v -0.0102885437 -0.00527586937 -0.04687426567
-v -0.007462654114 -0.005202846527 -0.04744502068
-v -0.003814404011 -0.005156602859 -0.0479090786
-v 0.0000000001433734 -0.00514418602 -0.04805441856
-v 0.003814404011 -0.005156602859 -0.0479090786
-v 0.007462654114 -0.005202846527 -0.04744502068
-v 0.0102885437 -0.00527586937 -0.04687426567
-v 0.01186089516 -0.005399723053 -0.04615376472
-v 0.01321782112 -0.005464439392 -0.04534695625
-v 0.01398766518 -0.005527458191 -0.04458936691
+v 0.01543107986 -0.007418556213 -0.04142024994
v 0.01522431374 -0.005796737671 -0.04384480953
-v 0.005384249687 -0.01224964142 -0.04830740929
-v 0.0000000001433734 -0.01264173508 -0.04905293465
-v 0.0000000001433734 -0.02491790771 -0.03839217186
-v 0.005671958923 -0.02356361389 -0.03803469181
-v -0.005671958923 -0.02356361389 -0.03803469181
+v 0.01398766518 -0.005527458191 -0.04458936691
+v 0.01321782112 -0.005464439392 -0.04534695625
+v 0.01186089516 -0.005399723053 -0.04615376472
+v 0.0102885437 -0.00527586937 -0.04687426567
+v 0.007462654114 -0.005202846527 -0.04744502068
+v 0.003814404011 -0.005156602859 -0.0479090786
+v -0.0000000001433734 -0.00514418602 -0.04805441856
+v -0.003814404011 -0.005156602859 -0.0479090786
+v -0.007462654114 -0.005202846527 -0.04744502068
+v -0.0102885437 -0.00527586937 -0.04687426567
+v -0.01186089516 -0.005399723053 -0.04615376472
+v -0.01321782112 -0.005464439392 -0.04534695625
+v -0.01398766518 -0.005527458191 -0.04458936691
+v -0.01522431374 -0.005796737671 -0.04384480953
v -0.005384249687 -0.01224964142 -0.04830740929
-v 0.0103437233 -0.01130283356 -0.04631494522
-v 0.009814882278 -0.02091960907 -0.03760938168
-v -0.009814882278 -0.02091960907 -0.03760938168
+v -0.0000000001433734 -0.01264173508 -0.04905293465
+v -0.0000000001433734 -0.02491790771 -0.03839217186
+v -0.005671958923 -0.02356361389 -0.03803469181
+v 0.005671958923 -0.02356361389 -0.03803469181
+v 0.005384249687 -0.01224964142 -0.04830740929
v -0.0103437233 -0.01130283356 -0.04631494522
-v 0.0142152977 -0.01009569168 -0.04390381813
-v 0.01390946388 -0.01636461258 -0.03778560638
-v -0.01390946388 -0.01636461258 -0.03778560638
+v -0.009814882278 -0.02091960907 -0.03760938168
+v 0.009814882278 -0.02091960907 -0.03760938168
+v 0.0103437233 -0.01130283356 -0.04631494522
v -0.0142152977 -0.01009569168 -0.04390381813
-v 0.0176056385 -0.008668479919 -0.04126876831
-v 0.01630849838 -0.0126499176 -0.03846506596
-v -0.01630849838 -0.0126499176 -0.03846506596
+v -0.01390946388 -0.01636461258 -0.03778560638
+v 0.01390946388 -0.01636461258 -0.03778560638
+v 0.0142152977 -0.01009569168 -0.04390381813
v -0.0176056385 -0.008668479919 -0.04126876831
-v 0.005214467049 -0.01109104156 -0.04819885254
-v 0.0000000001433734 -0.01146835327 -0.04892885208
+v -0.01630849838 -0.0126499176 -0.03846506596
+v 0.01630849838 -0.0126499176 -0.03846506596
+v 0.0176056385 -0.008668479919 -0.04126876831
v -0.005214467049 -0.01109104156 -0.04819885254
-v 0.01003117561 -0.01012105942 -0.04632220268
+v -0.0000000001433734 -0.01146835327 -0.04892885208
+v 0.005214467049 -0.01109104156 -0.04819885254
v -0.01003117561 -0.01012105942 -0.04632220268
-v 0.01377182007 -0.008996772766 -0.04412348747
+v 0.01003117561 -0.01012105942 -0.04632220268
v -0.01377182007 -0.008996772766 -0.04412348747
-v 0.01678995132 -0.00776517868 -0.04174939156
+v 0.01377182007 -0.008996772766 -0.04412348747
v -0.01678995132 -0.00776517868 -0.04174939156
-v 0.0000000001433734 -0.02534095764 -0.03758306503
-v 0.005882115364 -0.0238035202 -0.03717726231
+v 0.01678995132 -0.00776517868 -0.04174939156
+v -0.0000000001433734 -0.02534095764 -0.03758306503
v -0.005882115364 -0.0238035202 -0.03717726231
-v 0.009945716858 -0.02113132477 -0.03680250168
+v 0.005882115364 -0.0238035202 -0.03717726231
v -0.009945716858 -0.02113132477 -0.03680250168
-v 0.01417725563 -0.01664804459 -0.03693152905
+v 0.009945716858 -0.02113132477 -0.03680250168
v -0.01417725563 -0.01664804459 -0.03693152905
-v 0.01652592659 -0.01272476196 -0.03766599178
+v 0.01417725563 -0.01664804459 -0.03693152905
v -0.01652592659 -0.01272476196 -0.03766599178
-v 0.01725528717 -0.01045646667 -0.03953598499
-v 0.01386098862 -0.01304794312 -0.04066716194
-v 0.009814147949 -0.01579618454 -0.04162952423
-v 0.005338759422 -0.01750526428 -0.04272439957
-v 0.0000000001433734 -0.0183288765 -0.04321271896
-v -0.005338759422 -0.01750526428 -0.04272439957
-v -0.009814147949 -0.01579618454 -0.04162952423
-v -0.01386098862 -0.01304794312 -0.04066716194
+v 0.01652592659 -0.01272476196 -0.03766599178
v -0.01725528717 -0.01045646667 -0.03953598499
-v 0.01783149719 -0.009535942078 -0.03793628931
+v -0.01386098862 -0.01304794312 -0.04066716194
+v -0.009814147949 -0.01579618454 -0.04162952423
+v -0.005338759422 -0.01750526428 -0.04272439957
+v -0.0000000001433734 -0.0183288765 -0.04321271896
+v 0.005338759422 -0.01750526428 -0.04272439957
+v 0.009814147949 -0.01579618454 -0.04162952423
+v 0.01386098862 -0.01304794312 -0.04066716194
+v 0.01725528717 -0.01045646667 -0.03953598499
v -0.01783149719 -0.009535942078 -0.03793628931
-v 0.01831371307 -0.007646541595 -0.03993167162
+v 0.01783149719 -0.009535942078 -0.03793628931
v -0.01831371307 -0.007646541595 -0.03993167162
-v 0.01719194412 -0.007270908356 -0.04042321682
+v 0.01831371307 -0.007646541595 -0.03993167162
v -0.01719194412 -0.007270908356 -0.04042321682
-v 0.0000000001433734 -0.02349159241 -0.03107933283
-v 0.006158423424 -0.02221282959 -0.03144839525
+v 0.01719194412 -0.007270908356 -0.04042321682
+v -0.0000000001433734 -0.02349159241 -0.03107933283
v -0.006158423424 -0.02221282959 -0.03144839525
-v 0.01011045456 -0.02001922607 -0.03215628386
+v 0.006158423424 -0.02221282959 -0.03144839525
v -0.01011045456 -0.02001922607 -0.03215628386
-v 0.01408306122 -0.0157216835 -0.03395315647
+v 0.01011045456 -0.02001922607 -0.03215628386
v -0.01408306122 -0.0157216835 -0.03395315647
-v 0.01659402847 -0.01235967636 -0.0358497858
+v 0.01408306122 -0.0157216835 -0.03395315647
v -0.01659402847 -0.01235967636 -0.0358497858
-v 0.01746154785 -0.01050575256 -0.03714084625
+v 0.01659402847 -0.01235967636 -0.0358497858
v -0.01746154785 -0.01050575256 -0.03714084625
-v 0.005348777771 -0.00727853775 -0.0404379797
-v 0.0000000001433734 -0.007308921814 -0.04049678802
+v 0.01746154785 -0.01050575256 -0.03714084625
v -0.005348777771 -0.00727853775 -0.0404379797
-v 0.01046671867 -0.007285442352 -0.04045130253
+v -0.0000000001433734 -0.007308921814 -0.04049678802
+v 0.005348777771 -0.00727853775 -0.0404379797
v -0.01046671867 -0.007285442352 -0.04045130253
-v 0.01399026871 -0.007273712158 -0.04042862415
+v 0.01046671867 -0.007285442352 -0.04045130253
v -0.01399026871 -0.007273712158 -0.04042862415
-v 0.003154873848 -0.02317687988 -0.03117479324
-v 0.00302834034 -0.02491409302 -0.0374037838
-v 0.002891609669 -0.02463729858 -0.03830935955
-v 0.002705526352 -0.0180569458 -0.04312664032
-v 0.002726051807 -0.01251680374 -0.0488761425
-v 0.002607233524 -0.01127967834 -0.04856383324
-v 0.00267439127 -0.007293739319 -0.04046736717
-v -0.003154871464 -0.02317687988 -0.03117479324
+v 0.01399026871 -0.007273712158 -0.04042862415
+v -0.003154873848 -0.02317687988 -0.03117479324
v -0.00302834034 -0.02491409302 -0.0374037838
v -0.002891609669 -0.02463729858 -0.03830935955
v -0.002705526352 -0.0180569458 -0.04312664032
v -0.002726051807 -0.01251680374 -0.0488761425
v -0.002607233524 -0.01127967834 -0.04856383324
-v -0.002674388885 -0.007293739319 -0.04046736717
-v 0.008201055527 -0.02122413635 -0.03177816868
-v 0.007987928391 -0.02258113861 -0.03699932098
-v 0.007917275429 -0.02232719421 -0.03785373688
-v 0.00762093544 -0.0167190361 -0.04225169182
-v 0.007929854393 -0.01182655334 -0.0474492836
-v 0.007622818947 -0.01060604095 -0.04726050377
-v 0.007907748222 -0.007281990051 -0.04044464111
+v -0.00267439127 -0.007293739319 -0.04046736717
+v 0.003154871464 -0.02317687988 -0.03117479324
+v 0.00302834034 -0.02491409302 -0.0374037838
+v 0.002891609669 -0.02463729858 -0.03830935955
+v 0.002705526352 -0.0180569458 -0.04312664032
+v 0.002726051807 -0.01251680374 -0.0488761425
+v 0.002607233524 -0.01127967834 -0.04856383324
+v 0.002674388885 -0.007293739319 -0.04046736717
v -0.008201055527 -0.02122413635 -0.03177816868
v -0.007987928391 -0.02258113861 -0.03699932098
v -0.007917275429 -0.02232719421 -0.03785373688
@@ -235,13 +228,13 @@
v -0.007929854393 -0.01182655334 -0.0474492836
v -0.007622818947 -0.01060604095 -0.04726050377
v -0.007907748222 -0.007281990051 -0.04044464111
-v 0.01248122215 -0.0180474472 -0.03302308559
-v 0.01221684456 -0.01903577805 -0.03689261913
-v 0.0120456028 -0.01881324768 -0.03769703388
-v 0.01188055992 -0.01446828842 -0.0411953783
-v 0.01233288765 -0.01072782516 -0.04518084526
-v 0.0119033432 -0.009555358887 -0.04522772789
-v 0.01222848892 -0.007279567719 -0.04044000149
+v 0.008201055527 -0.02122413635 -0.03177816868
+v 0.007987928391 -0.02258113861 -0.03699932098
+v 0.007917275429 -0.02232719421 -0.03785373688
+v 0.00762093544 -0.0167190361 -0.04225169182
+v 0.007929854393 -0.01182655334 -0.0474492836
+v 0.007622818947 -0.01060604095 -0.04726050377
+v 0.007907748222 -0.007281990051 -0.04044464111
v -0.01248122215 -0.0180474472 -0.03302308559
v -0.01221684456 -0.01903577805 -0.03689261913
v -0.0120456028 -0.01881324768 -0.03769703388
@@ -249,36 +242,22 @@
v -0.01233288765 -0.01072782516 -0.04518084526
v -0.0119033432 -0.009555358887 -0.04522772789
v -0.01222848892 -0.007279567719 -0.04044000149
-v -0.008599944115 0.009800485969 -0.05606434822
-v -0.003010079861 0.009265522361 -0.05800373077
-v -0.003005678654 0.0184246707 -0.02586706161
-v -0.008601193428 0.01787309647 -0.02780457497
-v -0.01313587189 0.01086186409 -0.05228457451
-v -0.01608963013 0.01226953983 -0.04736978054
-v -0.0170865345 0.01383420944 -0.04192543983
-v -0.01606192589 0.01542936802 -0.03635004997
-v -0.01311452866 0.01683392763 -0.0314448452
-v -0.008183274269 0.01090790987 -0.05564349174
-v -0.002867059708 0.01040375233 -0.0574878788
-v -0.002862820625 0.01910768509 -0.02691411972
-v -0.008188719749 0.01858301163 -0.0287575531
-v -0.01249917984 0.01191417694 -0.05204341888
-v -0.01531337738 0.0132539773 -0.0473638773
-v -0.01626013756 0.01474211454 -0.04218836784
-v -0.01528543472 0.01625867605 -0.03688633919
-v -0.01248160362 0.01759485006 -0.03222021103
-v -0.008659315109 0.00875217557 -0.05584971428
-v -0.01320480347 0.01586811423 -0.0310665226
-v -0.003030433655 0.008190281391 -0.05779304504
+v 0.01248122215 -0.0180474472 -0.03302308559
+v 0.01221684456 -0.01903577805 -0.03689261913
+v 0.0120456028 -0.01881324768 -0.03769703388
+v 0.01188055992 -0.01446828842 -0.0411953783
+v 0.01233288765 -0.01072782516 -0.04518084526
+v 0.0119033432 -0.009555358887 -0.04522772789
+v 0.01222848892 -0.007279567719 -0.04044000149
v 0.008599944115 0.009800485969 -0.05606434822
v 0.003010079861 0.009265522361 -0.05800373077
v 0.003005678654 0.0184246707 -0.02586706161
v 0.008601193428 0.01787309647 -0.02780457497
v 0.01313587189 0.01086186409 -0.05228457451
-v 0.01608963013 0.0122695303 -0.04736977577
+v 0.01608963013 0.01226953983 -0.04736978054
v 0.0170865345 0.01383420944 -0.04192543983
v 0.01606192589 0.01542936802 -0.03635004997
-v 0.01311452866 0.01683392763 -0.03144483566
+v 0.01311452866 0.01683392763 -0.0314448452
v 0.008183274269 0.01090790987 -0.05564349174
v 0.002867059708 0.01040375233 -0.0574878788
v 0.002862820625 0.01910768509 -0.02691411972
@@ -291,52 +270,48 @@
v 0.008659315109 0.00875217557 -0.05584971428
v 0.01320480347 0.01586811423 -0.0310665226
v 0.003030433655 0.008190281391 -0.05779304504
-v -0.01322060585 0.009845875502 -0.05205060959
-v -0.01619429588 0.01126814604 -0.04710253716
-v -0.003026013374 0.01747231364 -0.02545038223
-v 0.003026013374 0.01747231364 -0.02545038223
-v -0.008659973145 0.01691663146 -0.02740119934
-v -0.01720441818 0.01284210801 -0.04162077427
-v -0.01617269516 0.0144525671 -0.0360065937
+v -0.008599944115 0.009800485969 -0.05606434822
+v -0.003010079861 0.009265522361 -0.05800373077
+v -0.003005678654 0.0184246707 -0.02586706161
+v -0.008601193428 0.01787309647 -0.02780457497
+v -0.01313587189 0.01086186409 -0.05228457451
+v -0.01608963013 0.0122695303 -0.04736977577
+v -0.0170865345 0.01383420944 -0.04192543983
+v -0.01606192589 0.01542936802 -0.03635004997
+v -0.01311452866 0.01683392763 -0.03144483566
+v -0.008183274269 0.01090790987 -0.05564349174
+v -0.002867059708 0.01040375233 -0.0574878788
+v -0.002862820625 0.01910768509 -0.02691411972
+v -0.008188719749 0.01858301163 -0.0287575531
+v -0.01249917984 0.01191417694 -0.05204341888
+v -0.01531337738 0.0132539773 -0.0473638773
+v -0.01626013756 0.01474211454 -0.04218836784
+v -0.01528543472 0.01625867605 -0.03688633919
+v -0.01248160362 0.01759485006 -0.03222021103
+v -0.008659315109 0.00875217557 -0.05584971428
+v -0.01320480347 0.01586811423 -0.0310665226
+v -0.003030433655 0.008190281391 -0.05779304504
v 0.01322060585 0.009845875502 -0.05205060959
v 0.01619429588 0.01126814604 -0.04710253716
+v 0.003026013374 0.01747231364 -0.02545038223
+v -0.003026013374 0.01747231364 -0.02545038223
v 0.008659973145 0.01691663146 -0.02740119934
v 0.01720441818 0.01284210801 -0.04162077427
v 0.01617269516 0.0144525671 -0.0360065937
-v -0.00595287323 0.008404060006 -0.05705570221
-v -0.01109886169 0.009233256578 -0.05417981148
-v -0.01494545937 0.01054065228 -0.04963420868
-v -0.005912585258 0.009467733502 -0.05726726532
-v -0.01102381706 0.01026483536 -0.05440137863
-v -0.00590739727 0.01821569443 -0.02660157204
-v -0.01102444649 0.01740860701 -0.0294332695
-v -0.01485238075 0.01154547215 -0.04988408089
-v -0.01683766365 0.01303286314 -0.04472310066
-v -0.01683002472 0.01464318037 -0.03909498215
-v -0.01481312752 0.0161679244 -0.03377263069
-v -0.01695224762 0.01203356504 -0.0444374752
-v -0.005947508812 0.01726221561 -0.02619001389
-v -0.01491521835 0.01519662738 -0.03341072083
-v -0.005629644394 0.01059423685 -0.05678682327
-v -0.01048682213 0.01134710789 -0.05406126976
-v -0.005625705719 0.01890878201 -0.02761322021
-v -0.01049347878 0.01814139128 -0.03030670166
-v -0.01413610458 0.01256463528 -0.04975571156
-v -0.01602378845 0.01398041248 -0.04484807491
-v -0.01601612091 0.0155109334 -0.03949703932
-v -0.01409747124 0.01696133614 -0.0344345665
+v -0.01322060585 0.009845875502 -0.05205060959
+v -0.01619429588 0.01126814604 -0.04710253716
+v -0.008659973145 0.01691663146 -0.02740119934
+v -0.01720441818 0.01284210801 -0.04162077427
+v -0.01617269516 0.0144525671 -0.0360065937
v 0.00595287323 0.008404060006 -0.05705570221
v 0.01109886169 0.009233256578 -0.05417981148
v 0.01494545937 0.01054065228 -0.04963420868
-v 0.0000000001433735 0.01754348397 -0.02519845963
v 0.005912585258 0.009467733502 -0.05726726532
v 0.01102381706 0.01026483536 -0.05440137863
-v 0.0000000001433735 0.009197046161 -0.05825536728
-v 0.0000000001284722 0.0184957242 -0.02561693192
v 0.00590739727 0.01821569443 -0.02660157204
v 0.01102444649 0.01740860701 -0.0294332695
v 0.01485238075 0.01154547215 -0.04988408089
-v 0.01683766365 0.01303286314 -0.04472309589
+v 0.01683766365 0.01303286314 -0.04472310066
v 0.01683002472 0.01464318037 -0.03909498215
v 0.01481312752 0.0161679244 -0.03377263069
v 0.01695224762 0.01203356504 -0.0444374752
@@ -344,537 +319,81 @@
v 0.01491521835 0.01519662738 -0.03341072083
v 0.005629644394 0.01059423685 -0.05678682327
v 0.01048682213 0.01134710789 -0.05406126976
-v 0.0000000001433735 0.01033928871 -0.05772785187
-v 0.0000000001433735 0.01917540789 -0.02667589188
v 0.005625705719 0.01890878201 -0.02761322021
v 0.01049347878 0.01814139128 -0.03030670166
v 0.01413610458 0.01256463528 -0.04975571156
v 0.01602378845 0.01398041248 -0.04484807491
v 0.01601612091 0.0155109334 -0.03949703932
v 0.01409747124 0.01696133614 -0.0344345665
-v -0.01694612503 0.01365978122 -0.03877096415
-v -0.01110014915 0.01644785047 -0.02904102325
-v 0.0000000001433735 0.008116974831 -0.05804450989
+v -0.00595287323 0.008404060006 -0.05705570221
+v -0.01109886169 0.009233256578 -0.05417981148
+v -0.01494545937 0.01054065228 -0.04963420868
+v -0.0000000001433735 0.01754348397 -0.02519845963
+v -0.005912585258 0.009467733502 -0.05726726532
+v -0.01102381706 0.01026483536 -0.05440137863
+v -0.0000000001433735 0.009197046161 -0.05825536728
+v -0.0000000001284722 0.0184957242 -0.02561693192
+v -0.00590739727 0.01821569443 -0.02660157204
+v -0.01102444649 0.01740860701 -0.0294332695
+v -0.01485238075 0.01154547215 -0.04988408089
+v -0.01683766365 0.01303286314 -0.04472309589
+v -0.01683002472 0.01464318037 -0.03909498215
+v -0.01481312752 0.0161679244 -0.03377263069
+v -0.01695224762 0.01203356504 -0.0444374752
+v -0.005947508812 0.01726221561 -0.02619001389
+v -0.01491521835 0.01519662738 -0.03341072083
+v -0.005629644394 0.01059423685 -0.05678682327
+v -0.01048682213 0.01134710789 -0.05406126976
+v -0.0000000001433735 0.01033928871 -0.05772785187
+v -0.0000000001433735 0.01917540789 -0.02667589188
+v -0.005625705719 0.01890878201 -0.02761322021
+v -0.01049347878 0.01814139128 -0.03030670166
+v -0.01413610458 0.01256463528 -0.04975571156
+v -0.01602378845 0.01398041248 -0.04484807491
+v -0.01601612091 0.0155109334 -0.03949703932
+v -0.01409747124 0.01696133614 -0.0344345665
v 0.01694612503 0.01365978122 -0.03877096415
v 0.01110014915 0.01644785047 -0.02904102325
-v -0.006016945839 0.01133668661 -0.05192392349
-v -0.002108892202 0.01096583128 -0.05327917099
-v -0.002105759382 0.01736415625 -0.03080135345
-v -0.006022181511 0.01697836161 -0.03215670586
-v -0.009190006256 0.01207718611 -0.04927633762
-v -0.01126023293 0.01306240797 -0.04583474159
-v -0.01195606232 0.0141553688 -0.04203054905
-v -0.01123947144 0.01526956558 -0.03813281059
-v -0.009178113937 0.01625185251 -0.03470228195
-v 0.006016945839 0.01133669376 -0.05192393303
-v 0.00210889101 0.01096583128 -0.05327917099
-v 0.002105756998 0.01736415625 -0.03080135345
-v 0.006022181511 0.01697835922 -0.03215669632
-v 0.009190006256 0.01207718372 -0.04927634239
+v -0.0000000001433735 0.008116974831 -0.05804450989
+v -0.01694612503 0.01365978122 -0.03877096415
+v -0.01110014915 0.01644785047 -0.02904102325
+v 0.006016945839 0.01133668661 -0.05192392349
+v 0.002108892202 0.01096583128 -0.05327917099
+v 0.002105759382 0.01736415625 -0.03080135345
+v 0.006022181511 0.01697836161 -0.03215670586
+v 0.009190006256 0.01207718611 -0.04927633762
v 0.01126023293 0.01306240797 -0.04583474159
v 0.01195606232 0.0141553688 -0.04203054905
v 0.01123947144 0.01526956558 -0.03813281059
v 0.009178113937 0.01625185251 -0.03470228195
-v 0.0000000001433735 0.01357296109 -0.04186339378
-v -0.007709794044 0.01165978193 -0.05076090813
-v -0.004140348434 0.01110600233 -0.05276386261
-v 0.0000000001433735 0.01091837406 -0.05345565796
-v 0.0000000001433735 0.01741397619 -0.03062612534
-v -0.004137740135 0.01721788168 -0.03131542206
-v -0.007716498375 0.01665365458 -0.03329553604
-v -0.01039450645 0.01255577326 -0.04759325027
-v -0.01178236008 0.01359596968 -0.04398554802
-v -0.01177666664 0.01472006321 -0.04005214691
-v -0.01036607742 0.01578608751 -0.03633030891
-v 0.007709789276 0.01165978193 -0.05076091766
-v 0.004140353203 0.01110600233 -0.05276388168
-v 0.004137744904 0.01721788168 -0.03131542206
-v 0.007716498375 0.01665367126 -0.0332955265
+v -0.006016945839 0.01133669376 -0.05192393303
+v -0.00210889101 0.01096583128 -0.05327917099
+v -0.002105756998 0.01736415625 -0.03080135345
+v -0.006022181511 0.01697835922 -0.03215669632
+v -0.009190006256 0.01207718372 -0.04927634239
+v -0.01126023293 0.01306240797 -0.04583474159
+v -0.01195606232 0.0141553688 -0.04203054905
+v -0.01123947144 0.01526956558 -0.03813281059
+v -0.009178113937 0.01625185251 -0.03470228195
+v -0.0000000001433735 0.01357296109 -0.04186339378
+v 0.007709794044 0.01165978193 -0.05076090813
+v 0.004140348434 0.01110600233 -0.05276386261
+v -0.0000000001433735 0.01091837406 -0.05345565796
+v -0.0000000001433735 0.01741397619 -0.03062612534
+v 0.004137740135 0.01721788168 -0.03131542206
+v 0.007716498375 0.01665365458 -0.03329553604
v 0.01039450645 0.01255577326 -0.04759325027
v 0.01178236008 0.01359596968 -0.04398554802
v 0.01177666664 0.01472006321 -0.04005214691
v 0.01036607742 0.01578608751 -0.03633030891
-v 0.01861192703 -0.001902713776 -0.04583821297
-v 0.02009922028 0.00497502327 -0.03978626013
-v 0.02015771866 -0.0005255413055 -0.03886411428
-v 0.01849533081 -0.008797073364 -0.03574412823
-v 0.01450198174 -0.01570281982 -0.03249218941
-v 0.01529312134 0.0006716823578 -0.05202822685
-v 0.003383049965 -0.0007186317444 -0.058626194
-v 0.003250524998 -0.01746490479 -0.02120849609
-v 0.009462184906 -0.01506210327 -0.0207844162
-v 0.008941688538 -0.02107105255 -0.03105260134
-v 0.008958272934 -0.01370010376 0.008292541504
-v 0.01866044998 -0.005185050964 -0.02521764755
-v 0.0187322998 -0.006751937866 -0.03039316177
-v 0.01968776703 0.003296833038 -0.02550276756
-v 0.02018135071 0.001712779999 -0.03178162098
-v 0.01828367233 0.01057542324 -0.02611943245
-v 0.01916316986 0.004483356476 -0.01975112915
-v 0.0169666481 0.01188714504 -0.01980348587
-v 0.01853759766 0.00536031723 -0.01328187943
-v 0.01850715637 -0.003727359772 -0.01973367691
-v 0.01489053726 -0.01059671402 -0.02021486282
-v 0.0110676384 0.01669685364 -0.01336093903
-v 0.01179485321 0.01647349119 -0.01996938705
-v 0.003421943188 0.01910497665 0.02493530273
-v 0.002929961681 0.01842256546 0.03852340698
-v 0.002617607117 0.01743322372 0.04243057251
-v 0.00740278244 0.01529603958 0.04251907349
-v 0.01001948357 0.01685526848 0.007351799011
-v 0.01440463066 0.01231934547 0.008896369934
-v 0.01684453964 -0.002404651642 0.008193855286
-v 0.007576131821 -0.01105697632 0.04890815735
-v 0.01000707626 0.002206764221 0.05009963989
-v 0.0155922699 -0.003498764038 0.02354076385
-v 0.01340656281 0.0118000412 0.02425445557
-v 0.01209174156 0.01115001678 0.0383808136
-v 0.01118617058 0.01060747147 0.04278457642
-v 0.01343523026 0.003409156799 0.04290611267
-v 0.01420211792 -0.004698257446 0.037993927
-v 0.01324834824 -0.005001029968 0.04266624451
-v 0.01057765007 -0.01236122131 0.04209129333
-v 0.008291134834 -0.01571105957 0.02301105499
-v 0.007288985252 -0.01725288391 0.03730827332
-v 0.006591382027 -0.0169683075 0.04155509949
-v 0.002227847576 -0.01895336151 0.04121627808
-v 0.0000000001433734 -0.004523696899 0.05461372375
-v 0.0000000001433734 -0.008985977173 0.05318649292
-v 0.002915630341 -0.004485588074 0.05430908203
-v 0.0000000001433734 0.0008755111694 0.05505065918
-v 0.002755167484 0.005470962524 0.05403205872
-v 0.0000000001433734 0.005953292847 0.05410240173
-v 0.0000000001433734 -0.01643726349 0.04719665527
-v 0.001827479601 -0.01747745514 0.0452519989
-v 0.0000000001433734 -0.01268112183 0.05101715088
-v 0.00369562149 0.01137563705 0.05053390503
-v 0.003332741261 0.01811499715 -0.02381673813
-v 0.01086011887 0.01694013715 -0.02435003281
-v 0.005843925476 0.01858664989 0.004569816589
-v 0.006220741272 0.01848806381 -0.002428894043
-v 0.00668548584 0.01815304756 -0.01686353683
-v 0.00291302681 0.01815177679 -0.02146446228
-v 0.0113901329 0.01659568787 -0.01656726837
-v 0.01883836746 0.005012235641 -0.01638114929
-v 0.01778179169 0.005773200989 -0.004752540588
-v 0.01048612595 0.01686761379 -0.004213676453
-v 0.002953009605 -0.0236623764 -0.03075536728
-v 0.0000000001433734 -0.01777076721 -0.02126646996
-v 0.0000000001433734 -0.0006940746307 -0.05899280548
-v 0.0000000001433734 -0.01577926636 0.008700714111
-v 0.0000000001433734 -0.0168415451 0.01472869873
-v 0.0000000001433734 0.01767993927 0.04244667053
-v 0.0000000001433734 -0.01943332672 0.03063194275
-v 0.0000000001433734 -0.0182144165 0.02279655457
-v 0.0000000001433734 -0.01973590851 0.03709819794
-v 0.0000000001433734 -0.01919418335 0.04113578796
-v 0.0000000001433734 -0.0176902771 0.04514968872
-v 0.0000000001433734 0.01452297211 0.04815490723
-v 0.0000000001433734 0.01636129379 0.0453729248
-v 0.0000000001433734 0.0125818634 0.05023162842
-v 0.0000000001433734 0.01030199051 0.05198112488
-v 0.0000000001433734 0.01899933815 0.00852897644
-v 0.0000000001433735 0.01822131872 -0.02153961182
-v 0.0000000001433735 0.004791126251 -0.05976377487
-v 0.0000000001433735 0.01819409609 -0.0235367775
-v 0.01866041183 0.002900800705 -0.04681387901
-v 0.01966588974 0.003895568848 -0.04351161957
-v 0.01961547852 -0.001542520523 -0.04248318195
-v 0.01675773621 -0.0123233223 -0.03376587629
-v 0.006447644234 -0.01654613495 -0.02103384018
-v 0.009304590225 0.00516992569 -0.05742008209
-v 0.003322043419 0.004846804142 -0.05946460724
-v 0.006092820168 -0.02268234253 -0.03082651377
-v 0.006003718376 -0.01499610901 0.008600311279
-v 0.003011322021 -0.01562877655 0.008701667786
-v 0.0187220192 -0.005982036591 -0.02790569305
-v 0.01993556976 0.002555265427 -0.02854620934
-v 0.01984664917 0.007066078186 -0.03251934052
-v 0.01936365128 0.008016166687 -0.02920764923
-v 0.01918413162 0.007280406952 -0.02574604034
-v 0.01839382172 0.008433027267 -0.01977933884
-v 0.01652114868 0.01218008995 -0.01631690979
-v 0.0176574707 0.009138641357 -0.0132075882
-v 0.01839868546 -0.003041152954 -0.01647592545
-v 0.01703763962 -0.00612947464 -0.01359912872
-v 0.01704613686 -0.007501373291 -0.02007527351
-v 0.008696689606 0.01756331563 -0.0199095726
-v 0.009337282181 0.01668298721 0.02465545654
-v 0.006611747742 0.01819932938 0.02483123779
-v 0.005122704506 0.01665222168 0.04243652344
-v 0.008170232773 0.0160766983 0.03843696594
-v 0.009899873734 0.01680588722 0.01119270325
-v 0.01583215714 0.009166164398 0.008709449768
-v 0.01674967766 0.005479240417 0.008531761169
-v 0.01408539772 -0.009203567505 0.007955284119
-v 0.008751792908 -0.008319129944 0.04952903748
-v 0.009656877518 -0.005040473938 0.04995483398
-v 0.00827755928 0.008619880676 0.04941452026
-v 0.006992149353 -0.007541503906 0.05157348633
-v 0.01289949417 -0.01078884125 0.0232906723
-v 0.01458109856 -0.007377128601 0.02339080811
-v 0.01562532425 0.0046758461 0.02389045715
-v 0.01474919319 0.008488349915 0.0240688324
-v 0.01419318199 0.008158798218 0.03149085999
-v 0.01345965385 0.007738704681 0.03835357666
-v 0.01255635262 0.007285499573 0.04288734436
-v 0.0143409729 0.00380689621 0.03828071594
-v 0.01217061043 -0.008969421387 0.0424143219
-v 0.01152200699 -0.01228206635 0.03760192871
-v 0.002849800587 -0.01796123505 0.0227999115
-v 0.005635032654 -0.01714550018 0.02285606384
-v 0.00537507534 -0.01827270508 0.03061683655
-v 0.004921731949 -0.01865844727 0.03721920013
-v 0.004432656765 -0.01821628571 0.04138160706
-v 0.002479588985 -0.01947490692 0.03713733673
-v 0.0000000001433734 -0.006921768188 0.05398483276
-v 0.002596535683 -0.008678283691 0.05308753967
-v 0.002761030197 -0.006794662476 0.05375541687
-v 0.00293333292 0.0008138275146 0.05474868774
-v 0.002822816372 0.003366966248 0.05454116821
-v 0.0000000001433734 0.003562049866 0.05476005554
-v 0.004559268951 -0.01632232666 0.04560470581
-v 0.003872203827 -0.01518257141 0.04768173218
-v 0.002697803974 -0.01187625885 0.05126022339
-v 0.004508719444 0.01314599991 0.04848274231
-v 0.001865065098 0.01431293488 0.04820510864
-v 0.003005943298 0.009278202057 0.05220352173
-v 0.01966083527 -0.004947834015 -0.03768414497
-v 0.01716398239 0.001319503784 -0.04952840805
-v 0.003093714714 -0.01466514587 0.002629241943
-v 0.009245948792 -0.0128685379 0.001856079102
-v 0.01958423615 -0.0009919929504 -0.02534104347
-v 0.01989952087 -0.002615299225 -0.03123426437
-v 0.01942903519 0.00393901825 -0.02259115219
-v 0.01748486519 0.01142212868 -0.02283678055
-v 0.01921937943 0.0003319549561 -0.01973161697
-v 0.0187481308 0.001346683502 -0.01335857391
-v 0.01859426498 -0.004414901733 -0.02245229721
-v 0.01173950195 0.0165370667 -0.02246456146
-v 0.00323135376 0.01906442642 0.0322077179
-v 0.00887304306 0.01658041 0.03197280884
-v 0.01019136429 0.01689266205 0.00239906311
-v 0.01810571671 0.001843547821 -0.004893722534
-v 0.01726447105 0.005721588135 0.001715888977
-v 0.01484277725 0.01251403809 0.00205581665
-v 0.01736621857 -0.002105350494 0.001397399902
-v 0.014556427 -0.008678245544 0.001178665161
-v 0.007962164879 0.001489219666 0.05225608826
-v 0.006711673737 0.007210350037 0.05153991699
-v 0.00802752018 -0.001665077209 0.05227958679
-v 0.007669672966 -0.004726905823 0.05203681946
-v 0.006098480225 -0.009954071045 0.05093521118
-v 0.01535887718 0.00008232116699 0.03118148804
-v 0.01593850136 0.0006007575989 0.02371566772
-v 0.01506277084 0.004254894257 0.03134033203
-v 0.01285533905 0.0115605545 0.03164001465
-v 0.01370512962 -0.0007701873779 0.04283454895
-v 0.01497627258 -0.004125480652 0.03100708008
-v 0.01232325554 -0.01164596558 0.03073074341
-v 0.002717368603 -0.01915142059 0.03062458038
-v 0.007913470268 -0.01676429749 0.03062320709
-v 0.0000000001433734 -0.001891403198 0.05499511719
-v 0.002994885445 -0.001899871826 0.05466720581
-v 0.0000000001433734 -0.01475002289 0.04921463013
-v 0.00314589262 -0.01364509583 0.04966293335
-v 0.001521962881 0.01240791321 0.05026931763
-v 0.01471954346 0.006150994301 -0.0530858326
-v 0.01833827972 0.007731947899 -0.04735969543
-v 0.01956430435 0.009696025848 -0.04073404312
-v 0.02011144638 0.006058683395 -0.03600113869
-v 0.02030925751 0.0007067298889 -0.03521795988
-v 0.01866231918 -0.007622909546 -0.03292656422
-v 0.01184627533 -0.01861394882 -0.03165155172
-v 0.01166866302 -0.0004309654236 -0.05517032623
-v 0.009213008881 -0.0006571102142 -0.05659393311
-v 0.01581858635 0.01249886513 -0.01035293579
-v 0.01828184128 0.005593166351 -0.01057157516
-v 0.01813819885 -0.002294101715 -0.01078279495
-v 0.0149848175 -0.008623180389 -0.01108886719
-v 0.01082362175 0.01677319527 -0.010508461
-v 0.003330833912 -0.01373134613 -0.01170679092
-v 0.009616174698 -0.01221893311 -0.01144340515
-v 0.01228888512 -0.01311098099 -0.0204738903
-v 0.01889995575 0.01179102421 -0.03397530556
-v 0.01651416779 0.01404056072 -0.02757482529
-v 0.01479566574 0.01463691711 -0.01985599518
-v 0.01393066406 0.01203969955 0.0165940094
-v 0.016186409 0.005088653564 0.01622177124
-v 0.01621448517 -0.002922477722 0.0158770752
-v 0.01345574379 -0.009984817505 0.01562911987
-v 0.009697351456 0.01673344612 0.01698875427
-v 0.003532288074 0.01902677536 0.01725749969
-v 0.002933821678 -0.01666046143 0.01474433899
-v 0.008595881462 -0.01466907501 0.01516304016
-v 0.01170786858 -0.01176212311 0.008002700806
-v 0.0111749649 -0.01268341064 0.01547328949
-v 0.01363612175 0.01501978874 -0.01033246994
-v 0.009979877472 0.009842948914 0.04620933533
-v 0.01209338188 0.002922935486 0.04659957886
-v 0.01183568954 -0.005127105713 0.04641479492
-v 0.00932138443 -0.01198387146 0.04560272217
-v 0.002267978191 0.01614032745 0.04538131714
-v 0.002031704187 -0.01827644348 0.04342781067
-v 0.006033496857 -0.01645874023 0.04385925293
-v 0.009432411194 0.01330200195 0.04264587402
-v 0.008655796051 -0.01506477356 0.0417780304
-v 0.004673705101 0.005515632629 0.05334106445
-v 0.00534658432 0.0008012771606 0.05389724731
-v 0.005176172256 -0.004468688965 0.05356796265
-v 0.004319834709 -0.008775367737 0.05251152039
-v 0.002764856815 0.007209835052 0.05334388733
-v 0.0000000001433734 0.007995834351 0.05325843811
-v 0.0000000001433734 -0.01071380615 0.05231109619
-v 0.005020713806 -0.01187427521 0.05029510498
-v 0.00619263649 -0.01320037842 0.04828140259
-v 0.007588787079 -0.0144392395 0.04512733459
-v 0.0120420742 0.005620877743 -0.05572500229
-v 0.01371296883 0.01597628832 -0.02573312759
-v 0.0192240715 0.008701443672 -0.04422941685
-v 0.01943193436 0.01072333813 -0.03720539093
-v 0.017937603 0.01289735317 -0.0308347702
-v 0.003317241669 0.01895071983 0.01165065765
-v 0.007521572113 0.01808717728 0.007028236389
-v 0.003560497761 0.0187733078 0.00800201416
-v 0.006122536659 0.01832526207 -0.01098957062
-v 0.005716686249 0.01806764007 -0.02016317368
-v 0.008555765152 0.01766724825 -0.01678182602
-v 0.01433109283 0.01480958939 -0.01636417389
-v 0.01826732635 -0.002594127655 -0.01344463348
-v 0.01612941742 0.01237344742 -0.0131287384
-v 0.006431093216 -0.01323490143 -0.004765777588
-v 0.01684915543 0.009445924759 -0.00460647583
-v 0.01232099533 -0.01066608429 -0.00499956131
-v 0.006399674416 0.01853952408 0.0007802963257
-v 0.0153284359 0.01256793022 -0.004453582764
-v 0.01780033112 -0.002049369812 -0.005031967163
-v 0.005325174332 0.01838591576 -0.008203430176
-v 0.00795771122 0.01766728878 -0.02227460861
-v 0.01685430527 0.006858239174 -0.05026508331
-v 0.006771297455 0.0182434535 -0.01380584717
-v 0.005470218658 0.01843399525 -0.005117034912
-v 0.0000000001433734 -0.00763759613 -0.04838072777
-v 0.0000000001433734 -0.02388538361 -0.03070386648
-v 0.0000000001433734 -0.01629238129 -0.03761195183
-v 0.006438932419 0.004981436729 -0.0586841774
-v 0.01800775528 0.008862533569 -0.01634828568
-v 0.01707290649 -0.006706733704 -0.01684476852
-v 0.005705008507 0.0175510025 0.03848457336
-v 0.006762552261 0.01829377174 0.01090549469
-v 0.01674477577 -0.005586662292 -0.005071983337
-v 0.01587094307 -0.006069450378 0.008051834106
-v 0.009364900589 0.005659141541 0.04983657837
-v 0.01314364433 -0.008750762939 0.03780044556
-v 0.0197403717 -0.001775875092 -0.02824567795
-v 0.01875297546 0.007942380905 -0.02270151138
-v 0.01897974014 0.0009405517578 -0.01642166138
-v 0.006257452965 0.01813601494 0.03212371826
-v 0.01710464478 0.00153137207 0.008360710144
-v 0.01638484955 -0.005694179535 0.0012657547
-v 0.01012932777 -0.001454124451 0.05015518188
-v 0.00751106739 0.004519767761 0.05199867249
-v 0.01462527275 -0.0004154205322 0.03816116333
-v 0.01395204544 -0.00811832428 0.03084686279
-v 0.006345362663 -0.0007320022583 -0.05783893585
-v 0.01736812592 0.009320106506 -0.01046695709
-v 0.01698059082 -0.005830535889 -0.01097387314
-v 0.006568012238 -0.01317508698 -0.01160043716
-v 0.0152948761 0.008828315735 0.01640247345
-v 0.01521123886 -0.006691703796 0.01573040009
-v 0.006839694977 0.01818001747 0.01715484619
-v 0.005816245079 -0.01598155975 0.01486461639
-v 0.01245211601 0.01489030838 0.009086074829
-v 0.01127656937 0.006668624878 0.04646240234
-v 0.01078982353 -0.008850631714 0.04607955933
-v 0.005473484993 0.01482650757 0.04555236816
-v 0.004048006535 -0.01759414673 0.04363227844
-v 0.01030576706 0.01395721436 0.03839691162
-v 0.01160130501 0.01455142975 0.0244493866
-v 0.009512147903 -0.01516014099 0.03742797852
-v 0.01073899269 -0.01360858917 0.02318313599
-v 0.005081777573 0.003345298767 0.05371505737
-v 0.004780292511 -0.006814918518 0.0530960083
-v 0.002513480186 -0.01019046783 0.05236175537
-v 0.00689043045 0.01097583771 0.04896232605
-v 0.004188687801 0.007089385986 0.05293884277
-v 0.01940805435 -0.0002829551697 -0.02250734329
-v 0.01992650986 -0.003632011414 -0.03436201096
-v 0.01854381561 0.001620845795 -0.01067434311
-v 0.01652101517 0.001083965302 0.01604793549
-v 0.01279887199 0.01503705025 0.002229270935
-v 0.01231739998 -0.001105270386 0.04659301758
-v 0.01107378006 0.01439086914 0.03179740906
-v 0.01025528908 -0.01457305908 0.03065681458
-v 0.005400567055 -0.001881637573 0.05385818481
-v 0.005644745827 0.009391918182 0.051040802
-v 0.01243561745 -0.01074193954 -0.01126468658
-v 0.01207206726 0.01468675613 0.01679111481
-v 0.008338985443 0.01238025665 0.04591362
-v 0.003814001083 -0.01013877869 0.05200904846
-v 0.01528470993 0.0146297574 -0.02321310043
-v 0.0000000001433734 0.01940513611 0.02496940613
-v 0.0000000001433734 0.01870769501 0.03854049683
-v 0.0000000001433734 0.01917369843 0.01170822144
-v 0.0000000001433734 0.01937185287 0.03223304749
-v 0.0000000001433734 -0.01390949249 -0.01174806595
-v 0.0000000001433734 0.01930020332 0.01729293823
-v 0.0000000001433734 -0.0185042572 0.04333106995
-v 0.008084592819 0.01784603596 -0.01076587677
-v 0.008388671875 0.01776367426 -0.01362880707
-v 0.01393796921 0.01493583202 -0.01314624786
-v 0.006178631783 -0.01407196045 0.002420463562
-v 0.01632925034 0.009387569427 0.001883163452
-v 0.0000000001433734 -0.0148091507 0.002644691467
-v 0.0176197052 0.001796970367 0.001553955078
-v 0.01210282326 -0.01106666565 0.001315612793
-v 0.007757534981 0.01806992531 0.002411308289
-v 0.01321046829 0.015066185 -0.004315452576
-v 0.007812199593 0.01799247265 -0.004061698914
-v 0.0000000001433734 -0.01106786728 -0.04246942043
-v 0.0000000001433734 -0.02277870178 -0.02841436386
-v 0.01191295624 -0.01717159271 -0.02897335052
-v 0.01453641891 -0.01429689407 -0.02952208996
-v 0.01691246033 -0.00863817215 -0.02385850906
-v 0.009303770065 -0.016717453 -0.02382329941
-v 0.006361837387 -0.01843528748 -0.02392020226
-v 0.003164381981 -0.01955047607 -0.02401075363
-v 0.0000000001433734 -0.01986217499 -0.02406014442
-v 0.0121316433 -0.01453962326 -0.0237462616
-v 0.01471408844 -0.01185371399 -0.02370105743
-v 0.0000000001433734 -0.02154808044 -0.02644387245
-v 0.003084909916 -0.02129219055 -0.02641661167
-v 0.006265830994 -0.02015094757 -0.02633747578
-v 0.009150495529 -0.01835361481 -0.02635705471
-v 0.01199382782 -0.01594022751 -0.02663830757
-v 0.01458203316 -0.01314870834 -0.02691740513
-v 0.01679833412 -0.009841747284 -0.02748530388
-v 0.003020849228 -0.02254852295 -0.02842387438
-v 0.006185688972 -0.02145698547 -0.02840367794
-v 0.009041032791 -0.01970005035 -0.02851617813
-v 0.01677595139 -0.01093166351 -0.03042486191
-v 0.006564979553 -0.01504087448 -0.01811987877
-v 0.0000000001433734 -0.01606750488 -0.01839772224
-v 0.003305647373 -0.01580345154 -0.01833044052
-v 0.009561548233 -0.01380340576 -0.01778402328
-v 0.01238915443 -0.0120265007 -0.01740667343
-v 0.01498724937 -0.009695148468 -0.01713094711
-v 0.0000000001433734 -0.01455780029 -0.01471004486
-v 0.006607050896 -0.01372375488 -0.01449907303
-v 0.003333625793 -0.01435302734 -0.01465143204
-v 0.009615449905 -0.01269363403 -0.01424394608
-v 0.01243695259 -0.01113130569 -0.01396986008
-v 0.01500819206 -0.008967018127 -0.01378406525
-v 0.01482366562 -0.008459739685 -0.00496471405
-v 0.009489879608 -0.0122252655 -0.004899864197
-v 0.003247098923 -0.01378753662 -0.004697608948
-v 0.0000000001433734 -0.01394943237 -0.004679965973
-v 0.0000000001433735 0.007790068388 -0.05978897095
-v 0.003335931301 0.007870850563 -0.05951183319
-v 0.00655687809 0.008107255697 -0.05869642258
-v 0.006552457809 0.01788347602 -0.02463180542
-v 0.009546175003 0.01750216246 -0.02596826553
-v 0.01224053383 0.0169843483 -0.02777951241
-v 0.01458784103 0.009696542025 -0.05317952156
-v 0.01648718834 0.01046019793 -0.05052354813
-v 0.01224665642 0.009023754597 -0.05551772118
-v 0.01786008835 0.0112633121 -0.04772870064
-v 0.0186907196 0.01210969329 -0.04478170395
-v 0.01896757126 0.01300299644 -0.04166976929
-v 0.01868421555 0.0139059031 -0.03852291584
-v 0.01783315659 0.01478104353 -0.03547131062
-v 0.01644848824 0.01560250163 -0.03260541916
-v 0.01456283569 0.01634403586 -0.03001671791
-v 0.009548768997 0.008492670655 -0.05736125946
-v 0.0000000001433734 -0.004682922363 -0.05804605484
-v 0.00900305748 -0.02161647797 -0.03224790812
-v 0.005947928429 -0.02312515259 -0.03188311577
-v 0.01818155289 -0.01016206741 -0.03869113684
-v 0.01882295609 -0.007381076813 -0.04166667461
-v 0.01671805382 -0.01347892761 -0.03615076542
-v 0.01456053734 -0.01663673401 -0.03428458929
-v 0.0119148922 -0.01934707642 -0.03298680782
-v 0.01837177277 -0.005752849579 -0.04486113548
-v 0.01712789536 -0.004973888397 -0.04790185928
-v 0.01547107697 -0.004753217697 -0.05040895462
-v 0.01359952927 -0.004802093506 -0.0524546051
-v 0.01168597221 -0.004832334518 -0.05411026001
-v 0.009678792953 -0.004846944809 -0.05544336319
-v 0.002636258602 -0.004737548828 -0.05785335541
-v 0.005174036026 -0.004820194244 -0.05732728958
-v 0.007514891624 -0.004849824905 -0.05651975632
-v 0.002964823246 -0.0239541626 -0.03162119627
-v 0.0000000001433734 -0.02418331146 -0.0315278101
-v 0.0000000001433734 0.01869997501 -0.009121284485
-v 0.0000000001433734 0.01857287884 -0.008889846802
-v 0.0000000001433735 0.0182436347 -0.02048072815
-v 0.0000000001015446 0.01838785172 -0.02009134293
-v 0.0000000001363223 0.01877865791 0.005431251526
-v 0.0000000001433734 0.01878743172 0.005596504211
-v 0.0000000001433734 0.01855639458 -0.005539474487
-v 0.0000000001507267 0.01853947163 -0.005378608704
-v 0.005297169685 0.01850355148 -0.01602500916
-v 0.005597815514 0.01836355329 -0.01618457794
-v 0.005798845291 0.01840591908 -0.01468524933
-v 0.005487298965 0.01854391336 -0.0146062088
-v 0.001419330835 0.01869457483 -0.009311332703
-v 0.001499688625 0.01856711864 -0.009090652466
-v 0.002743592262 0.01867906809 -0.009856071472
-v 0.002899007797 0.01855042696 -0.009666099548
-v 0.005297117233 0.01858428001 -0.01318744659
-v 0.005597801208 0.01844873905 -0.01318593979
-v 0.00475209713 0.018621943 -0.0118637085
-v 0.005021696091 0.01848895073 -0.0117871666
-v 0.003877718449 0.01865419626 -0.01073009491
-v 0.004097540379 0.01852363825 -0.01058940887
-v 0.004752202034 0.01846587896 -0.01734874725
-v 0.005021700859 0.01832435727 -0.01758333206
-v 0.003877866268 0.01843362093 -0.01848243713
-v 0.00409763813 0.01829076409 -0.01878116608
-v 0.002743747234 0.01840877771 -0.01935646057
-v 0.002899160385 0.01826486826 -0.01970460892
-v 0.001419423819 0.01839326739 -0.01990125656
-v 0.001499780416 0.01824887514 -0.02028009415
-v 0.001337810755 0.01854309082 -0.005208320618
-v 0.001378386021 0.0185598278 -0.005364112854
-v 0.002683880329 0.01856976986 -0.004841918945
-v 0.002602639198 0.01855358124 -0.004703674316
-v 0.001453059912 0.01877188683 0.005220298767
-v 0.001496927738 0.01878057003 0.005379447937
-v 0.002792146206 0.01875608444 0.004642448425
-v 0.002876522541 0.01876483917 0.004784584045
-v 0.00390329361 0.01873566628 0.003752670288
-v 0.004021482468 0.01874486446 0.003868179321
-v 0.004736332893 0.01871091366 0.002617378235
-v 0.004880046844 0.01872076511 0.002698669434
-v 0.005241103172 0.01868230343 0.001302871704
-v 0.005400443077 0.01869296074 0.00134437561
-v 0.005394787788 0.01865203857 -0.0000968170166
-v 0.005558981895 0.01866373539 -0.00009777069092
-v 0.003721504211 0.0185713768 -0.003870773315
-v 0.00383462429 0.01858662128 -0.003986320496
-v 0.004747729301 0.0186089325 -0.002858810425
-v 0.004607710838 0.01859474659 -0.002776451111
-v 0.005174565315 0.01862226486 -0.001487503052
-v 0.005332012177 0.01863523006 -0.001530799866
-v 0.002802929878 0.01727819681 -0.0267317009
-v 0.0000000001433735 0.01734406233 -0.02649831772
-v 0.005504851341 0.01708405972 -0.02741577148
-v 0.00800886631 0.0167651701 -0.02853393555
-v 0.01026145935 0.01633254051 -0.03004772186
-v 0.01220532417 0.01579721689 -0.0319185257
-v 0.01378511429 0.01517710924 -0.03408369064
-v 0.01494659424 0.01448992014 -0.03648144722
-v 0.01566098213 0.01375769854 -0.03903482199
-v 0.0158995533 0.01300244093 -0.041667099
-v 0.0156671524 0.01225725532 -0.04426301003
-v 0.01497053146 0.01155372858 -0.04671244621
-v 0.01381503105 0.01088054419 -0.04905488491
-v 0.01220849991 0.01023335934 -0.05130551338
-v 0.01024475098 0.009666233063 -0.05327604294
-v 0.008003120422 0.009224057198 -0.05481050491
-v 0.005510778427 0.008903326988 -0.05592103004
-v 0.002807695866 0.008705437779 -0.05660298347
-v 0.0000000001433735 0.008637444973 -0.0568359375
+v -0.007709789276 0.01165978193 -0.05076091766
+v -0.004140353203 0.01110600233 -0.05276388168
+v -0.004137744904 0.01721788168 -0.03131542206
+v -0.007716498375 0.01665367126 -0.0332955265
+v -0.01039450645 0.01255577326 -0.04759325027
+v -0.01178236008 0.01359596968 -0.04398554802
+v -0.01177666664 0.01472006321 -0.04005214691
+v -0.01036607742 0.01578608751 -0.03633030891
v -0.01861192703 -0.001902713776 -0.04583821297
v -0.02009922028 0.00497502327 -0.03978626013
v -0.02015771866 -0.0005255413055 -0.03886411428
@@ -898,8 +417,8 @@
v -0.01489053726 -0.01059671402 -0.02021486282
v -0.0110676384 0.01669685364 -0.01336093903
v -0.01179485321 0.01647349119 -0.01996938705
-v -0.003421940804 0.01910497665 0.02493530273
-v -0.002929959297 0.01842256546 0.03852340698
+v -0.003421943188 0.01910497665 0.02493530273
+v -0.002929961681 0.01842256546 0.03852340698
v -0.002617607117 0.01743322372 0.04243057251
v -0.00740278244 0.01529603958 0.04251907349
v -0.01001948357 0.01685526848 0.007351799011
@@ -919,28 +438,52 @@
v -0.007288985252 -0.01725288391 0.03730827332
v -0.006591382027 -0.0169683075 0.04155509949
v -0.002227847576 -0.01895336151 0.04121627808
+v -0.0000000001433734 -0.004523696899 0.05461372375
+v -0.0000000001433734 -0.008985977173 0.05318649292
v -0.002915630341 -0.004485588074 0.05430908203
+v -0.0000000001433734 0.0008755111694 0.05505065918
v -0.002755167484 0.005470962524 0.05403205872
+v -0.0000000001433734 0.005953292847 0.05410240173
+v -0.0000000001433734 -0.01643726349 0.04719665527
v -0.001827479601 -0.01747745514 0.0452519989
-v -0.002697803974 -0.01187625885 0.05126022339
+v -0.0000000001433734 -0.01268112183 0.05101715088
+v -0.00369562149 0.01137563705 0.05053390503
v -0.003332741261 0.01811499715 -0.02381673813
v -0.01086011887 0.01694013715 -0.02435003281
v -0.005843925476 0.01858664989 0.004569816589
v -0.006220741272 0.01848806381 -0.002428894043
v -0.00668548584 0.01815304756 -0.01686353683
-v -0.002913024426 0.01815177679 -0.02146446228
+v -0.00291302681 0.01815177679 -0.02146446228
v -0.0113901329 0.01659568787 -0.01656726837
v -0.01883836746 0.005012235641 -0.01638114929
v -0.01778179169 0.005773200989 -0.004752540588
v -0.01048612595 0.01686761379 -0.004213676453
v -0.002953009605 -0.0236623764 -0.03075536728
+v -0.0000000001433734 -0.01777076721 -0.02126646996
+v -0.0000000001433734 -0.0006940746307 -0.05899280548
+v -0.0000000001433734 -0.01577926636 0.008700714111
+v -0.0000000001433734 -0.0168415451 0.01472869873
+v -0.0000000001433734 0.01767993927 0.04244667053
+v -0.0000000001433734 -0.01943332672 0.03063194275
+v -0.0000000001433734 -0.0182144165 0.02279655457
+v -0.0000000001433734 -0.01973590851 0.03709819794
+v -0.0000000001433734 -0.01919418335 0.04113578796
+v -0.0000000001433734 -0.0176902771 0.04514968872
+v -0.0000000001433734 0.01452297211 0.04815490723
+v -0.0000000001433734 0.01636129379 0.0453729248
+v -0.0000000001433734 0.0125818634 0.05023162842
+v -0.0000000001433734 0.01030199051 0.05198112488
+v -0.0000000001433734 0.01899933815 0.00852897644
+v -0.0000000001433735 0.01822131872 -0.02153961182
+v -0.0000000001433735 0.004791126251 -0.05976377487
+v -0.0000000001433735 0.01819409609 -0.0235367775
v -0.01866041183 0.002900800705 -0.04681387901
v -0.01966588974 0.003895568848 -0.04351161957
v -0.01961547852 -0.001542520523 -0.04248318195
v -0.01675773621 -0.0123233223 -0.03376587629
v -0.006447644234 -0.01654613495 -0.02103384018
v -0.009304590225 0.00516992569 -0.05742008209
-v -0.003322043419 0.004846801758 -0.05946460724
+v -0.003322043419 0.004846804142 -0.05946460724
v -0.006092820168 -0.02268234253 -0.03082651377
v -0.006003718376 -0.01499610901 0.008600311279
v -0.003011322021 -0.01562877655 0.008701667786
@@ -982,17 +525,20 @@
v -0.005635032654 -0.01714550018 0.02285606384
v -0.00537507534 -0.01827270508 0.03061683655
v -0.004921731949 -0.01865844727 0.03721920013
-v -0.004432651997 -0.01821628571 0.04138160706
+v -0.004432656765 -0.01821628571 0.04138160706
v -0.002479588985 -0.01947490692 0.03713733673
+v -0.0000000001433734 -0.006921768188 0.05398483276
v -0.002596535683 -0.008678283691 0.05308753967
-v -0.002761027813 -0.006794662476 0.05375541687
+v -0.002761030197 -0.006794662476 0.05375541687
v -0.00293333292 0.0008138275146 0.05474868774
v -0.002822816372 0.003366966248 0.05454116821
+v -0.0000000001433734 0.003562049866 0.05476005554
v -0.004559268951 -0.01632232666 0.04560470581
v -0.003872203827 -0.01518257141 0.04768173218
+v -0.002697803974 -0.01187625885 0.05126022339
v -0.004508719444 0.01314599991 0.04848274231
v -0.001865065098 0.01431293488 0.04820510864
-v -0.003005940914 0.009278202057 0.05220352173
+v -0.003005943298 0.009278202057 0.05220352173
v -0.01966083527 -0.004947834015 -0.03768414497
v -0.01716398239 0.001319503784 -0.04952840805
v -0.003093714714 -0.01466514587 0.002629241943
@@ -1025,9 +571,11 @@
v -0.01370512962 -0.0007701873779 0.04283454895
v -0.01497627258 -0.004125480652 0.03100708008
v -0.01232325554 -0.01164596558 0.03073074341
-v -0.002717366219 -0.01915142059 0.03062458038
+v -0.002717368603 -0.01915142059 0.03062458038
v -0.007913470268 -0.01676429749 0.03062320709
-v -0.00299488306 -0.001899871826 0.05466720581
+v -0.0000000001433734 -0.001891403198 0.05499511719
+v -0.002994885445 -0.001899871826 0.05466720581
+v -0.0000000001433734 -0.01475002289 0.04921463013
v -0.00314589262 -0.01364509583 0.04966293335
v -0.001521962881 0.01240791321 0.05026931763
v -0.01471954346 0.006150994301 -0.0530858326
@@ -1055,7 +603,7 @@
v -0.01621448517 -0.002922477722 0.0158770752
v -0.01345574379 -0.009984817505 0.01562911987
v -0.009697351456 0.01673344612 0.01698875427
-v -0.00353228569 0.01902677536 0.01725749969
+v -0.003532288074 0.01902677536 0.01725749969
v -0.002933821678 -0.01666046143 0.01474433899
v -0.008595881462 -0.01466907501 0.01516304016
v -0.01170786858 -0.01176212311 0.008002700806
@@ -1066,15 +614,17 @@
v -0.01183568954 -0.005127105713 0.04641479492
v -0.00932138443 -0.01198387146 0.04560272217
v -0.002267978191 0.01614032745 0.04538131714
-v -0.002031705379 -0.01827644348 0.04342781067
+v -0.002031704187 -0.01827644348 0.04342781067
v -0.006033496857 -0.01645874023 0.04385925293
v -0.009432411194 0.01330200195 0.04264587402
v -0.008655796051 -0.01506477356 0.0417780304
v -0.004673705101 0.005515632629 0.05334106445
v -0.00534658432 0.0008012771606 0.05389724731
v -0.005176172256 -0.004468688965 0.05356796265
-v -0.004319829941 -0.008775367737 0.05251152039
+v -0.004319834709 -0.008775367737 0.05251152039
v -0.002764856815 0.007209835052 0.05334388733
+v -0.0000000001433734 0.007995834351 0.05325843811
+v -0.0000000001433734 -0.01071380615 0.05231109619
v -0.005020713806 -0.01187427521 0.05029510498
v -0.00619263649 -0.01320037842 0.04828140259
v -0.007588787079 -0.0144392395 0.04512733459
@@ -1103,6 +653,9 @@
v -0.01685430527 0.006858239174 -0.05026508331
v -0.006771297455 0.0182434535 -0.01380584717
v -0.005470218658 0.01843399525 -0.005117034912
+v -0.0000000001433734 -0.00763759613 -0.04838072777
+v -0.0000000001433734 -0.02388538361 -0.03070386648
+v -0.0000000001433734 -0.01629238129 -0.03761195183
v -0.006438932419 0.004981436729 -0.0586841774
v -0.01800775528 0.008862533569 -0.01634828568
v -0.01707290649 -0.006706733704 -0.01684476852
@@ -1122,7 +675,6 @@
v -0.00751106739 0.004519767761 0.05199867249
v -0.01462527275 -0.0004154205322 0.03816116333
v -0.01395204544 -0.00811832428 0.03084686279
-v -0.00369562149 0.01137563705 0.05053390503
v -0.006345362663 -0.0007320022583 -0.05783893585
v -0.01736812592 0.009320106506 -0.01046695709
v -0.01698059082 -0.005830535889 -0.01097387314
@@ -1135,7 +687,7 @@
v -0.01127656937 0.006668624878 0.04646240234
v -0.01078982353 -0.008850631714 0.04607955933
v -0.005473484993 0.01482650757 0.04555236816
-v -0.004048001766 -0.01759414673 0.04363227844
+v -0.004048006535 -0.01759414673 0.04363227844
v -0.01030576706 0.01395721436 0.03839691162
v -0.01160130501 0.01455142975 0.0244493866
v -0.009512147903 -0.01516014099 0.03742797852
@@ -1144,7 +696,7 @@
v -0.004780292511 -0.006814918518 0.0530960083
v -0.002513480186 -0.01019046783 0.05236175537
v -0.00689043045 0.01097583771 0.04896232605
-v -0.004188683033 0.007089385986 0.05293884277
+v -0.004188687801 0.007089385986 0.05293884277
v -0.01940805435 -0.0002829551697 -0.02250734329
v -0.01992650986 -0.003632011414 -0.03436201096
v -0.01854381561 0.001620845795 -0.01067434311
@@ -1160,24 +712,36 @@
v -0.008338985443 0.01238025665 0.04591362
v -0.003814001083 -0.01013877869 0.05200904846
v -0.01528470993 0.0146297574 -0.02321310043
+v -0.0000000001433734 0.01940513611 0.02496940613
+v -0.0000000001433734 0.01870769501 0.03854049683
+v -0.0000000001433734 0.01917369843 0.01170822144
+v -0.0000000001433734 0.01937185287 0.03223304749
+v -0.0000000001433734 -0.01390949249 -0.01174806595
+v -0.0000000001433734 0.01930020332 0.01729293823
+v -0.0000000001433734 -0.0185042572 0.04333106995
v -0.008084592819 0.01784603596 -0.01076587677
v -0.008388671875 0.01776367426 -0.01362880707
v -0.01393796921 0.01493583202 -0.01314624786
v -0.006178631783 -0.01407196045 0.002420463562
v -0.01632925034 0.009387569427 0.001883163452
+v -0.0000000001433734 -0.0148091507 0.002644691467
v -0.0176197052 0.001796970367 0.001553955078
v -0.01210282326 -0.01106666565 0.001315612793
v -0.007757534981 0.01806992531 0.002411308289
v -0.01321046829 0.015066185 -0.004315452576
v -0.007812199593 0.01799247265 -0.004061698914
+v -0.0000000001433734 -0.01106786728 -0.04246942043
+v -0.0000000001433734 -0.02277870178 -0.02841436386
v -0.01191295624 -0.01717159271 -0.02897335052
v -0.01453641891 -0.01429689407 -0.02952208996
v -0.01691246033 -0.00863817215 -0.02385850906
v -0.009303770065 -0.016717453 -0.02382329941
v -0.006361837387 -0.01843528748 -0.02392020226
v -0.003164381981 -0.01955047607 -0.02401075363
+v -0.0000000001433734 -0.01986217499 -0.02406014442
v -0.0121316433 -0.01453962326 -0.0237462616
v -0.01471408844 -0.01185371399 -0.02370105743
+v -0.0000000001433734 -0.02154808044 -0.02644387245
v -0.003084909916 -0.02129219055 -0.02641661167
v -0.006265830994 -0.02015094757 -0.02633747578
v -0.009150495529 -0.01835361481 -0.02635705471
@@ -1189,18 +753,22 @@
v -0.009041032791 -0.01970005035 -0.02851617813
v -0.01677595139 -0.01093166351 -0.03042486191
v -0.006564979553 -0.01504087448 -0.01811987877
+v -0.0000000001433734 -0.01606750488 -0.01839772224
v -0.003305647373 -0.01580345154 -0.01833044052
v -0.009561548233 -0.01380340576 -0.01778402328
v -0.01238915443 -0.0120265007 -0.01740667343
v -0.01498724937 -0.009695148468 -0.01713094711
+v -0.0000000001433734 -0.01455780029 -0.01471004486
v -0.006607050896 -0.01372375488 -0.01449907303
-v -0.003333623409 -0.01435302734 -0.01465143204
+v -0.003333625793 -0.01435302734 -0.01465143204
v -0.009615449905 -0.01269363403 -0.01424394608
v -0.01243695259 -0.01113130569 -0.01396986008
v -0.01500819206 -0.008967018127 -0.01378406525
v -0.01482366562 -0.008459739685 -0.00496471405
v -0.009489879608 -0.0122252655 -0.004899864197
v -0.003247098923 -0.01378753662 -0.004697608948
+v -0.0000000001433734 -0.01394943237 -0.004679965973
+v -0.0000000001433735 0.007790068388 -0.05978897095
v -0.003335931301 0.007870850563 -0.05951183319
v -0.00655687809 0.008107255697 -0.05869642258
v -0.006552457809 0.01788347602 -0.02463180542
@@ -1217,6 +785,7 @@
v -0.01644848824 0.01560250163 -0.03260541916
v -0.01456283569 0.01634403586 -0.03001671791
v -0.009548768997 0.008492670655 -0.05736125946
+v -0.0000000001433734 -0.004682922363 -0.05804605484
v -0.00900305748 -0.02161647797 -0.03224790812
v -0.005947928429 -0.02312515259 -0.03188311577
v -0.01818155289 -0.01016206741 -0.03869113684
@@ -1230,15 +799,24 @@
v -0.01359952927 -0.004802093506 -0.0524546051
v -0.01168597221 -0.004832334518 -0.05411026001
v -0.009678792953 -0.004846944809 -0.05544336319
-v -0.002636256218 -0.004737548828 -0.05785335541
+v -0.002636258602 -0.004737548828 -0.05785335541
v -0.005174036026 -0.004820194244 -0.05732728958
v -0.007514891624 -0.004849824905 -0.05651975632
v -0.002964823246 -0.0239541626 -0.03162119627
+v -0.0000000001433734 -0.02418331146 -0.0315278101
+v -0.0000000001433734 0.01869997501 -0.009121284485
+v -0.0000000001433734 0.01857287884 -0.008889846802
+v -0.0000000001433735 0.0182436347 -0.02048072815
+v -0.0000000001015446 0.01838785172 -0.02009134293
+v -0.0000000001363223 0.01877865791 0.005431251526
+v -0.0000000001433734 0.01878743172 0.005596504211
+v -0.0000000001433734 0.01855639458 -0.005539474487
+v -0.0000000001507267 0.01853947163 -0.005378608704
v -0.005297169685 0.01850355148 -0.01602500916
v -0.005597815514 0.01836355329 -0.01618457794
v -0.005798845291 0.01840591908 -0.01468524933
v -0.005487298965 0.01854391336 -0.0146062088
-v -0.001419329643 0.01869457483 -0.009311332703
+v -0.001419330835 0.01869457483 -0.009311332703
v -0.001499688625 0.01856711864 -0.009090652466
v -0.002743592262 0.01867906809 -0.009856071472
v -0.002899007797 0.01855042696 -0.009666099548
@@ -1247,38 +825,39 @@
v -0.00475209713 0.018621943 -0.0118637085
v -0.005021696091 0.01848895073 -0.0117871666
v -0.003877718449 0.01865419626 -0.01073009491
-v -0.00409753561 0.01852363825 -0.01058940887
+v -0.004097540379 0.01852363825 -0.01058940887
v -0.004752202034 0.01846587896 -0.01734874725
v -0.005021700859 0.01832435727 -0.01758333206
v -0.003877866268 0.01843362093 -0.01848243713
-v -0.004097633362 0.01829076409 -0.01878116608
+v -0.00409763813 0.01829076409 -0.01878116608
v -0.002743747234 0.01840877771 -0.01935646057
v -0.002899160385 0.01826486826 -0.01970460892
v -0.001419423819 0.01839326739 -0.01990125656
v -0.001499780416 0.01824887514 -0.02028009415
-v -0.001337810755 0.01854310036 -0.005208320618
+v -0.001337810755 0.01854309082 -0.005208320618
v -0.001378386021 0.0185598278 -0.005364112854
v -0.002683880329 0.01856976986 -0.004841918945
-v -0.002602639198 0.01855358601 -0.004703674316
-v -0.00145305872 0.01877187252 0.005220298767
+v -0.002602639198 0.01855358124 -0.004703674316
+v -0.001453059912 0.01877188683 0.005220298767
v -0.001496927738 0.01878057003 0.005379447937
-v -0.002792146206 0.01875609398 0.004642448425
+v -0.002792146206 0.01875608444 0.004642448425
v -0.002876522541 0.01876483917 0.004784584045
-v -0.00390329361 0.0187356472 0.003752632141
-v -0.004021477699 0.01874486446 0.003868179321
+v -0.00390329361 0.01873566628 0.003752670288
+v -0.004021482468 0.01874486446 0.003868179321
v -0.004736332893 0.01871091366 0.002617378235
v -0.004880046844 0.01872076511 0.002698669434
-v -0.005241103172 0.01868231297 0.001302833557
+v -0.005241103172 0.01868230343 0.001302871704
v -0.005400443077 0.01869296074 0.00134437561
-v -0.005394787788 0.01865204334 -0.0000968170166
+v -0.005394787788 0.01865203857 -0.0000968170166
v -0.005558981895 0.01866373539 -0.00009777069092
-v -0.003721504211 0.01857138157 -0.003870773315
+v -0.003721504211 0.0185713768 -0.003870773315
v -0.00383462429 0.01858662128 -0.003986320496
v -0.004747729301 0.0186089325 -0.002858810425
-v -0.004607710838 0.01859473705 -0.002776489258
-v -0.005174565315 0.0186222744 -0.001487541199
+v -0.004607710838 0.01859474659 -0.002776451111
+v -0.005174565315 0.01862226486 -0.001487503052
v -0.005332012177 0.01863523006 -0.001530799866
v -0.002802929878 0.01727819681 -0.0267317009
+v -0.0000000001433735 0.01734406233 -0.02649831772
v -0.005504851341 0.01708405972 -0.02741577148
v -0.00800886631 0.0167651701 -0.02853393555
v -0.01026145935 0.01633254051 -0.03004772186
@@ -1295,82 +874,477 @@
v -0.008003120422 0.009224057198 -0.05481050491
v -0.005510778427 0.008903326988 -0.05592103004
v -0.002807695866 0.008705437779 -0.05660298347
-v 0.000836237669 0.01856267929 0.002987174988
-v 0.0000000001256635 0.01856656551 0.003108596802
-v 0.0000000001339532 0.01842891693 -0.00311252594
-v 0.0007699114084 0.01843100071 -0.003014526367
-v 0.001497823 0.01843704224 -0.002724075317
-v 0.002141728401 0.01844728947 -0.002244720459
-v 0.001606882811 0.01855358124 0.00265460968
-v 0.002246351242 0.0185418272 0.002142562866
-v 0.002725763321 0.01852757931 0.001489181519
-v 0.003016264439 0.01851109982 0.0007326507568
-v 0.003104708195 0.0184937191 -0.00007278442383
-v 0.002977967262 0.01847657204 -0.0008731460571
-v 0.002651746273 0.01846073627 -0.001614990234
-v -0.000836237669 0.01856268406 0.002987174988
+v -0.0000000001433735 0.008637444973 -0.0568359375
+v 0.01861192703 -0.001902713776 -0.04583821297
+v 0.02009922028 0.00497502327 -0.03978626013
+v 0.02015771866 -0.0005255413055 -0.03886411428
+v 0.01849533081 -0.008797073364 -0.03574412823
+v 0.01450198174 -0.01570281982 -0.03249218941
+v 0.01529312134 0.0006716823578 -0.05202822685
+v 0.003383049965 -0.0007186317444 -0.058626194
+v 0.003250524998 -0.01746490479 -0.02120849609
+v 0.009462184906 -0.01506210327 -0.0207844162
+v 0.008941688538 -0.02107105255 -0.03105260134
+v 0.008958272934 -0.01370010376 0.008292541504
+v 0.01866044998 -0.005185050964 -0.02521764755
+v 0.0187322998 -0.006751937866 -0.03039316177
+v 0.01968776703 0.003296833038 -0.02550276756
+v 0.02018135071 0.001712779999 -0.03178162098
+v 0.01828367233 0.01057542324 -0.02611943245
+v 0.01916316986 0.004483356476 -0.01975112915
+v 0.0169666481 0.01188714504 -0.01980348587
+v 0.01853759766 0.00536031723 -0.01328187943
+v 0.01850715637 -0.003727359772 -0.01973367691
+v 0.01489053726 -0.01059671402 -0.02021486282
+v 0.0110676384 0.01669685364 -0.01336093903
+v 0.01179485321 0.01647349119 -0.01996938705
+v 0.003421940804 0.01910497665 0.02493530273
+v 0.002929959297 0.01842256546 0.03852340698
+v 0.002617607117 0.01743322372 0.04243057251
+v 0.00740278244 0.01529603958 0.04251907349
+v 0.01001948357 0.01685526848 0.007351799011
+v 0.01440463066 0.01231934547 0.008896369934
+v 0.01684453964 -0.002404651642 0.008193855286
+v 0.007576131821 -0.01105697632 0.04890815735
+v 0.01000707626 0.002206764221 0.05009963989
+v 0.0155922699 -0.003498764038 0.02354076385
+v 0.01340656281 0.0118000412 0.02425445557
+v 0.01209174156 0.01115001678 0.0383808136
+v 0.01118617058 0.01060747147 0.04278457642
+v 0.01343523026 0.003409156799 0.04290611267
+v 0.01420211792 -0.004698257446 0.037993927
+v 0.01324834824 -0.005001029968 0.04266624451
+v 0.01057765007 -0.01236122131 0.04209129333
+v 0.008291134834 -0.01571105957 0.02301105499
+v 0.007288985252 -0.01725288391 0.03730827332
+v 0.006591382027 -0.0169683075 0.04155509949
+v 0.002227847576 -0.01895336151 0.04121627808
+v 0.002915630341 -0.004485588074 0.05430908203
+v 0.002755167484 0.005470962524 0.05403205872
+v 0.001827479601 -0.01747745514 0.0452519989
+v 0.002697803974 -0.01187625885 0.05126022339
+v 0.003332741261 0.01811499715 -0.02381673813
+v 0.01086011887 0.01694013715 -0.02435003281
+v 0.005843925476 0.01858664989 0.004569816589
+v 0.006220741272 0.01848806381 -0.002428894043
+v 0.00668548584 0.01815304756 -0.01686353683
+v 0.002913024426 0.01815177679 -0.02146446228
+v 0.0113901329 0.01659568787 -0.01656726837
+v 0.01883836746 0.005012235641 -0.01638114929
+v 0.01778179169 0.005773200989 -0.004752540588
+v 0.01048612595 0.01686761379 -0.004213676453
+v 0.002953009605 -0.0236623764 -0.03075536728
+v 0.01866041183 0.002900800705 -0.04681387901
+v 0.01966588974 0.003895568848 -0.04351161957
+v 0.01961547852 -0.001542520523 -0.04248318195
+v 0.01675773621 -0.0123233223 -0.03376587629
+v 0.006447644234 -0.01654613495 -0.02103384018
+v 0.009304590225 0.00516992569 -0.05742008209
+v 0.003322043419 0.004846801758 -0.05946460724
+v 0.006092820168 -0.02268234253 -0.03082651377
+v 0.006003718376 -0.01499610901 0.008600311279
+v 0.003011322021 -0.01562877655 0.008701667786
+v 0.0187220192 -0.005982036591 -0.02790569305
+v 0.01993556976 0.002555265427 -0.02854620934
+v 0.01984664917 0.007066078186 -0.03251934052
+v 0.01936365128 0.008016166687 -0.02920764923
+v 0.01918413162 0.007280406952 -0.02574604034
+v 0.01839382172 0.008433027267 -0.01977933884
+v 0.01652114868 0.01218008995 -0.01631690979
+v 0.0176574707 0.009138641357 -0.0132075882
+v 0.01839868546 -0.003041152954 -0.01647592545
+v 0.01703763962 -0.00612947464 -0.01359912872
+v 0.01704613686 -0.007501373291 -0.02007527351
+v 0.008696689606 0.01756331563 -0.0199095726
+v 0.009337282181 0.01668298721 0.02465545654
+v 0.006611747742 0.01819932938 0.02483123779
+v 0.005122704506 0.01665222168 0.04243652344
+v 0.008170232773 0.0160766983 0.03843696594
+v 0.009899873734 0.01680588722 0.01119270325
+v 0.01583215714 0.009166164398 0.008709449768
+v 0.01674967766 0.005479240417 0.008531761169
+v 0.01408539772 -0.009203567505 0.007955284119
+v 0.008751792908 -0.008319129944 0.04952903748
+v 0.009656877518 -0.005040473938 0.04995483398
+v 0.00827755928 0.008619880676 0.04941452026
+v 0.006992149353 -0.007541503906 0.05157348633
+v 0.01289949417 -0.01078884125 0.0232906723
+v 0.01458109856 -0.007377128601 0.02339080811
+v 0.01562532425 0.0046758461 0.02389045715
+v 0.01474919319 0.008488349915 0.0240688324
+v 0.01419318199 0.008158798218 0.03149085999
+v 0.01345965385 0.007738704681 0.03835357666
+v 0.01255635262 0.007285499573 0.04288734436
+v 0.0143409729 0.00380689621 0.03828071594
+v 0.01217061043 -0.008969421387 0.0424143219
+v 0.01152200699 -0.01228206635 0.03760192871
+v 0.002849800587 -0.01796123505 0.0227999115
+v 0.005635032654 -0.01714550018 0.02285606384
+v 0.00537507534 -0.01827270508 0.03061683655
+v 0.004921731949 -0.01865844727 0.03721920013
+v 0.004432651997 -0.01821628571 0.04138160706
+v 0.002479588985 -0.01947490692 0.03713733673
+v 0.002596535683 -0.008678283691 0.05308753967
+v 0.002761027813 -0.006794662476 0.05375541687
+v 0.00293333292 0.0008138275146 0.05474868774
+v 0.002822816372 0.003366966248 0.05454116821
+v 0.004559268951 -0.01632232666 0.04560470581
+v 0.003872203827 -0.01518257141 0.04768173218
+v 0.004508719444 0.01314599991 0.04848274231
+v 0.001865065098 0.01431293488 0.04820510864
+v 0.003005940914 0.009278202057 0.05220352173
+v 0.01966083527 -0.004947834015 -0.03768414497
+v 0.01716398239 0.001319503784 -0.04952840805
+v 0.003093714714 -0.01466514587 0.002629241943
+v 0.009245948792 -0.0128685379 0.001856079102
+v 0.01958423615 -0.0009919929504 -0.02534104347
+v 0.01989952087 -0.002615299225 -0.03123426437
+v 0.01942903519 0.00393901825 -0.02259115219
+v 0.01748486519 0.01142212868 -0.02283678055
+v 0.01921937943 0.0003319549561 -0.01973161697
+v 0.0187481308 0.001346683502 -0.01335857391
+v 0.01859426498 -0.004414901733 -0.02245229721
+v 0.01173950195 0.0165370667 -0.02246456146
+v 0.00323135376 0.01906442642 0.0322077179
+v 0.00887304306 0.01658041 0.03197280884
+v 0.01019136429 0.01689266205 0.00239906311
+v 0.01810571671 0.001843547821 -0.004893722534
+v 0.01726447105 0.005721588135 0.001715888977
+v 0.01484277725 0.01251403809 0.00205581665
+v 0.01736621857 -0.002105350494 0.001397399902
+v 0.014556427 -0.008678245544 0.001178665161
+v 0.007962164879 0.001489219666 0.05225608826
+v 0.006711673737 0.007210350037 0.05153991699
+v 0.00802752018 -0.001665077209 0.05227958679
+v 0.007669672966 -0.004726905823 0.05203681946
+v 0.006098480225 -0.009954071045 0.05093521118
+v 0.01535887718 0.00008232116699 0.03118148804
+v 0.01593850136 0.0006007575989 0.02371566772
+v 0.01506277084 0.004254894257 0.03134033203
+v 0.01285533905 0.0115605545 0.03164001465
+v 0.01370512962 -0.0007701873779 0.04283454895
+v 0.01497627258 -0.004125480652 0.03100708008
+v 0.01232325554 -0.01164596558 0.03073074341
+v 0.002717366219 -0.01915142059 0.03062458038
+v 0.007913470268 -0.01676429749 0.03062320709
+v 0.00299488306 -0.001899871826 0.05466720581
+v 0.00314589262 -0.01364509583 0.04966293335
+v 0.001521962881 0.01240791321 0.05026931763
+v 0.01471954346 0.006150994301 -0.0530858326
+v 0.01833827972 0.007731947899 -0.04735969543
+v 0.01956430435 0.009696025848 -0.04073404312
+v 0.02011144638 0.006058683395 -0.03600113869
+v 0.02030925751 0.0007067298889 -0.03521795988
+v 0.01866231918 -0.007622909546 -0.03292656422
+v 0.01184627533 -0.01861394882 -0.03165155172
+v 0.01166866302 -0.0004309654236 -0.05517032623
+v 0.009213008881 -0.0006571102142 -0.05659393311
+v 0.01581858635 0.01249886513 -0.01035293579
+v 0.01828184128 0.005593166351 -0.01057157516
+v 0.01813819885 -0.002294101715 -0.01078279495
+v 0.0149848175 -0.008623180389 -0.01108886719
+v 0.01082362175 0.01677319527 -0.010508461
+v 0.003330833912 -0.01373134613 -0.01170679092
+v 0.009616174698 -0.01221893311 -0.01144340515
+v 0.01228888512 -0.01311098099 -0.0204738903
+v 0.01889995575 0.01179102421 -0.03397530556
+v 0.01651416779 0.01404056072 -0.02757482529
+v 0.01479566574 0.01463691711 -0.01985599518
+v 0.01393066406 0.01203969955 0.0165940094
+v 0.016186409 0.005088653564 0.01622177124
+v 0.01621448517 -0.002922477722 0.0158770752
+v 0.01345574379 -0.009984817505 0.01562911987
+v 0.009697351456 0.01673344612 0.01698875427
+v 0.00353228569 0.01902677536 0.01725749969
+v 0.002933821678 -0.01666046143 0.01474433899
+v 0.008595881462 -0.01466907501 0.01516304016
+v 0.01170786858 -0.01176212311 0.008002700806
+v 0.0111749649 -0.01268341064 0.01547328949
+v 0.01363612175 0.01501978874 -0.01033246994
+v 0.009979877472 0.009842948914 0.04620933533
+v 0.01209338188 0.002922935486 0.04659957886
+v 0.01183568954 -0.005127105713 0.04641479492
+v 0.00932138443 -0.01198387146 0.04560272217
+v 0.002267978191 0.01614032745 0.04538131714
+v 0.002031705379 -0.01827644348 0.04342781067
+v 0.006033496857 -0.01645874023 0.04385925293
+v 0.009432411194 0.01330200195 0.04264587402
+v 0.008655796051 -0.01506477356 0.0417780304
+v 0.004673705101 0.005515632629 0.05334106445
+v 0.00534658432 0.0008012771606 0.05389724731
+v 0.005176172256 -0.004468688965 0.05356796265
+v 0.004319829941 -0.008775367737 0.05251152039
+v 0.002764856815 0.007209835052 0.05334388733
+v 0.005020713806 -0.01187427521 0.05029510498
+v 0.00619263649 -0.01320037842 0.04828140259
+v 0.007588787079 -0.0144392395 0.04512733459
+v 0.0120420742 0.005620877743 -0.05572500229
+v 0.01371296883 0.01597628832 -0.02573312759
+v 0.0192240715 0.008701443672 -0.04422941685
+v 0.01943193436 0.01072333813 -0.03720539093
+v 0.017937603 0.01289735317 -0.0308347702
+v 0.003317241669 0.01895071983 0.01165065765
+v 0.007521572113 0.01808717728 0.007028236389
+v 0.003560497761 0.0187733078 0.00800201416
+v 0.006122536659 0.01832526207 -0.01098957062
+v 0.005716686249 0.01806764007 -0.02016317368
+v 0.008555765152 0.01766724825 -0.01678182602
+v 0.01433109283 0.01480958939 -0.01636417389
+v 0.01826732635 -0.002594127655 -0.01344463348
+v 0.01612941742 0.01237344742 -0.0131287384
+v 0.006431093216 -0.01323490143 -0.004765777588
+v 0.01684915543 0.009445924759 -0.00460647583
+v 0.01232099533 -0.01066608429 -0.00499956131
+v 0.006399674416 0.01853952408 0.0007802963257
+v 0.0153284359 0.01256793022 -0.004453582764
+v 0.01780033112 -0.002049369812 -0.005031967163
+v 0.005325174332 0.01838591576 -0.008203430176
+v 0.00795771122 0.01766728878 -0.02227460861
+v 0.01685430527 0.006858239174 -0.05026508331
+v 0.006771297455 0.0182434535 -0.01380584717
+v 0.005470218658 0.01843399525 -0.005117034912
+v 0.006438932419 0.004981436729 -0.0586841774
+v 0.01800775528 0.008862533569 -0.01634828568
+v 0.01707290649 -0.006706733704 -0.01684476852
+v 0.005705008507 0.0175510025 0.03848457336
+v 0.006762552261 0.01829377174 0.01090549469
+v 0.01674477577 -0.005586662292 -0.005071983337
+v 0.01587094307 -0.006069450378 0.008051834106
+v 0.009364900589 0.005659141541 0.04983657837
+v 0.01314364433 -0.008750762939 0.03780044556
+v 0.0197403717 -0.001775875092 -0.02824567795
+v 0.01875297546 0.007942380905 -0.02270151138
+v 0.01897974014 0.0009405517578 -0.01642166138
+v 0.006257452965 0.01813601494 0.03212371826
+v 0.01710464478 0.00153137207 0.008360710144
+v 0.01638484955 -0.005694179535 0.0012657547
+v 0.01012932777 -0.001454124451 0.05015518188
+v 0.00751106739 0.004519767761 0.05199867249
+v 0.01462527275 -0.0004154205322 0.03816116333
+v 0.01395204544 -0.00811832428 0.03084686279
+v 0.00369562149 0.01137563705 0.05053390503
+v 0.006345362663 -0.0007320022583 -0.05783893585
+v 0.01736812592 0.009320106506 -0.01046695709
+v 0.01698059082 -0.005830535889 -0.01097387314
+v 0.006568012238 -0.01317508698 -0.01160043716
+v 0.0152948761 0.008828315735 0.01640247345
+v 0.01521123886 -0.006691703796 0.01573040009
+v 0.006839694977 0.01818001747 0.01715484619
+v 0.005816245079 -0.01598155975 0.01486461639
+v 0.01245211601 0.01489030838 0.009086074829
+v 0.01127656937 0.006668624878 0.04646240234
+v 0.01078982353 -0.008850631714 0.04607955933
+v 0.005473484993 0.01482650757 0.04555236816
+v 0.004048001766 -0.01759414673 0.04363227844
+v 0.01030576706 0.01395721436 0.03839691162
+v 0.01160130501 0.01455142975 0.0244493866
+v 0.009512147903 -0.01516014099 0.03742797852
+v 0.01073899269 -0.01360858917 0.02318313599
+v 0.005081777573 0.003345298767 0.05371505737
+v 0.004780292511 -0.006814918518 0.0530960083
+v 0.002513480186 -0.01019046783 0.05236175537
+v 0.00689043045 0.01097583771 0.04896232605
+v 0.004188683033 0.007089385986 0.05293884277
+v 0.01940805435 -0.0002829551697 -0.02250734329
+v 0.01992650986 -0.003632011414 -0.03436201096
+v 0.01854381561 0.001620845795 -0.01067434311
+v 0.01652101517 0.001083965302 0.01604793549
+v 0.01279887199 0.01503705025 0.002229270935
+v 0.01231739998 -0.001105270386 0.04659301758
+v 0.01107378006 0.01439086914 0.03179740906
+v 0.01025528908 -0.01457305908 0.03065681458
+v 0.005400567055 -0.001881637573 0.05385818481
+v 0.005644745827 0.009391918182 0.051040802
+v 0.01243561745 -0.01074193954 -0.01126468658
+v 0.01207206726 0.01468675613 0.01679111481
+v 0.008338985443 0.01238025665 0.04591362
+v 0.003814001083 -0.01013877869 0.05200904846
+v 0.01528470993 0.0146297574 -0.02321310043
+v 0.008084592819 0.01784603596 -0.01076587677
+v 0.008388671875 0.01776367426 -0.01362880707
+v 0.01393796921 0.01493583202 -0.01314624786
+v 0.006178631783 -0.01407196045 0.002420463562
+v 0.01632925034 0.009387569427 0.001883163452
+v 0.0176197052 0.001796970367 0.001553955078
+v 0.01210282326 -0.01106666565 0.001315612793
+v 0.007757534981 0.01806992531 0.002411308289
+v 0.01321046829 0.015066185 -0.004315452576
+v 0.007812199593 0.01799247265 -0.004061698914
+v 0.01191295624 -0.01717159271 -0.02897335052
+v 0.01453641891 -0.01429689407 -0.02952208996
+v 0.01691246033 -0.00863817215 -0.02385850906
+v 0.009303770065 -0.016717453 -0.02382329941
+v 0.006361837387 -0.01843528748 -0.02392020226
+v 0.003164381981 -0.01955047607 -0.02401075363
+v 0.0121316433 -0.01453962326 -0.0237462616
+v 0.01471408844 -0.01185371399 -0.02370105743
+v 0.003084909916 -0.02129219055 -0.02641661167
+v 0.006265830994 -0.02015094757 -0.02633747578
+v 0.009150495529 -0.01835361481 -0.02635705471
+v 0.01199382782 -0.01594022751 -0.02663830757
+v 0.01458203316 -0.01314870834 -0.02691740513
+v 0.01679833412 -0.009841747284 -0.02748530388
+v 0.003020849228 -0.02254852295 -0.02842387438
+v 0.006185688972 -0.02145698547 -0.02840367794
+v 0.009041032791 -0.01970005035 -0.02851617813
+v 0.01677595139 -0.01093166351 -0.03042486191
+v 0.006564979553 -0.01504087448 -0.01811987877
+v 0.003305647373 -0.01580345154 -0.01833044052
+v 0.009561548233 -0.01380340576 -0.01778402328
+v 0.01238915443 -0.0120265007 -0.01740667343
+v 0.01498724937 -0.009695148468 -0.01713094711
+v 0.006607050896 -0.01372375488 -0.01449907303
+v 0.003333623409 -0.01435302734 -0.01465143204
+v 0.009615449905 -0.01269363403 -0.01424394608
+v 0.01243695259 -0.01113130569 -0.01396986008
+v 0.01500819206 -0.008967018127 -0.01378406525
+v 0.01482366562 -0.008459739685 -0.00496471405
+v 0.009489879608 -0.0122252655 -0.004899864197
+v 0.003247098923 -0.01378753662 -0.004697608948
+v 0.003335931301 0.007870850563 -0.05951183319
+v 0.00655687809 0.008107255697 -0.05869642258
+v 0.006552457809 0.01788347602 -0.02463180542
+v 0.009546175003 0.01750216246 -0.02596826553
+v 0.01224053383 0.0169843483 -0.02777951241
+v 0.01458784103 0.009696542025 -0.05317952156
+v 0.01648718834 0.01046019793 -0.05052354813
+v 0.01224665642 0.009023754597 -0.05551772118
+v 0.01786008835 0.0112633121 -0.04772870064
+v 0.0186907196 0.01210969329 -0.04478170395
+v 0.01896757126 0.01300299644 -0.04166976929
+v 0.01868421555 0.0139059031 -0.03852291584
+v 0.01783315659 0.01478104353 -0.03547131062
+v 0.01644848824 0.01560250163 -0.03260541916
+v 0.01456283569 0.01634403586 -0.03001671791
+v 0.009548768997 0.008492670655 -0.05736125946
+v 0.00900305748 -0.02161647797 -0.03224790812
+v 0.005947928429 -0.02312515259 -0.03188311577
+v 0.01818155289 -0.01016206741 -0.03869113684
+v 0.01882295609 -0.007381076813 -0.04166667461
+v 0.01671805382 -0.01347892761 -0.03615076542
+v 0.01456053734 -0.01663673401 -0.03428458929
+v 0.0119148922 -0.01934707642 -0.03298680782
+v 0.01837177277 -0.005752849579 -0.04486113548
+v 0.01712789536 -0.004973888397 -0.04790185928
+v 0.01547107697 -0.004753217697 -0.05040895462
+v 0.01359952927 -0.004802093506 -0.0524546051
+v 0.01168597221 -0.004832334518 -0.05411026001
+v 0.009678792953 -0.004846944809 -0.05544336319
+v 0.002636256218 -0.004737548828 -0.05785335541
+v 0.005174036026 -0.004820194244 -0.05732728958
+v 0.007514891624 -0.004849824905 -0.05651975632
+v 0.002964823246 -0.0239541626 -0.03162119627
+v 0.005297169685 0.01850355148 -0.01602500916
+v 0.005597815514 0.01836355329 -0.01618457794
+v 0.005798845291 0.01840591908 -0.01468524933
+v 0.005487298965 0.01854391336 -0.0146062088
+v 0.001419329643 0.01869457483 -0.009311332703
+v 0.001499688625 0.01856711864 -0.009090652466
+v 0.002743592262 0.01867906809 -0.009856071472
+v 0.002899007797 0.01855042696 -0.009666099548
+v 0.005297117233 0.01858428001 -0.01318744659
+v 0.005597801208 0.01844873905 -0.01318593979
+v 0.00475209713 0.018621943 -0.0118637085
+v 0.005021696091 0.01848895073 -0.0117871666
+v 0.003877718449 0.01865419626 -0.01073009491
+v 0.00409753561 0.01852363825 -0.01058940887
+v 0.004752202034 0.01846587896 -0.01734874725
+v 0.005021700859 0.01832435727 -0.01758333206
+v 0.003877866268 0.01843362093 -0.01848243713
+v 0.004097633362 0.01829076409 -0.01878116608
+v 0.002743747234 0.01840877771 -0.01935646057
+v 0.002899160385 0.01826486826 -0.01970460892
+v 0.001419423819 0.01839326739 -0.01990125656
+v 0.001499780416 0.01824887514 -0.02028009415
+v 0.001337810755 0.01854310036 -0.005208320618
+v 0.001378386021 0.0185598278 -0.005364112854
+v 0.002683880329 0.01856976986 -0.004841918945
+v 0.002602639198 0.01855358601 -0.004703674316
+v 0.00145305872 0.01877187252 0.005220298767
+v 0.001496927738 0.01878057003 0.005379447937
+v 0.002792146206 0.01875609398 0.004642448425
+v 0.002876522541 0.01876483917 0.004784584045
+v 0.00390329361 0.0187356472 0.003752632141
+v 0.004021477699 0.01874486446 0.003868179321
+v 0.004736332893 0.01871091366 0.002617378235
+v 0.004880046844 0.01872076511 0.002698669434
+v 0.005241103172 0.01868231297 0.001302833557
+v 0.005400443077 0.01869296074 0.00134437561
+v 0.005394787788 0.01865204334 -0.0000968170166
+v 0.005558981895 0.01866373539 -0.00009777069092
+v 0.003721504211 0.01857138157 -0.003870773315
+v 0.00383462429 0.01858662128 -0.003986320496
+v 0.004747729301 0.0186089325 -0.002858810425
+v 0.004607710838 0.01859473705 -0.002776489258
+v 0.005174565315 0.0186222744 -0.001487541199
+v 0.005332012177 0.01863523006 -0.001530799866
+v 0.002802929878 0.01727819681 -0.0267317009
+v 0.005504851341 0.01708405972 -0.02741577148
+v 0.00800886631 0.0167651701 -0.02853393555
+v 0.01026145935 0.01633254051 -0.03004772186
+v 0.01220532417 0.01579721689 -0.0319185257
+v 0.01378511429 0.01517710924 -0.03408369064
+v 0.01494659424 0.01448992014 -0.03648144722
+v 0.01566098213 0.01375769854 -0.03903482199
+v 0.0158995533 0.01300244093 -0.041667099
+v 0.0156671524 0.01225725532 -0.04426301003
+v 0.01497053146 0.01155372858 -0.04671244621
+v 0.01381503105 0.01088054419 -0.04905488491
+v 0.01220849991 0.01023335934 -0.05130551338
+v 0.01024475098 0.009666233063 -0.05327604294
+v 0.008003120422 0.009224057198 -0.05481050491
+v 0.005510778427 0.008903326988 -0.05592103004
+v 0.002807695866 0.008705437779 -0.05660298347
+v -0.000836237669 0.01856267929 0.002987174988
+v -0.0000000001256635 0.01856656551 0.003108596802
+v -0.0000000001339532 0.01842891693 -0.00311252594
v -0.0007699114084 0.01843100071 -0.003014526367
v -0.001497823 0.01843704224 -0.002724075317
-v -0.002141730785 0.01844727516 -0.002244758606
-v -0.001606882811 0.01855358601 0.00265460968
-v -0.002246351242 0.0185418129 0.002142562866
+v -0.002141728401 0.01844728947 -0.002244720459
+v -0.001606882811 0.01855358124 0.00265460968
+v -0.002246351242 0.0185418272 0.002142562866
v -0.002725763321 0.01852757931 0.001489181519
-v -0.003016262054 0.01851110458 0.0007326507568
+v -0.003016264439 0.01851109982 0.0007326507568
v -0.003104708195 0.0184937191 -0.00007278442383
-v -0.002977967262 0.01847658157 -0.0008731460571
-v -0.002651746273 0.0184607172 -0.001614990234
-v 0 0.01836100101 0
-v -0.002785310745 0.01878082514 -0.01734378815
-v -0.001019515991 0.01875183105 -0.01836288452
-v -0.003804695606 0.01888901711 -0.01354064941
-v -0.001019448638 0.0189682436 -0.01075660706
-v -0.003804733753 0.01883104086 -0.0155787468
-v -0.002785205841 0.01893925428 -0.01177562714
-v 0.002785313129 0.01878082395 -0.01734378815
+v -0.002977967262 0.01847657204 -0.0008731460571
+v -0.002651746273 0.01846073627 -0.001614990234
+v 0.000836237669 0.01856268406 0.002987174988
+v 0.0007699114084 0.01843100071 -0.003014526367
+v 0.001497823 0.01843704224 -0.002724075317
+v 0.002141730785 0.01844727516 -0.002244758606
+v 0.001606882811 0.01855358601 0.00265460968
+v 0.002246351242 0.0185418129 0.002142562866
+v 0.002725763321 0.01852757931 0.001489181519
+v 0.003016262054 0.01851110458 0.0007326507568
+v 0.003104708195 0.0184937191 -0.00007278442383
+v 0.002977967262 0.01847658157 -0.0008731460571
+v 0.002651746273 0.0184607172 -0.001614990234
+v -0 0.01836100101 0
+v 0.002785310745 0.01878082514 -0.01734378815
v 0.001019515991 0.01875183105 -0.01836288452
v 0.003804695606 0.01888901711 -0.01354064941
-v 0.001019448638 0.01896824598 -0.01075662613
+v 0.001019448638 0.0189682436 -0.01075660706
v 0.003804733753 0.01883104086 -0.0155787468
v 0.002785205841 0.01893925428 -0.01177562714
-v 0.0000000001420652 0.0189535749 -0.01450710297
-v -0.001970722675 0.01876296997 -0.01797157288
-v -0.003413307667 0.01880398989 -0.01652952194
-v -0.003413231373 0.01891608238 -0.01258987427
-v 0.0000000001433735 0.01874794364 -0.01849941254
-v -0.003941295147 0.01886002779 -0.01455968857
-v -0.001970611811 0.01895709276 -0.01114789963
-v 0.0000000001433735 0.01897212982 -0.01062009811
+v -0.002785313129 0.01878082395 -0.01734378815
+v -0.001019515991 0.01875183105 -0.01836288452
+v -0.003804695606 0.01888901711 -0.01354064941
+v -0.001019448638 0.01896824598 -0.01075662613
+v -0.003804733753 0.01883104086 -0.0155787468
+v -0.002785205841 0.01893925428 -0.01177562714
+v -0.0000000001420652 0.0189535749 -0.01450710297
v 0.001970722675 0.01876296997 -0.01797157288
v 0.003413307667 0.01880398989 -0.01652952194
v 0.003413231373 0.01891608238 -0.01258987427
-v 0.003941297531 0.01886002779 -0.01455968857
+v -0.0000000001433735 0.01874794364 -0.01849941254
+v 0.003941295147 0.01886002779 -0.01455968857
v 0.001970611811 0.01895709276 -0.01114789963
-v 0.005090799332 -0.0031638515 -0.09102218628
-v 0.005090799332 -0.003290081024 -0.04519328117
-v 0.006775240898 -0.002417654991 -0.09103355408
-v 0.006775240898 -0.002543888092 -0.04520469666
-v 0.005090799332 0.003230867386 -0.04532710075
-v 0.005090799332 0.003153755665 -0.09109947205
-v 0.006775240898 0.002484674454 -0.04531576157
-v 0.006775240898 0.002407557964 -0.09108810425
-v 0.007252621651 0.00002613067627 -0.0452248764
-v 0.007252621651 0.0001523661613 -0.09105373383
-v 0.0000000001433734 0.003442344666 -0.0453303051
-v 0.0000000001433735 0.00336523056 -0.09110275269
-v 0.0000000001433735 -0.003375328779 -0.09101902008
-v 0.0000000001433734 -0.003501558304 -0.04519007683
-v 0.003214569092 -0.003322458267 -0.09101974487
-v 0.007133274078 -0.001586495638 -0.09104621887
-v 0.006115441322 -0.002871562243 -0.09102668762
-v 0.007133274078 0.001576397419 -0.09107540131
-v 0.003214569092 0.00331236124 -0.0911019516
-v 0.006115441322 0.002861468792 -0.09109500885
-v 0.007133274078 -0.001712722778 -0.04521737099
-v 0.003214569092 -0.0034486866 -0.04519089699
-v 0.006115441322 -0.00299779892 -0.04519776344
-v 0.003214569092 0.003389472961 -0.04532952309
-v 0.007133274078 0.00165350914 -0.04530308723
-v 0.006115441322 0.002938585281 -0.04532265663
+v -0.0000000001433735 0.01897212982 -0.01062009811
+v -0.001970722675 0.01876296997 -0.01797157288
+v -0.003413307667 0.01880398989 -0.01652952194
+v -0.003413231373 0.01891608238 -0.01258987427
+v -0.003941297531 0.01886002779 -0.01455968857
+v -0.001970611811 0.01895709276 -0.01114789963
v -0.005090799332 -0.0031638515 -0.09102218628
v -0.005090799332 -0.003290081024 -0.04519328117
v -0.006775240898 -0.002417654991 -0.09103355408
@@ -1381,6 +1355,10 @@
v -0.006775240898 0.002407557964 -0.09108810425
v -0.007252621651 0.00002613067627 -0.0452248764
v -0.007252621651 0.0001523661613 -0.09105373383
+v -0.0000000001433734 0.003442344666 -0.0453303051
+v -0.0000000001433735 0.00336523056 -0.09110275269
+v -0.0000000001433735 -0.003375328779 -0.09101902008
+v -0.0000000001433734 -0.003501558304 -0.04519007683
v -0.003214569092 -0.003322458267 -0.09101974487
v -0.007133274078 -0.001586495638 -0.09104621887
v -0.006115441322 -0.002871562243 -0.09102668762
@@ -1393,212 +1371,134 @@
v -0.003214569092 0.003389472961 -0.04532952309
v -0.007133274078 0.00165350914 -0.04530308723
v -0.006115441322 0.002938585281 -0.04532265663
-v -0.003960726261 0.009032211304 -0.0740007019
-v -0.01112482071 0.00796397686 -0.07665977478
-v -0.003660502434 0.0151436615 -0.07870132446
-v -0.01014760971 0.0136570549 -0.08035648346
-v -0.003960726261 0.0014128232 -0.0718340683
-v -0.003660502434 -0.006257553101 -0.07261573792
-v -0.01112482071 0.0009221339226 -0.07465736389
-v -0.01014760971 -0.005864276886 -0.07480552673
-v -0.01927591324 -0.002776091099 -0.08656520844
-v -0.01642609596 -0.0005278372765 -0.07975646973
-v -0.01642609596 -0.009749116898 -0.08489456177
-v -0.01442741394 -0.007034854889 -0.07892211914
-v -0.01927591324 0.004843297005 -0.08873188019
-v -0.01642609596 0.0116520977 -0.09098014832
-v -0.01642609596 0.006514005661 -0.08175891876
-v -0.01442741394 0.01248646736 -0.08447307587
-v -0.01927591324 0.002676672935 -0.09635131836
-v -0.01642609596 0.0004284191132 -0.1031601334
-v -0.01642609596 0.00964969635 -0.09802200317
-v -0.01442741394 0.006935434341 -0.1039944077
-v -0.01927591324 -0.004942719936 -0.09418464661
-v -0.01642609596 -0.01175151825 -0.09193637848
-v -0.01642609596 -0.00661342144 -0.1011576843
-v -0.01442741394 -0.01258588314 -0.09844341278
-v -0.003960726261 -0.009131627083 -0.108915863
-v -0.01112482071 -0.008063392639 -0.106256752
-v -0.003660502434 -0.01524308205 -0.1042152405
-v -0.01014760971 -0.01375647545 -0.1025600052
-v -0.003960726261 -0.001512241364 -0.1110824585
-v -0.003660502434 0.00615814209 -0.1103007889
-v -0.01112482071 -0.001021552086 -0.1082591629
-v -0.01014760971 0.005764856339 -0.1081110382
-v -0.003960726261 -0.017507267 -0.08237632751
-v -0.01112482071 -0.01484824181 -0.08344455719
-v -0.003660502434 -0.01280665398 -0.07626483917
-v -0.01014760971 -0.01115146637 -0.07775157928
-v -0.003960726261 -0.0196739006 -0.08999576569
-v -0.003660502434 -0.01889222145 -0.09766609192
-v -0.01112482071 -0.01685065269 -0.09048648834
-v -0.01014760971 -0.01670248985 -0.09727291107
-v -0.003960726261 0.01957448959 -0.0929208374
-v -0.003660502434 0.01879281998 -0.08525043488
-v -0.01112482071 0.01675122261 -0.09243011475
-v -0.01014760971 0.01660307884 -0.08564369202
-v -0.003960726261 0.01740785599 -0.1005401993
-v -0.01112482071 0.01474882126 -0.0994719696
-v -0.003660502434 0.01270723343 -0.1066516495
-v -0.01014760971 0.01105204582 -0.105165062
+v 0.005090799332 -0.0031638515 -0.09102218628
+v 0.005090799332 -0.003290081024 -0.04519328117
+v 0.006775240898 -0.002417654991 -0.09103355408
+v 0.006775240898 -0.002543888092 -0.04520469666
+v 0.005090799332 0.003230867386 -0.04532710075
+v 0.005090799332 0.003153755665 -0.09109947205
+v 0.006775240898 0.002484674454 -0.04531576157
+v 0.006775240898 0.002407557964 -0.09108810425
+v 0.007252621651 0.00002613067627 -0.0452248764
+v 0.007252621651 0.0001523661613 -0.09105373383
+v 0.003214569092 -0.003322458267 -0.09101974487
+v 0.007133274078 -0.001586495638 -0.09104621887
+v 0.006115441322 -0.002871562243 -0.09102668762
+v 0.007133274078 0.001576397419 -0.09107540131
+v 0.003214569092 0.00331236124 -0.0911019516
+v 0.006115441322 0.002861468792 -0.09109500885
+v 0.007133274078 -0.001712722778 -0.04521737099
+v 0.003214569092 -0.0034486866 -0.04519089699
+v 0.006115441322 -0.00299779892 -0.04519776344
+v 0.003214569092 0.003389472961 -0.04532952309
+v 0.007133274078 0.00165350914 -0.04530308723
+v 0.006115441322 0.002938585281 -0.04532265663
v 0.003960726261 0.009032211304 -0.0740007019
v 0.01112482071 0.00796397686 -0.07665977478
-v 0.003660504818 0.0151436615 -0.07870132446
+v 0.003660502434 0.0151436615 -0.07870132446
v 0.01014760971 0.0136570549 -0.08035648346
v 0.003960726261 0.0014128232 -0.0718340683
-v 0.003660504818 -0.006257553101 -0.07261573792
+v 0.003660502434 -0.006257553101 -0.07261573792
v 0.01112482071 0.0009221339226 -0.07465736389
v 0.01014760971 -0.005864276886 -0.07480552673
v 0.01927591324 -0.002776091099 -0.08656520844
-v 0.01642609596 -0.0005278372765 -0.07975650787
-v 0.01642609596 -0.009749116898 -0.08489459991
+v 0.01642609596 -0.0005278372765 -0.07975646973
+v 0.01642609596 -0.009749116898 -0.08489456177
v 0.01442741394 -0.007034854889 -0.07892211914
v 0.01927591324 0.004843297005 -0.08873188019
-v 0.01642609596 0.0116520977 -0.09098018646
-v 0.01642609596 0.006514005661 -0.08175888062
+v 0.01642609596 0.0116520977 -0.09098014832
+v 0.01642609596 0.006514005661 -0.08175891876
v 0.01442741394 0.01248646736 -0.08447307587
v 0.01927591324 0.002676672935 -0.09635131836
-v 0.01642609596 0.0004284191132 -0.1031600952
-v 0.01642609596 0.009649705887 -0.09802196503
-v 0.01442741394 0.006935443878 -0.1039944458
+v 0.01642609596 0.0004284191132 -0.1031601334
+v 0.01642609596 0.00964969635 -0.09802200317
+v 0.01442741394 0.006935434341 -0.1039944077
v 0.01927591324 -0.004942719936 -0.09418464661
v 0.01642609596 -0.01175151825 -0.09193637848
-v 0.01642609596 -0.006613419056 -0.1011577225
-v 0.01442741394 -0.01258589268 -0.09844345093
+v 0.01642609596 -0.00661342144 -0.1011576843
+v 0.01442741394 -0.01258588314 -0.09844341278
v 0.003960726261 -0.009131627083 -0.108915863
v 0.01112482071 -0.008063392639 -0.106256752
-v 0.003660504818 -0.01524308205 -0.1042152405
+v 0.003660502434 -0.01524308205 -0.1042152405
v 0.01014760971 -0.01375647545 -0.1025600052
v 0.003960726261 -0.001512241364 -0.1110824585
-v 0.003660504818 0.006158132553 -0.110300827
+v 0.003660502434 0.00615814209 -0.1103007889
v 0.01112482071 -0.001021552086 -0.1082591629
v 0.01014760971 0.005764856339 -0.1081110382
v 0.003960726261 -0.017507267 -0.08237632751
-v 0.01112482071 -0.01484824181 -0.08344459534
-v 0.003660504818 -0.01280665398 -0.07626487732
+v 0.01112482071 -0.01484824181 -0.08344455719
+v 0.003660502434 -0.01280665398 -0.07626483917
v 0.01014760971 -0.01115146637 -0.07775157928
v 0.003960726261 -0.0196739006 -0.08999576569
-v 0.003660504818 -0.01889224052 -0.09766613007
-v 0.01112482071 -0.01685064316 -0.0904864502
-v 0.01014760971 -0.01670249939 -0.09727287292
+v 0.003660502434 -0.01889222145 -0.09766609192
+v 0.01112482071 -0.01685065269 -0.09048648834
+v 0.01014760971 -0.01670248985 -0.09727291107
v 0.003960726261 0.01957448959 -0.0929208374
-v 0.003660504818 0.01879281044 -0.08525047302
-v 0.01112482071 0.01675123215 -0.09243015289
+v 0.003660502434 0.01879281998 -0.08525043488
+v 0.01112482071 0.01675122261 -0.09243011475
v 0.01014760971 0.01660307884 -0.08564369202
v 0.003960726261 0.01740785599 -0.1005401993
-v 0.01112482071 0.01474882126 -0.09947193146
-v 0.003660504818 0.01270723343 -0.1066516876
-v 0.01014760971 0.01105204582 -0.1051650238
-v 0.0000000001433735 0.009204678535 -0.07365894318
-v 0.0000000001433735 0.01539099693 -0.07848808289
-v -0.004033124447 0.005325350761 -0.07255577087
-v -0.01130440712 0.004517652988 -0.07539619446
-v -0.007732110023 0.008592686653 -0.07500724792
-v -0.003813269138 0.01236209869 -0.07607913971
-v -0.007112531662 0.01452467918 -0.0793283844
-v -0.01070094109 0.01107311249 -0.07834682465
-v 0.0000000001433735 0.001446011066 -0.07145259857
-v 0.0000000001433734 -0.006355695724 -0.07230426788
-v -0.003813269138 -0.00251244545 -0.07184940338
-v -0.007732110023 0.001256964207 -0.07292125702
-v -0.01070094109 -0.002609524727 -0.07445610046
-v -0.007112531662 -0.006061105728 -0.07347465515
-v -0.01965187073 0.001053406596 -0.08757892609
-v -0.01669882774 0.003042201996 -0.08058498383
-v -0.01818750381 -0.001602730751 -0.08297801971
-v -0.01818750381 -0.006444001198 -0.08567554474
-v -0.01565368652 -0.008397226334 -0.08169013977
-v -0.01565368652 -0.00396417141 -0.079220047
-v -0.01965187073 0.003829627037 -0.09256137848
-v -0.01669882774 0.01082363129 -0.09455020905
-v -0.01818750381 0.008430547714 -0.08990520477
-v -0.01818750381 0.00573299408 -0.08506404877
-v -0.01565368652 0.009718465805 -0.08311077118
-v -0.01565368652 0.01218855858 -0.08754375458
-v -0.01965187073 -0.001152825356 -0.09533760071
-v -0.01669882774 -0.003141620159 -0.1023316574
-v -0.01818750381 0.001503314972 -0.09993850708
-v -0.01818750381 0.006344585419 -0.09724094391
-v -0.01565368652 0.008297796249 -0.1012264252
-v -0.01565368652 0.00386475563 -0.1036964798
-v -0.01965187073 -0.0039290452 -0.09035514832
-v -0.01669882774 -0.01092305183 -0.08836639404
-v -0.01818750381 -0.008529968262 -0.09301132202
-v -0.01818750381 -0.005832407475 -0.09785259247
-v -0.01565368652 -0.009817876816 -0.09980583191
-v -0.01565368652 -0.01228797913 -0.09537281036
-v -0.004033124447 -0.005424768925 -0.1103607941
-v -0.01130440712 -0.004617071152 -0.1075203323
-v -0.007732110023 -0.008692097664 -0.1079092026
-v -0.003813269138 -0.0124615097 -0.1068373871
-v -0.007112531662 -0.01462409973 -0.1035881424
-v -0.01070094109 -0.01117251873 -0.1045697021
-v 0.0000000001433735 -0.00154542923 -0.1114638901
-v 0.0000000001433735 0.006256275177 -0.1106122589
-v -0.003813269138 0.002413034439 -0.1110671234
-v -0.007732110023 -0.001356377602 -0.1099952316
-v -0.01070094109 0.002510108948 -0.1084604263
-v -0.007112531662 0.005961675644 -0.1094419479
-v 0.0000000001433734 -0.00930410862 -0.1092576981
-v 0.0000000001433734 -0.01549041748 -0.1044284821
-v 0.0000000001433734 -0.01784910202 -0.0822039032
-v 0.0000000001433734 -0.01301986694 -0.07601753235
-v -0.004033124447 -0.0189522171 -0.08608322144
-v -0.01130440712 -0.01611179352 -0.08689094543
-v -0.007732110023 -0.0165007019 -0.08281581879
-v -0.003813269138 -0.01542882919 -0.07904647827
-v -0.007112531662 -0.01217963219 -0.07688388824
-v -0.01070094109 -0.01316111565 -0.08033542633
-v 0.0000000001433734 -0.02005533218 -0.08996257782
-v 0.0000000001433734 -0.01920370102 -0.09776424408
-v -0.003813269138 -0.01965853691 -0.09392105103
-v -0.007732110023 -0.01858667374 -0.09015155792
-v -0.01070094109 -0.01705187798 -0.09401809692
-v -0.007112531662 -0.01803334236 -0.09746963501
-v 0.0000000001433735 0.0199559021 -0.09295402527
-v 0.0000000001433735 0.01910428047 -0.08515228271
-v -0.003813269138 0.01955909729 -0.08899551392
-v -0.007732110023 0.01848724365 -0.09276493073
-v -0.01070094109 0.01695244789 -0.08889846802
-v -0.007112531662 0.01793391228 -0.08544685364
-v 0.0000000001433735 0.01774967194 -0.1007126236
-v 0.0000000001433735 0.01292045593 -0.1068989944
-v -0.004033124447 0.01885278702 -0.09683330536
-v -0.01130440712 0.01601236343 -0.09602561951
-v -0.007732110023 0.01640127182 -0.100100708
-v -0.003813269138 0.01532943726 -0.1038700867
-v -0.007112531662 0.01208022118 -0.1060326385
-v -0.01070094109 0.0130616951 -0.1025811005
-v -0.009838590622 -0.008744220734 -0.0758543396
-v -0.003582792282 -0.009722337723 -0.07409893036
-v -0.003582792282 0.01730964661 -0.08178569794
-v -0.009838590622 0.01555422783 -0.08276374817
-v -0.01263086319 0.012868433 -0.08200000763
-v -0.01405181885 0.007239832878 -0.07892215729
-v -0.01405181885 0.0003474855423 -0.07696235657
-v -0.01263086319 -0.006058416367 -0.07661804199
-v -0.01263086319 -0.01488992691 -0.09746696472
-v -0.01405181885 -0.01454565048 -0.09106109619
-v -0.01405181885 -0.01258576393 -0.08416873932
-v -0.01263086319 -0.0095079422 -0.07854011536
-v -0.01263086319 0.01479050636 -0.08544960022
-v -0.01405181885 0.01444622993 -0.09185546875
-v -0.01405181885 0.01248634338 -0.09874778748
-v -0.01263086319 0.009408531189 -0.1043764496
-v -0.01263086319 0.005959005356 -0.1062985611
-v -0.01405181885 -0.0004469013214 -0.1059542465
-v -0.01405181885 -0.007339253426 -0.1039943695
-v -0.01263086319 -0.01296785355 -0.1009165192
-v -0.003582792282 -0.01740906715 -0.101130867
-v -0.009838590622 -0.01565364838 -0.1001528168
-v -0.009838590622 0.008644800186 -0.1070621872
-v -0.003582792282 0.009622926712 -0.1088176727
-v 0.004033129215 0.005325350761 -0.07255577087
+v 0.01112482071 0.01474882126 -0.0994719696
+v 0.003660502434 0.01270723343 -0.1066516495
+v 0.01014760971 0.01105204582 -0.105165062
+v -0.003960726261 0.009032211304 -0.0740007019
+v -0.01112482071 0.00796397686 -0.07665977478
+v -0.003660504818 0.0151436615 -0.07870132446
+v -0.01014760971 0.0136570549 -0.08035648346
+v -0.003960726261 0.0014128232 -0.0718340683
+v -0.003660504818 -0.006257553101 -0.07261573792
+v -0.01112482071 0.0009221339226 -0.07465736389
+v -0.01014760971 -0.005864276886 -0.07480552673
+v -0.01927591324 -0.002776091099 -0.08656520844
+v -0.01642609596 -0.0005278372765 -0.07975650787
+v -0.01642609596 -0.009749116898 -0.08489459991
+v -0.01442741394 -0.007034854889 -0.07892211914
+v -0.01927591324 0.004843297005 -0.08873188019
+v -0.01642609596 0.0116520977 -0.09098018646
+v -0.01642609596 0.006514005661 -0.08175888062
+v -0.01442741394 0.01248646736 -0.08447307587
+v -0.01927591324 0.002676672935 -0.09635131836
+v -0.01642609596 0.0004284191132 -0.1031600952
+v -0.01642609596 0.009649705887 -0.09802196503
+v -0.01442741394 0.006935443878 -0.1039944458
+v -0.01927591324 -0.004942719936 -0.09418464661
+v -0.01642609596 -0.01175151825 -0.09193637848
+v -0.01642609596 -0.006613419056 -0.1011577225
+v -0.01442741394 -0.01258589268 -0.09844345093
+v -0.003960726261 -0.009131627083 -0.108915863
+v -0.01112482071 -0.008063392639 -0.106256752
+v -0.003660504818 -0.01524308205 -0.1042152405
+v -0.01014760971 -0.01375647545 -0.1025600052
+v -0.003960726261 -0.001512241364 -0.1110824585
+v -0.003660504818 0.006158132553 -0.110300827
+v -0.01112482071 -0.001021552086 -0.1082591629
+v -0.01014760971 0.005764856339 -0.1081110382
+v -0.003960726261 -0.017507267 -0.08237632751
+v -0.01112482071 -0.01484824181 -0.08344459534
+v -0.003660504818 -0.01280665398 -0.07626487732
+v -0.01014760971 -0.01115146637 -0.07775157928
+v -0.003960726261 -0.0196739006 -0.08999576569
+v -0.003660504818 -0.01889224052 -0.09766613007
+v -0.01112482071 -0.01685064316 -0.0904864502
+v -0.01014760971 -0.01670249939 -0.09727287292
+v -0.003960726261 0.01957448959 -0.0929208374
+v -0.003660504818 0.01879281044 -0.08525047302
+v -0.01112482071 0.01675123215 -0.09243015289
+v -0.01014760971 0.01660307884 -0.08564369202
+v -0.003960726261 0.01740785599 -0.1005401993
+v -0.01112482071 0.01474882126 -0.09947193146
+v -0.003660504818 0.01270723343 -0.1066516876
+v -0.01014760971 0.01105204582 -0.1051650238
+v -0.0000000001433735 0.009204678535 -0.07365894318
+v -0.0000000001433735 0.01539099693 -0.07848808289
+v 0.004033124447 0.005325350761 -0.07255577087
v 0.01130440712 0.004517652988 -0.07539619446
v 0.007732110023 0.008592686653 -0.07500724792
v 0.003813269138 0.01236209869 -0.07607913971
v 0.007112531662 0.01452467918 -0.0793283844
v 0.01070094109 0.01107311249 -0.07834682465
+v -0.0000000001433735 0.001446011066 -0.07145259857
+v -0.0000000001433734 -0.006355695724 -0.07230426788
v 0.003813269138 -0.00251244545 -0.07184940338
v 0.007732110023 0.001256964207 -0.07292125702
v 0.01070094109 -0.002609524727 -0.07445610046
@@ -1610,154 +1510,199 @@
v 0.01565368652 -0.008397226334 -0.08169013977
v 0.01565368652 -0.00396417141 -0.079220047
v 0.01965187073 0.003829627037 -0.09256137848
-v 0.01669882774 0.01082362175 -0.0945501709
+v 0.01669882774 0.01082363129 -0.09455020905
v 0.01818750381 0.008430547714 -0.08990520477
v 0.01818750381 0.00573299408 -0.08506404877
v 0.01565368652 0.009718465805 -0.08311077118
-v 0.01565368652 0.01218855858 -0.08754379272
+v 0.01565368652 0.01218855858 -0.08754375458
v 0.01965187073 -0.001152825356 -0.09533760071
-v 0.01669882774 -0.003141620159 -0.1023316193
-v 0.01818750381 0.001503314972 -0.09993846893
-v 0.01818750381 0.006344585419 -0.09724098206
-v 0.01565368652 0.008297805786 -0.1012264252
+v 0.01669882774 -0.003141620159 -0.1023316574
+v 0.01818750381 0.001503314972 -0.09993850708
+v 0.01818750381 0.006344585419 -0.09724094391
+v 0.01565368652 0.008297796249 -0.1012264252
v 0.01565368652 0.00386475563 -0.1036964798
v 0.01965187073 -0.0039290452 -0.09035514832
-v 0.01669882774 -0.01092305183 -0.08836643219
-v 0.01818750381 -0.008529968262 -0.09301128387
-v 0.01818750381 -0.005832407475 -0.09785255432
+v 0.01669882774 -0.01092305183 -0.08836639404
+v 0.01818750381 -0.008529968262 -0.09301132202
+v 0.01818750381 -0.005832407475 -0.09785259247
v 0.01565368652 -0.009817876816 -0.09980583191
v 0.01565368652 -0.01228797913 -0.09537281036
-v 0.004033129215 -0.005424768925 -0.1103607941
+v 0.004033124447 -0.005424768925 -0.1103607941
v 0.01130440712 -0.004617071152 -0.1075203323
v 0.007732110023 -0.008692097664 -0.1079092026
v 0.003813269138 -0.0124615097 -0.1068373871
v 0.007112531662 -0.01462409973 -0.1035881424
v 0.01070094109 -0.01117251873 -0.1045697021
-v 0.003813269138 0.002413024902 -0.1110671234
+v -0.0000000001433735 -0.00154542923 -0.1114638901
+v -0.0000000001433735 0.006256275177 -0.1106122589
+v 0.003813269138 0.002413034439 -0.1110671234
v 0.007732110023 -0.001356377602 -0.1099952316
v 0.01070094109 0.002510108948 -0.1084604263
v 0.007112531662 0.005961675644 -0.1094419479
-v 0.004033129215 -0.0189522171 -0.08608322144
-v 0.01130440712 -0.01611178398 -0.08689098358
+v -0.0000000001433734 -0.00930410862 -0.1092576981
+v -0.0000000001433734 -0.01549041748 -0.1044284821
+v -0.0000000001433734 -0.01784910202 -0.0822039032
+v -0.0000000001433734 -0.01301986694 -0.07601753235
+v 0.004033124447 -0.0189522171 -0.08608322144
+v 0.01130440712 -0.01611179352 -0.08689094543
v 0.007732110023 -0.0165007019 -0.08281581879
v 0.003813269138 -0.01542882919 -0.07904647827
v 0.007112531662 -0.01217963219 -0.07688388824
v 0.01070094109 -0.01316111565 -0.08033542633
+v -0.0000000001433734 -0.02005533218 -0.08996257782
+v -0.0000000001433734 -0.01920370102 -0.09776424408
v 0.003813269138 -0.01965853691 -0.09392105103
-v 0.007732110023 -0.0185866642 -0.09015159607
+v 0.007732110023 -0.01858667374 -0.09015155792
v 0.01070094109 -0.01705187798 -0.09401809692
v 0.007112531662 -0.01803334236 -0.09746963501
+v -0.0000000001433735 0.0199559021 -0.09295402527
+v -0.0000000001433735 0.01910428047 -0.08515228271
v 0.003813269138 0.01955909729 -0.08899551392
v 0.007732110023 0.01848724365 -0.09276493073
v 0.01070094109 0.01695244789 -0.08889846802
v 0.007112531662 0.01793391228 -0.08544685364
-v 0.004033129215 0.01885278702 -0.09683330536
-v 0.01130440712 0.01601236343 -0.09602565765
-v 0.007732110023 0.01640127182 -0.1001006699
+v -0.0000000001433735 0.01774967194 -0.1007126236
+v -0.0000000001433735 0.01292045593 -0.1068989944
+v 0.004033124447 0.01885278702 -0.09683330536
+v 0.01130440712 0.01601236343 -0.09602561951
+v 0.007732110023 0.01640127182 -0.100100708
v 0.003813269138 0.01532943726 -0.1038700867
v 0.007112531662 0.01208022118 -0.1060326385
v 0.01070094109 0.0130616951 -0.1025811005
v 0.009838590622 -0.008744220734 -0.0758543396
-v 0.003582794666 -0.009722337723 -0.07409889221
-v 0.003582794666 0.01730965614 -0.08178565979
+v 0.003582792282 -0.009722337723 -0.07409893036
+v 0.003582792282 0.01730964661 -0.08178569794
v 0.009838590622 0.01555422783 -0.08276374817
v 0.01263086319 0.012868433 -0.08200000763
-v 0.01405181885 0.007239832878 -0.07892219543
-v 0.01405181885 0.0003474831581 -0.07696231842
+v 0.01405181885 0.007239832878 -0.07892215729
+v 0.01405181885 0.0003474855423 -0.07696235657
v 0.01263086319 -0.006058416367 -0.07661804199
v 0.01263086319 -0.01488992691 -0.09746696472
-v 0.01405181885 -0.01454565048 -0.09106113434
+v 0.01405181885 -0.01454565048 -0.09106109619
v 0.01405181885 -0.01258576393 -0.08416873932
v 0.01263086319 -0.0095079422 -0.07854011536
v 0.01263086319 0.01479050636 -0.08544960022
v 0.01405181885 0.01444622993 -0.09185546875
-v 0.01405181885 0.01248634338 -0.09874782562
+v 0.01405181885 0.01248634338 -0.09874778748
v 0.01263086319 0.009408531189 -0.1043764496
-v 0.01263086319 0.005959005356 -0.1062984848
+v 0.01263086319 0.005959005356 -0.1062985611
v 0.01405181885 -0.0004469013214 -0.1059542465
v 0.01405181885 -0.007339253426 -0.1039943695
-v 0.01263086319 -0.01296785831 -0.1009165192
-v 0.003582794666 -0.01740906715 -0.101130867
+v 0.01263086319 -0.01296785355 -0.1009165192
+v 0.003582792282 -0.01740906715 -0.101130867
v 0.009838590622 -0.01565364838 -0.1001528168
v 0.009838590622 0.008644800186 -0.1070621872
-v 0.003582794666 0.009622926712 -0.1088176727
-v -0.007867507935 0.005014462471 -0.07364906311
-v -0.007441821098 0.01181997299 -0.07692428589
-v -0.007441821098 -0.002496123314 -0.0728534317
-v -0.02005023956 -0.00004970908165 -0.09145824432
-v -0.01851522446 0.002102165222 -0.08389072418
-v -0.01851522446 0.007517795563 -0.0936101532
-v -0.01851522446 -0.002201582193 -0.09902576447
-v -0.01851522446 -0.00761721611 -0.0893063736
-v -0.01722631454 -0.005172319412 -0.08226482391
-v -0.01722631454 0.009143776894 -0.0863356781
-v -0.01722631454 0.005072898865 -0.1006518173
-v -0.01722631454 -0.009243206978 -0.09658092499
-v -0.007867507935 -0.005113880634 -0.1092675018
-v -0.007441821098 -0.01191939354 -0.1059922791
-v -0.007441821098 0.002396707535 -0.1100632095
-v -0.007867507935 -0.01785892487 -0.08639415741
-v -0.007441821098 -0.01458371162 -0.07958862305
-v -0.007441821098 -0.01865459442 -0.09390472412
-v -0.007867507935 0.01775949478 -0.09652244568
-v -0.007441821098 0.01855516434 -0.08901180267
-v -0.007441821098 0.01448429108 -0.1033279037
-v -0.006938138008 -0.009326190948 -0.07480983734
-v -0.006938138008 0.01659870148 -0.0821818161
-v -0.01347632408 0.01030982971 -0.08039352417
-v -0.01427207947 0.003853905201 -0.07773040771
-v -0.01347632408 -0.003037319183 -0.07659809113
-v -0.01347632408 -0.01490983009 -0.09444583893
-v -0.01427207947 -0.01377757072 -0.08755470276
-v -0.01347632408 -0.01111447334 -0.08109874725
-v -0.01347632408 0.01481040955 -0.08847064972
-v -0.01427207947 0.01367815018 -0.09536186218
-v -0.01347632408 0.01101506233 -0.1018178177
-v -0.01347632408 0.002937908173 -0.1063184357
-v -0.01427207947 -0.003953323364 -0.1051861954
-v -0.01347632408 -0.01040923595 -0.1025230789
-v -0.006938138008 -0.01669811249 -0.1007347488
-v -0.006938138008 0.009226770401 -0.1081066513
-v -0.01174206734 -0.01455565453 -0.09954101563
-v -0.01174206734 0.008032999039 -0.105964241
-v -0.01174206734 -0.008132410049 -0.07695236206
-v -0.01174206734 0.01445623398 -0.08337551117
-v 0.0000000001433735 0.005434308052 -0.07217262268
-v 0.0000000001433735 0.01258196354 -0.07580093384
+v 0.003582792282 0.009622926712 -0.1088176727
+v -0.004033129215 0.005325350761 -0.07255577087
+v -0.01130440712 0.004517652988 -0.07539619446
+v -0.007732110023 0.008592686653 -0.07500724792
+v -0.003813269138 0.01236209869 -0.07607913971
+v -0.007112531662 0.01452467918 -0.0793283844
+v -0.01070094109 0.01107311249 -0.07834682465
+v -0.003813269138 -0.00251244545 -0.07184940338
+v -0.007732110023 0.001256964207 -0.07292125702
+v -0.01070094109 -0.002609524727 -0.07445610046
+v -0.007112531662 -0.006061105728 -0.07347465515
+v -0.01965187073 0.001053406596 -0.08757892609
+v -0.01669882774 0.003042201996 -0.08058498383
+v -0.01818750381 -0.001602730751 -0.08297801971
+v -0.01818750381 -0.006444001198 -0.08567554474
+v -0.01565368652 -0.008397226334 -0.08169013977
+v -0.01565368652 -0.00396417141 -0.079220047
+v -0.01965187073 0.003829627037 -0.09256137848
+v -0.01669882774 0.01082362175 -0.0945501709
+v -0.01818750381 0.008430547714 -0.08990520477
+v -0.01818750381 0.00573299408 -0.08506404877
+v -0.01565368652 0.009718465805 -0.08311077118
+v -0.01565368652 0.01218855858 -0.08754379272
+v -0.01965187073 -0.001152825356 -0.09533760071
+v -0.01669882774 -0.003141620159 -0.1023316193
+v -0.01818750381 0.001503314972 -0.09993846893
+v -0.01818750381 0.006344585419 -0.09724098206
+v -0.01565368652 0.008297805786 -0.1012264252
+v -0.01565368652 0.00386475563 -0.1036964798
+v -0.01965187073 -0.0039290452 -0.09035514832
+v -0.01669882774 -0.01092305183 -0.08836643219
+v -0.01818750381 -0.008529968262 -0.09301128387
+v -0.01818750381 -0.005832407475 -0.09785255432
+v -0.01565368652 -0.009817876816 -0.09980583191
+v -0.01565368652 -0.01228797913 -0.09537281036
+v -0.004033129215 -0.005424768925 -0.1103607941
+v -0.01130440712 -0.004617071152 -0.1075203323
+v -0.007732110023 -0.008692097664 -0.1079092026
+v -0.003813269138 -0.0124615097 -0.1068373871
+v -0.007112531662 -0.01462409973 -0.1035881424
+v -0.01070094109 -0.01117251873 -0.1045697021
+v -0.003813269138 0.002413024902 -0.1110671234
+v -0.007732110023 -0.001356377602 -0.1099952316
+v -0.01070094109 0.002510108948 -0.1084604263
+v -0.007112531662 0.005961675644 -0.1094419479
+v -0.004033129215 -0.0189522171 -0.08608322144
+v -0.01130440712 -0.01611178398 -0.08689098358
+v -0.007732110023 -0.0165007019 -0.08281581879
+v -0.003813269138 -0.01542882919 -0.07904647827
+v -0.007112531662 -0.01217963219 -0.07688388824
+v -0.01070094109 -0.01316111565 -0.08033542633
+v -0.003813269138 -0.01965853691 -0.09392105103
+v -0.007732110023 -0.0185866642 -0.09015159607
+v -0.01070094109 -0.01705187798 -0.09401809692
+v -0.007112531662 -0.01803334236 -0.09746963501
+v -0.003813269138 0.01955909729 -0.08899551392
+v -0.007732110023 0.01848724365 -0.09276493073
+v -0.01070094109 0.01695244789 -0.08889846802
+v -0.007112531662 0.01793391228 -0.08544685364
+v -0.004033129215 0.01885278702 -0.09683330536
+v -0.01130440712 0.01601236343 -0.09602565765
+v -0.007732110023 0.01640127182 -0.1001006699
+v -0.003813269138 0.01532943726 -0.1038700867
+v -0.007112531662 0.01208022118 -0.1060326385
+v -0.01070094109 0.0130616951 -0.1025811005
+v -0.009838590622 -0.008744220734 -0.0758543396
+v -0.003582794666 -0.009722337723 -0.07409889221
+v -0.003582794666 0.01730965614 -0.08178565979
+v -0.009838590622 0.01555422783 -0.08276374817
+v -0.01263086319 0.012868433 -0.08200000763
+v -0.01405181885 0.007239832878 -0.07892219543
+v -0.01405181885 0.0003474831581 -0.07696231842
+v -0.01263086319 -0.006058416367 -0.07661804199
+v -0.01263086319 -0.01488992691 -0.09746696472
+v -0.01405181885 -0.01454565048 -0.09106113434
+v -0.01405181885 -0.01258576393 -0.08416873932
+v -0.01263086319 -0.0095079422 -0.07854011536
+v -0.01263086319 0.01479050636 -0.08544960022
+v -0.01405181885 0.01444622993 -0.09185546875
+v -0.01405181885 0.01248634338 -0.09874782562
+v -0.01263086319 0.009408531189 -0.1043764496
+v -0.01263086319 0.005959005356 -0.1062984848
+v -0.01405181885 -0.0004469013214 -0.1059542465
+v -0.01405181885 -0.007339253426 -0.1039943695
+v -0.01263086319 -0.01296785831 -0.1009165192
+v -0.003582794666 -0.01740906715 -0.101130867
+v -0.009838590622 -0.01565364838 -0.1001528168
+v -0.009838590622 0.008644800186 -0.1070621872
+v -0.003582794666 0.009622926712 -0.1088176727
v 0.007867507935 0.005014462471 -0.07364906311
-v 0.0000000001433734 -0.002553043365 -0.07149719238
v 0.007441821098 0.01181997299 -0.07692428589
v 0.007441821098 -0.002496123314 -0.0728534317
v 0.02005023956 -0.00004970908165 -0.09145824432
v 0.01851522446 0.002102165222 -0.08389072418
v 0.01851522446 0.007517795563 -0.0936101532
v 0.01851522446 -0.002201582193 -0.09902576447
-v 0.01851522446 -0.00761721611 -0.08930641174
+v 0.01851522446 -0.00761721611 -0.0893063736
v 0.01722631454 -0.005172319412 -0.08226482391
v 0.01722631454 0.009143776894 -0.0863356781
v 0.01722631454 0.005072898865 -0.1006518173
-v 0.01722631454 -0.009243202209 -0.09658088684
-v 0.0000000001433735 -0.0055337286 -0.1107439423
+v 0.01722631454 -0.009243206978 -0.09658092499
v 0.007867507935 -0.005113880634 -0.1092675018
-v 0.0000000001433735 0.002453622818 -0.1114193726
-v 0.0000000001433734 -0.01268138409 -0.1071156311
v 0.007441821098 -0.01191939354 -0.1059922791
v 0.007441821098 0.002396707535 -0.1100632095
-v 0.0000000001433734 -0.01933540344 -0.08597427368
-v 0.0000000001433734 -0.0157070446 -0.07882659912
v 0.007867507935 -0.01785892487 -0.08639415741
-v 0.0000000001433734 -0.02001079559 -0.09396167755
v 0.007441821098 -0.01458371162 -0.07958862305
-v 0.007441821098 -0.01865459442 -0.09390468597
-v 0.0000000001433735 0.01923597336 -0.09694229126
-v 0.0000000001433735 0.01991136551 -0.08895496368
-v 0.0000000001433735 0.01560762405 -0.1040899658
-v 0.007867507935 0.01775951385 -0.09652248383
+v 0.007441821098 -0.01865459442 -0.09390472412
+v 0.007867507935 0.01775949478 -0.09652244568
v 0.007441821098 0.01855516434 -0.08901180267
v 0.007441821098 0.01448429108 -0.1033279037
v 0.006938138008 -0.009326190948 -0.07480983734
-v 0.0000000001433734 -0.009873943329 -0.07382686615
-v 0.0000000001433735 0.0175817585 -0.08163402557
v 0.006938138008 0.01659870148 -0.0821818161
v 0.01347632408 0.01030982971 -0.08039352417
v 0.01427207947 0.003853905201 -0.07773040771
@@ -1771,14 +1716,69 @@
v 0.01347632408 0.002937908173 -0.1063184357
v 0.01427207947 -0.003953323364 -0.1051861954
v 0.01347632408 -0.01040923595 -0.1025230789
-v 0.0000000001433734 -0.01768118858 -0.1012825394
v 0.006938138008 -0.01669811249 -0.1007347488
v 0.006938138008 0.009226770401 -0.1081066513
-v 0.0000000001433735 0.009774541855 -0.1090897751
v 0.01174206734 -0.01455565453 -0.09954101563
v 0.01174206734 0.008032999039 -0.105964241
v 0.01174206734 -0.008132410049 -0.07695236206
v 0.01174206734 0.01445623398 -0.08337551117
+v -0.0000000001433735 0.005434308052 -0.07217262268
+v -0.0000000001433735 0.01258196354 -0.07580093384
+v -0.007867507935 0.005014462471 -0.07364906311
+v -0.0000000001433734 -0.002553043365 -0.07149719238
+v -0.007441821098 0.01181997299 -0.07692428589
+v -0.007441821098 -0.002496123314 -0.0728534317
+v -0.02005023956 -0.00004970908165 -0.09145824432
+v -0.01851522446 0.002102165222 -0.08389072418
+v -0.01851522446 0.007517795563 -0.0936101532
+v -0.01851522446 -0.002201582193 -0.09902576447
+v -0.01851522446 -0.00761721611 -0.08930641174
+v -0.01722631454 -0.005172319412 -0.08226482391
+v -0.01722631454 0.009143776894 -0.0863356781
+v -0.01722631454 0.005072898865 -0.1006518173
+v -0.01722631454 -0.009243202209 -0.09658088684
+v -0.0000000001433735 -0.0055337286 -0.1107439423
+v -0.007867507935 -0.005113880634 -0.1092675018
+v -0.0000000001433735 0.002453622818 -0.1114193726
+v -0.0000000001433734 -0.01268138409 -0.1071156311
+v -0.007441821098 -0.01191939354 -0.1059922791
+v -0.007441821098 0.002396707535 -0.1100632095
+v -0.0000000001433734 -0.01933540344 -0.08597427368
+v -0.0000000001433734 -0.0157070446 -0.07882659912
+v -0.007867507935 -0.01785892487 -0.08639415741
+v -0.0000000001433734 -0.02001079559 -0.09396167755
+v -0.007441821098 -0.01458371162 -0.07958862305
+v -0.007441821098 -0.01865459442 -0.09390468597
+v -0.0000000001433735 0.01923597336 -0.09694229126
+v -0.0000000001433735 0.01991136551 -0.08895496368
+v -0.0000000001433735 0.01560762405 -0.1040899658
+v -0.007867507935 0.01775951385 -0.09652248383
+v -0.007441821098 0.01855516434 -0.08901180267
+v -0.007441821098 0.01448429108 -0.1033279037
+v -0.006938138008 -0.009326190948 -0.07480983734
+v -0.0000000001433734 -0.009873943329 -0.07382686615
+v -0.0000000001433735 0.0175817585 -0.08163402557
+v -0.006938138008 0.01659870148 -0.0821818161
+v -0.01347632408 0.01030982971 -0.08039352417
+v -0.01427207947 0.003853905201 -0.07773040771
+v -0.01347632408 -0.003037319183 -0.07659809113
+v -0.01347632408 -0.01490983009 -0.09444583893
+v -0.01427207947 -0.01377757072 -0.08755470276
+v -0.01347632408 -0.01111447334 -0.08109874725
+v -0.01347632408 0.01481040955 -0.08847064972
+v -0.01427207947 0.01367815018 -0.09536186218
+v -0.01347632408 0.01101506233 -0.1018178177
+v -0.01347632408 0.002937908173 -0.1063184357
+v -0.01427207947 -0.003953323364 -0.1051861954
+v -0.01347632408 -0.01040923595 -0.1025230789
+v -0.0000000001433734 -0.01768118858 -0.1012825394
+v -0.006938138008 -0.01669811249 -0.1007347488
+v -0.006938138008 0.009226770401 -0.1081066513
+v -0.0000000001433735 0.009774541855 -0.1090897751
+v -0.01174206734 -0.01455565453 -0.09954101563
+v -0.01174206734 0.008032999039 -0.105964241
+v -0.01174206734 -0.008132410049 -0.07695236206
+v -0.01174206734 0.01445623398 -0.08337551117
# 1781 vertices
vn 0 -0.14322781562805 0.98968976736069
@@ -5631,1777 +5631,1777 @@
o dd6dof_controller
usemtl dd6dof_controller_diffuse
-f 2/2/2 1/3/3 4/4/4 3/1/1
-f 4/4/4 6/5/5 5/6/6 3/1/1
-f 4/4/4 1/3/3 8/8/8 7/7/7
-f 9/9/9 6/5/5 4/4/4 7/7/7
-f 1/3/3 2/2/2 11/11/11 10/10/10
-f 12/13/13 5/6/6 6/5/5 13/12/12
-f 14/14/14 8/8/8 1/3/3 10/10/10
-f 6/5/5 9/9/9 15/15/15 13/12/12
-f 16/16/16 17/17/17 10/10/10 11/11/11
-f 13/12/12 18/18/18 19/19/19 12/13/13
-f 10/10/10 17/17/17 20/20/20 14/14/14
-f 21/21/21 18/18/18 13/12/12 15/15/15
-f 17/17/17 16/16/16 23/23/23 22/22/22
-f 24/25/25 19/19/19 18/18/18 25/24/24
-f 26/26/26 20/20/20 17/17/17 22/22/22
-f 18/18/18 21/21/21 27/27/27 25/24/24
-f 22/22/22 23/23/23 29/29/29 28/28/28
-f 30/31/31 24/25/25 25/24/24 31/30/30
-f 32/32/32 26/26/26 22/22/22 28/28/28
-f 25/24/24 27/27/27 33/33/33 31/30/30
-f 28/28/28 29/29/29 35/35/35 34/34/34
-f 36/37/37 30/31/31 31/30/30 37/36/36
-f 28/28/28 34/34/34 38/38/38 32/32/32
-f 39/39/39 37/36/36 31/30/30 33/33/33
-f 34/34/34 35/35/35 41/41/41 40/40/40
-f 42/43/43 36/37/37 37/36/36 43/42/42
-f 44/44/44 38/38/38 34/34/34 40/40/40
-f 37/36/36 39/39/39 45/45/45 43/42/42
-f 44/44/44 40/40/40 47/47/47 46/46/46
-f 48/49/49 43/42/42 45/45/45 49/48/48
-f 40/40/40 41/41/41 50/50/50 47/47/47
-f 51/51/51 42/43/43 43/42/42 48/49/49
-f 52/52/52 53/53/53 2/2/2 3/1/1
-f 5/6/6 54/54/54 52/52/52 3/1/1
-f 11/11/11 2/2/2 53/53/53 55/55/55
-f 54/54/54 5/6/6 12/13/13 56/56/56
-f 16/16/16 11/11/11 55/55/55 57/57/57
-f 56/56/56 12/13/13 19/19/19 58/58/58
-f 59/59/59 23/23/23 16/16/16 57/57/57
-f 19/19/19 24/25/25 60/60/60 58/58/58
-f 61/61/61 29/29/29 23/23/23 59/59/59
-f 24/25/25 30/31/31 62/62/62 60/60/60
-f 63/63/63 35/35/35 29/29/29 61/61/61
-f 30/31/31 36/37/37 64/64/64 62/62/62
-f 35/35/35 63/63/63 65/65/65 41/41/41
-f 66/66/66 64/64/64 36/37/37 42/43/43
-f 41/41/41 65/65/65 67/67/67 50/50/50
-f 68/68/68 66/66/66 42/43/43 51/51/51
-f 67/67/67 69/69/69 47/47/47 50/50/50
-f 48/49/49 70/70/70 68/68/68 51/51/51
-f 46/46/46 47/47/47 69/69/69 71/71/71
-f 70/70/70 48/49/49 49/48/48 72/72/72
-f 73/73/73 74/74/74 7/7/7 8/8/8
-f 7/7/7 74/74/74 75/75/75 9/9/9
-f 76/76/76 73/73/73 8/8/8 14/14/14
-f 9/9/9 75/75/75 77/77/77 15/15/15
-f 78/78/78 76/76/76 14/14/14 20/20/20
-f 15/15/15 77/77/77 79/79/79 21/21/21
-f 80/80/80 78/78/78 20/20/20 26/26/26
-f 21/21/21 79/79/79 81/81/81 27/27/27
-f 26/26/26 32/32/32 82/82/82 80/80/80
-f 83/83/83 33/33/33 27/27/27 81/81/81
-f 84/84/84 82/82/82 32/32/32 38/38/38
-f 33/33/33 83/83/83 85/85/85 39/39/39
-f 44/44/44 86/86/86 84/84/84 38/38/38
-f 85/85/85 87/87/87 45/45/45 39/39/39
-f 46/46/46 88/88/88 86/86/86 44/44/44
-f 87/87/87 89/89/89 49/48/48 45/45/45
-f 88/88/88 46/46/46 71/71/71 90/90/90
-f 72/72/72 49/48/48 89/89/89 91/91/91
-f 73/73/73 93/92/92 92/93/93 74/74/74
-f 92/93/93 94/94/94 75/75/75 74/74/74
-f 95/95/95 96/96/96 82/82/82 84/84/84
-f 83/83/83 97/97/97 98/98/98 85/85/85
-f 82/82/82 96/96/96 99/99/99 80/80/80
-f 100/100/100 97/97/97 83/83/83 81/81/81
-f 80/80/80 99/99/99 101/101/101 78/78/78
-f 102/102/102 100/100/100 81/81/81 79/79/79
-f 103/103/103 76/76/76 78/78/78 101/101/101
-f 79/79/79 77/77/77 104/104/104 102/102/102
-f 93/92/92 73/73/73 76/76/76 103/103/103
-f 77/77/77 75/75/75 94/94/94 104/104/104
-f 106/105/105 105/106/106 88/88/88 90/90/90
-f 89/89/89 108/107/107 107/108/108 91/91/91
-f 86/86/86 88/88/88 105/106/106 109/109/109
-f 108/107/107 89/89/89 87/87/87 110/110/110
-f 86/86/86 109/109/109 95/95/95 84/84/84
-f 98/98/98 110/110/110 87/87/87 85/85/85
-f 111/112/112 92/93/93 93/92/92 112/111/111
-f 94/94/94 92/93/93 111/112/112 113/113/113
-f 112/111/111 93/92/92 103/103/103 114/114/114
-f 104/104/104 94/94/94 113/113/113 115/115/115
-f 114/114/114 103/103/103 101/101/101 116/116/116
-f 102/102/102 104/104/104 115/115/115 117/117/117
-f 116/116/116 101/101/101 99/99/99 118/118/118
-f 100/100/100 102/102/102 117/117/117 119/119/119
-f 118/118/118 99/99/99 96/96/96 120/120/120
-f 97/97/97 100/100/100 119/119/119 121/121/121
-f 120/120/120 96/96/96 95/95/95 122/122/122
-f 98/98/98 97/97/97 121/121/121 123/123/123
-f 122/122/122 95/95/95 109/109/109 124/124/124
-f 110/110/110 98/98/98 123/123/123 125/125/125
-f 105/106/106 106/105/105 124/124/124 109/109/109
-f 125/125/125 107/108/108 108/107/107 110/110/110
-f 127/127/127 64/64/64 66/66/66 126/126/126
-f 128/128/128 62/62/62 64/64/64 127/127/127
-f 129/129/129 60/60/60 62/62/62 128/128/128
-f 130/130/130 58/58/58 60/60/60 129/129/129
-f 131/131/131 56/56/56 58/58/58 130/130/130
-f 132/132/132 54/54/54 56/56/56 131/131/131
-f 133/133/133 52/52/52 54/54/54 132/132/132
-f 53/53/53 52/52/52 133/133/133 134/134/134
-f 55/55/55 53/53/53 134/134/134 135/135/135
-f 57/57/57 55/55/55 135/135/135 136/136/136
-f 59/59/59 57/57/57 136/136/136 137/137/137
-f 61/61/61 59/59/59 137/137/137 138/138/138
-f 63/63/63 61/61/61 138/138/138 139/139/139
-f 65/65/65 63/63/63 139/139/139 140/140/140
-f 69/69/69 90/90/90 71/71/71
-f 140/140/140 90/90/90 69/69/69
-f 91/91/91 70/70/70 72/72/72
-f 126/126/126 70/70/70 91/91/91
-f 140/140/140 69/69/69 67/67/67 65/65/65
-f 68/68/68 70/70/70 126/126/126 66/66/66
-f 181/143/143 213/144/144 212/145/145 143/142/142
-f 182/147/147 220/148/148 219/149/149 145/146/146
-f 180/151/151 227/152/152 226/153/153 144/150/150
-f 183/155/155 234/156/156 233/157/157 149/154/154
-f 179/159/159 241/160/160 240/161/161 148/158/158
-f 184/163/163 248/164/164 247/165/165 153/162/162
-f 178/167/167 177/168/168 156/169/169 152/166/166
-f 157/170/170 185/171/171 184/163/163 153/162/162
-f 215/173/173 214/174/174 142/175/175 160/172/172
-f 222/177/177 221/178/178 146/179/179 161/176/176
-f 229/181/181 228/182/182 141/183/183 159/180/180
-f 236/185/185 235/186/186 150/187/187 163/184/184
-f 243/189/189 242/190/190 147/191/191 162/188/188
-f 250/193/193 249/194/194 154/195/195 165/192/192
-f 166/197/197 155/198/198 151/199/199 164/196/196
-f 165/192/192 154/195/195 158/201/201 167/200/200
-f 143/142/142 212/145/145 211/203/203 168/202/202
-f 145/146/146 219/149/149 218/205/205 170/204/204
-f 144/150/150 226/153/153 225/207/207 169/206/206
-f 149/154/154 233/157/157 232/209/209 172/208/208
-f 148/158/158 240/161/161 239/211/211 171/210/210
-f 153/162/162 247/165/165 246/213/213 174/212/212
-f 173/215/215 152/166/166 156/169/169 175/214/214
-f 176/216/216 157/170/170 153/162/162 174/212/212
-f 155/198/198 177/168/168 178/167/167 151/199/199
-f 242/190/190 241/160/160 179/159/159 147/191/191
-f 228/182/182 227/152/152 180/151/151 141/183/183
-f 142/175/175 214/174/174 213/144/144 181/143/143
-f 220/148/148 182/147/147 146/179/179 221/178/178
-f 234/156/156 183/155/155 150/187/187 235/186/186
-f 248/164/164 184/163/163 154/195/195 249/194/194
-f 184/163/163 185/171/171 158/201/201 154/195/195
-f 175/214/214 156/169/169 177/168/168 186/217/217
-f 187/218/218 185/171/171 157/170/170 176/216/216
-f 186/217/217 177/168/168 155/198/198 188/219/219
-f 189/220/220 158/201/201 185/171/171 187/218/218
-f 166/197/197 190/221/221 188/219/219 155/198/198
-f 158/201/201 189/220/220 191/222/222 167/200/200
-f 168/202/202 211/203/203 210/224/224 192/223/223
-f 170/204/204 218/205/205 217/226/226 194/225/225
-f 169/206/206 225/207/207 224/228/228 193/227/227
-f 172/208/208 232/209/209 231/230/230 196/229/229
-f 171/210/210 239/211/211 238/232/232 195/231/231
-f 174/212/212 246/213/213 245/234/234 198/233/233
-f 175/214/214 199/235/235 197/236/236 173/215/215
-f 174/212/212 198/233/233 200/237/237 176/216/216
-f 186/217/217 201/238/238 199/235/235 175/214/214
-f 176/216/216 200/237/237 202/239/239 187/218/218
-f 216/241/241 215/173/173 160/172/172 204/240/240
-f 223/243/243 222/177/177 161/176/176 205/242/242
-f 230/245/245 229/181/181 159/180/180 203/244/244
-f 237/247/247 236/185/185 163/184/184 207/246/246
-f 244/249/249 243/189/189 162/188/188 206/248/248
-f 251/251/251 250/193/193 165/192/192 209/250/250
-f 190/221/221 166/197/197 164/196/196 208/252/252
-f 209/250/250 165/192/192 167/200/200 191/222/222
-f 210/224/224 211/203/203 169/206/206 193/227/227
-f 211/203/203 212/145/145 144/150/150 169/206/206
-f 212/145/145 213/144/144 180/151/151 144/150/150
-f 213/144/144 214/174/174 141/183/183 180/151/151
-f 141/183/183 214/174/174 215/173/173 159/180/180
-f 159/180/180 215/173/173 216/241/241 203/244/244
-f 217/226/226 218/205/205 168/202/202 192/223/223
-f 218/205/205 219/149/149 143/142/142 168/202/202
-f 219/149/149 220/148/148 181/143/143 143/142/142
-f 181/143/143 220/148/148 221/178/178 142/175/175
-f 142/175/175 221/178/178 222/177/177 160/172/172
-f 160/172/172 222/177/177 223/243/243 204/240/240
-f 224/228/228 225/207/207 171/210/210 195/231/231
-f 225/207/207 226/153/153 148/158/158 171/210/210
-f 227/152/152 179/159/159 148/158/158 226/153/153
-f 179/159/159 227/152/152 228/182/182 147/191/191
-f 147/191/191 228/182/182 229/181/181 162/188/188
-f 162/188/188 229/181/181 230/245/245 206/248/248
-f 231/230/230 232/209/209 170/204/204 194/225/225
-f 232/209/209 233/157/157 145/146/146 170/204/204
-f 233/157/157 234/156/156 182/147/147 145/146/146
-f 182/147/147 234/156/156 235/186/186 146/179/179
-f 146/179/179 235/186/186 236/185/185 161/176/176
-f 161/176/176 236/185/185 237/247/247 205/242/242
-f 238/232/232 239/211/211 173/215/215 197/236/236
-f 239/211/211 240/161/161 152/166/166 173/215/215
-f 241/160/160 178/167/167 152/166/166 240/161/161
-f 178/167/167 241/160/160 242/190/190 151/199/199
-f 151/199/199 242/190/190 243/189/189 164/196/196
-f 164/196/196 243/189/189 244/249/249 208/252/252
-f 245/234/234 246/213/213 172/208/208 196/229/229
-f 246/213/213 247/165/165 149/154/154 172/208/208
-f 247/165/165 248/164/164 183/155/155 149/154/154
-f 183/155/155 248/164/164 249/194/194 150/187/187
-f 150/187/187 249/194/194 250/193/193 163/184/184
-f 163/184/184 250/193/193 251/251/251 207/246/246
-f 312/254/254 260/255/255 271/256/256 356/253/253
-f 316/257/257 319/258/257 271/256/256 260/255/255
-f 309/260/259 253/261/260 272/262/261 306/259/258
-f 334/263/262 357/264/263 272/262/261 253/261/260
-f 335/266/265 254/267/266 296/268/267 331/265/264
-f 311/269/268 318/270/269 296/268/267 254/267/266
-f 311/269/270 255/271/271 298/272/272 318/270/270
-f 312/254/273 356/253/274 298/272/272 255/271/271
-f 313/274/276 256/275/277 294/276/278 308/273/275
-f 310/277/279 307/278/279 294/276/278 256/275/277
-f 314/280/281 257/281/282 295/282/283 317/279/280
-f 313/274/284 308/273/284 295/282/283 257/281/282
-f 315/284/286 258/285/287 299/286/288 355/283/285
-f 314/280/289 317/279/289 299/286/288 258/285/287
-f 316/257/290 259/287/291 300/288/291 319/258/290
-f 315/284/292 355/283/292 300/288/291 259/287/291
-f 310/277/293 252/289/294 270/290/295 307/278/293
-f 309/260/296 306/259/297 270/290/295 252/289/294
-f 309/260/296 252/289/294 261/292/299 320/291/298
-f 310/277/300 321/293/300 261/292/299 252/289/294
-f 334/263/262 253/261/260 262/295/302 347/294/301
-f 309/260/259 320/291/303 262/295/302 253/261/260
-f 311/269/268 254/267/266 263/297/305 322/296/304
-f 335/266/265 348/298/306 263/297/305 254/267/266
-f 312/254/273 255/271/271 264/300/308 323/299/307
-f 311/269/309 322/296/309 264/300/308 255/271/271
-f 310/277/310 256/275/277 265/301/311 321/293/310
-f 313/274/276 324/302/312 265/301/311 256/275/277
-f 313/274/313 257/281/282 266/303/314 324/302/313
-f 314/280/281 325/304/315 266/303/314 257/281/282
-f 314/280/316 258/285/287 267/305/317 325/304/316
-f 315/284/286 326/306/318 267/305/317 258/285/287
-f 315/284/319 259/287/320 268/307/320 326/306/319
-f 316/257/321 327/308/321 268/307/320 259/287/320
-f 316/257/322 260/255/255 269/309/323 327/308/322
-f 312/254/254 323/299/324 269/309/323 260/255/255
-f 341/311/326 281/312/327 292/313/328 344/310/325
-f 281/312/327 337/314/329 359/315/330 292/313/328
-f 334/263/331 274/316/332 293/317/333 357/264/331
-f 274/316/332 332/318/334 328/319/335 293/317/333
-f 336/321/337 275/322/338 297/323/339 343/320/336
-f 275/322/338 335/266/340 331/265/340 297/323/339
-f 337/314/342 276/324/343 303/325/344 359/315/341
-f 276/324/343 336/321/345 343/320/346 303/325/344
-f 333/327/348 277/328/349 301/329/350 329/326/347
-f 277/328/349 338/330/351 330/331/352 301/329/350
-f 338/330/354 278/332/355 302/333/356 330/331/353
-f 278/332/355 339/334/357 342/335/358 302/333/356
-f 339/334/360 279/336/361 304/337/362 342/335/359
-f 279/336/361 340/338/363 358/339/364 304/337/362
-f 340/338/366 280/340/367 305/341/368 358/339/365
-f 280/340/367 341/311/369 344/310/370 305/341/368
-f 332/318/372 273/342/373 291/343/374 328/319/371
-f 273/342/373 333/327/375 329/326/376 291/343/374
-f 333/327/375 273/342/373 282/345/378 346/344/377
-f 273/342/373 332/318/372 345/346/379 282/345/378
-f 332/318/334 274/316/332 283/347/381 345/346/380
-f 274/316/332 334/263/382 347/294/382 283/347/381
-f 335/266/383 275/322/338 284/348/384 348/298/383
-f 275/322/338 336/321/337 349/349/385 284/348/384
-f 336/321/345 276/324/343 285/350/387 349/349/386
-f 276/324/343 337/314/342 350/351/388 285/350/387
-f 338/330/351 277/328/349 286/353/390 351/352/389
-f 277/328/349 333/327/348 346/344/391 286/353/390
-f 339/334/357 278/332/355 287/355/393 352/354/392
-f 278/332/355 338/330/354 351/352/394 287/355/393
-f 340/338/363 279/336/361 288/357/396 353/356/395
-f 279/336/361 339/334/360 352/354/397 288/357/396
-f 341/311/369 280/340/367 289/359/399 354/358/398
-f 280/340/367 340/338/366 353/356/400 289/359/399
-f 337/314/329 281/312/327 290/360/402 350/351/401
-f 281/312/327 341/311/326 354/358/403 290/360/402
-f 379/361/404 378/362/405 360/363/406
-f 378/362/407 380/364/408 360/363/406
-f 320/291/409 261/292/410 360/363/406 380/364/408
-f 321/293/411 379/361/404 360/363/406 261/292/410
-f 380/364/408 378/362/412 361/365/413
-f 378/362/414 381/366/415 361/365/413
-f 347/294/416 262/295/417 361/365/413 381/366/415
-f 320/291/409 380/364/408 361/365/413 262/295/417
-f 382/367/418 378/362/419 362/368/420
-f 378/362/421 383/369/422 362/368/420
-f 322/296/423 263/297/424 362/368/420 383/369/422
-f 348/298/425 382/367/418 362/368/420 263/297/424
-f 383/369/422 378/362/426 363/370/427
-f 378/362/428 384/371/429 363/370/427
-f 323/299/430 264/300/431 363/370/427 384/371/429
-f 322/296/423 383/369/422 363/370/427 264/300/431
-f 385/372/432 378/362/433 364/373/434
-f 378/362/435 379/361/404 364/373/434
-f 321/293/411 265/301/436 364/373/434 379/361/404
-f 324/302/437 385/372/432 364/373/434 265/301/436
-f 386/374/438 378/362/439 365/375/440
-f 378/362/441 385/372/432 365/375/440
-f 324/302/437 266/303/442 365/375/440 385/372/432
-f 325/304/443 386/374/438 365/375/440 266/303/442
-f 387/376/444 378/362/445 366/377/446
-f 378/362/447 386/374/438 366/377/446
-f 325/304/443 267/305/448 366/377/446 386/374/438
-f 326/306/449 387/376/444 366/377/446 267/305/448
-f 388/378/450 378/362/451 367/379/452
-f 378/362/453 387/376/444 367/379/452
-f 326/306/449 268/307/454 367/379/452 387/376/444
-f 327/308/455 388/378/450 367/379/452 268/307/454
-f 384/371/429 378/362/456 368/380/457
-f 378/362/458 388/378/450 368/380/457
-f 327/308/455 269/309/459 368/380/457 388/378/450
-f 323/299/430 384/371/429 368/380/457 269/309/459
-f 378/362/460 389/381/461 369/382/462
-f 346/344/463 282/345/464 369/382/462 389/381/461
-f 345/346/465 390/383/466 369/382/462 282/345/464
-f 390/383/466 378/362/467 369/382/462
-f 378/362/468 390/383/466 370/384/469
-f 345/346/465 283/347/470 370/384/469 390/383/466
-f 347/294/416 381/366/415 370/384/469 283/347/470
-f 381/366/415 378/362/471 370/384/469
-f 378/362/472 382/367/418 371/385/473
-f 348/298/425 284/348/474 371/385/473 382/367/418
-f 349/349/475 391/386/476 371/385/473 284/348/474
-f 391/386/476 378/362/477 371/385/473
-f 378/362/478 391/386/476 372/387/479
-f 349/349/475 285/350/480 372/387/479 391/386/476
-f 350/351/481 392/388/482 372/387/479 285/350/480
-f 392/388/482 378/362/483 372/387/479
-f 378/362/484 393/389/485 373/390/486
-f 351/352/487 286/353/488 373/390/486 393/389/485
-f 346/344/463 389/381/461 373/390/486 286/353/488
-f 389/381/461 378/362/489 373/390/486
-f 378/362/490 394/391/491 374/392/492
-f 352/354/493 287/355/494 374/392/492 394/391/491
-f 351/352/487 393/389/485 374/392/492 287/355/494
-f 393/389/485 378/362/495 374/392/492
-f 378/362/496 395/393/497 375/394/498
-f 353/356/499 288/357/500 375/394/498 395/393/497
-f 352/354/493 394/391/491 375/394/498 288/357/500
-f 394/391/491 378/362/501 375/394/498
-f 378/362/502 396/395/503 376/396/504
-f 354/358/505 289/359/506 376/396/504 396/395/503
-f 353/356/499 395/393/497 376/396/504 289/359/506
-f 395/393/497 378/362/507 376/396/504
-f 378/362/508 392/388/482 377/397/509
-f 350/351/481 290/360/510 377/397/509 392/388/482
-f 354/358/505 396/395/503 377/397/509 290/360/510
-f 396/395/503 378/362/511 377/397/509
-f 481/399/513 482/400/514 397/401/515 480/398/512
-f 543/402/516 480/398/512 397/401/515
-f 653/403/517 582/404/518 480/398/512 543/402/516
-f 633/405/519 481/399/513 480/398/512 582/404/518
-f 633/405/519 583/406/520 398/407/521 481/399/513
-f 634/408/522 584/409/523 398/407/521 583/406/520
-f 481/399/513 398/407/521 399/410/524 482/400/514
-f 584/409/523 585/411/525 399/410/524 398/407/521
-f 701/412/526 542/413/527 399/410/524 585/411/525
-f 701/415/526 586/416/528 400/417/529 542/414/527
-f 631/419/531 581/420/532 402/421/533 588/418/530
-f 653/403/517 543/402/516 402/421/533 581/420/532
-f 755/423/535 757/424/536 404/425/537 484/422/534
-f 758/427/539 755/423/535 484/422/534 405/426/538
-f 759/429/541 758/427/539 405/426/538 597/428/540
-f 756/430/542 462/431/543 404/425/537 757/424/536
-f 659/433/545 485/434/546 589/435/547 678/432/544
-f 631/419/531 588/418/530 589/435/547 485/434/546
-f 659/433/545 678/432/544 403/437/549 486/436/548
-f 478/439/551 486/436/548 403/437/549 463/438/550
-f 727/441/553 544/442/554 489/443/555 464/440/552
-f 725/444/556 488/445/557 489/443/555 544/442/554
-f 725/444/556 545/446/558 407/447/559 488/445/557
-f 729/448/560 609/449/561 407/447/559 545/446/558
-f 488/445/557 407/447/559 608/451/563 685/450/562
-f 609/449/561 610/452/564 608/451/563 407/447/559
-f 488/445/557 685/450/562 607/453/565 489/443/555
-f 464/440/552 489/443/555 607/453/565 465/454/566
-f 483/456/568 400/417/529 586/416/528 754/455/567
-f 668/458/570 546/459/571 408/460/572 490/457/569
-f 700/461/573 552/462/574 408/460/572 546/459/571
-f 701/415/526 547/463/575 409/464/576 586/416/528
-f 668/458/570 490/457/569 409/464/576 547/463/575
-f 493/466/578 494/467/579 410/468/580 491/465/577
-f 669/469/581 548/470/582 410/468/580 494/467/579
-f 700/471/573 546/472/571 410/468/580 548/470/582
-f 668/473/570 491/465/577 410/468/580 546/472/571
-f 493/466/578 491/465/577 411/475/584 492/474/583
-f 668/473/570 547/476/575 411/475/584 491/465/577
-f 701/412/526 585/411/525 411/475/584 547/476/575
-f 584/409/523 492/474/583 411/475/584 585/411/525
-f 634/408/522 598/477/585 492/474/583 584/409/523
-f 635/478/586 493/466/578 492/474/583 598/477/585
-f 494/467/579 493/466/578 412/479/587
-f 635/478/586 599/480/588 412/479/587 493/466/578
-f 714/481/589 549/482/590 412/479/587 599/480/588
-f 669/469/581 494/467/579 412/479/587 549/482/590
-f 660/484/592 458/485/593 413/486/594 495/483/591
-f 670/487/595 550/488/596 413/486/594 458/485/593
-f 700/471/573 548/470/582 413/486/594 550/488/596
-f 669/469/581 495/483/591 413/486/594 548/470/582
-f 660/484/592 495/483/591 414/490/598 496/489/597
-f 669/469/581 549/482/590 414/490/598 495/483/591
-f 714/481/589 600/491/599 414/490/598 549/482/590
-f 642/492/600 496/489/597 414/490/598 600/491/599
-f 611/494/602 590/495/603 644/496/604 724/493/601
-f 679/497/605 497/498/606 644/496/604 590/495/603
-f 679/497/605 591/499/607 415/500/608 497/498/606
-f 702/501/609 551/502/610 415/500/608 591/499/607
-f 661/504/612 500/505/613 416/506/614 498/503/611
-f 700/461/573 550/507/596 416/506/614 552/462/574
-f 670/508/595 498/503/611 416/506/614 550/507/596
-f 702/510/609 592/511/615 643/512/616 551/509/610
-f 680/513/617 499/514/618 643/512/616 592/511/615
-f 759/429/541 597/428/540 417/516/620 760/515/619
-f 661/504/612 760/515/619 417/516/620 500/505/613
-f 722/518/622 594/519/623 418/520/624 723/517/621
-f 611/494/602 724/493/601 418/520/624 594/519/623
-f 641/522/626 457/523/627 419/524/628 501/521/625
-f 642/492/600 600/491/599 419/524/628 457/523/627
-f 714/481/589 553/525/629 419/524/628 600/491/599
-f 652/526/630 501/521/625 419/524/628 553/525/629
-f 503/528/632 420/529/633 554/530/634 671/527/631
-f 715/531/635 718/532/636 554/530/634 420/529/633
-f 503/528/632 671/527/631 555/534/638 502/533/637
-f 692/536/640 502/533/637 555/534/638 706/535/639
-f 711/537/641 605/538/642 502/533/637 692/536/640
-f 684/539/643 503/528/632 502/533/637 605/538/642
-f 684/539/643 606/540/644 420/529/633 503/528/632
-f 720/541/645 715/531/635 420/529/633 606/540/644
-f 671/527/631 554/530/634 421/543/647 662/542/646
-f 718/532/636 716/544/648 421/543/647 554/530/634
-f 662/542/646 421/543/647 422/546/650 504/545/649
-f 716/544/648 466/547/651 422/546/650 421/543/647
-f 473/548/652 616/549/653 422/546/650 466/547/651
-f 689/550/654 504/545/649 422/546/650 616/549/653
-f 662/542/646 504/545/649 423/552/656 505/551/655
-f 504/545/649 689/550/654 423/552/656
-f 712/553/657 619/554/658 423/552/656 689/550/654
-f 691/555/659 505/551/655 423/552/656 619/554/658
-f 706/535/639 555/534/638 505/551/655 691/555/659
-f 671/527/631 662/542/646 505/551/655 555/534/638
-f 460/557/661 594/519/623 722/518/622 732/556/660
-f 663/558/662 636/559/663 606/540/644 684/539/643
-f 717/560/664 720/541/645 606/540/644 636/559/663
-f 663/558/662 684/539/643 605/538/642 506/561/665
-f 686/562/666 506/561/665 605/538/642 711/537/641
-f 663/558/662 506/561/665 424/564/668 637/563/667
-f 506/561/665 686/562/666 424/564/668
-f 704/565/669 556/566/670 424/564/668 686/562/666
-f 730/567/671 637/563/667 424/564/668 556/566/670
-f 459/569/673 591/499/607 679/497/605 646/568/672
-f 728/571/675 558/572/676 508/573/677 672/570/674
-f 726/574/678 507/575/679 508/573/677 558/572/676
-f 726/574/678 559/576/680 425/577/681 507/575/679
-f 704/565/669 686/562/666 425/577/681 559/576/680
-f 507/575/679 425/577/681 601/579/683 682/578/682
-f 686/562/666 711/537/641 601/579/683 425/577/681
-f 507/575/679 682/578/682 602/580/684 508/573/677
-f 672/570/674 508/573/677 602/580/684 703/581/685
-f 673/583/687 560/584/688 426/585/689 665/582/686
-f 728/586/675 672/587/674 426/585/689 560/584/688
-f 665/582/686 426/585/689 603/589/691 683/588/690
-f 672/587/674 703/590/685 603/589/691 426/585/689
-f 665/582/686 683/588/690 604/592/693 509/591/692
-f 609/449/561 509/591/692 604/592/693 610/452/564
-f 729/448/560 561/593/694 509/591/692 609/449/561
-f 673/583/687 665/582/686 509/591/692 561/593/694
-f 564/595/696 565/596/697 511/597/698 674/594/695
-f 513/598/699 510/599/700 511/597/698 565/596/697
-f 513/598/699 566/600/701 427/601/702 510/599/700
-f 628/602/703 629/603/704 427/601/702 566/600/701
-f 510/599/700 427/601/702 615/605/706 688/604/705
-f 629/603/704 630/606/707 615/605/706 427/601/702
-f 510/599/700 688/604/705 614/607/708 511/597/698
-f 674/594/695 511/597/698 614/607/708 705/608/709
-f 675/610/711 562/611/712 428/612/713 666/609/710
-f 564/613/696 674/614/695 428/612/713 562/611/712
-f 666/609/710 428/612/713 613/616/715 687/615/714
-f 674/614/695 705/617/709 613/616/715 428/612/713
-f 666/609/710 687/615/714 612/619/717 512/618/716
-f 698/620/718 512/618/716 612/619/717 712/553/657
-f 709/621/719 563/622/720 512/618/716 698/620/718
-f 675/610/711 666/609/710 512/618/716 563/622/720
-f 695/623/721 622/624/722 562/611/712 675/610/711
-f 708/625/723 564/613/696 562/611/712 622/624/722
-f 695/623/721 675/610/711 563/622/720 621/626/724
-f 699/627/725 621/626/724 563/622/720 709/621/719
-f 696/629/727 513/598/699 565/596/697 623/628/726
-f 708/630/723 623/628/726 565/596/697 564/595/696
-f 696/629/727 624/631/728 566/600/701 513/598/699
-f 713/632/729 628/602/703 566/600/701 624/631/728
-f 515/634/731 429/635/732 572/636/733 677/633/730
-f 568/637/734 567/638/735 572/636/733 429/635/732
-f 515/634/731 677/633/730 573/640/737 514/639/736
-f 694/642/739 514/639/736 573/640/737 707/641/738
-f 610/452/564 604/592/693 514/639/736 694/642/739
-f 683/588/690 515/634/731 514/639/736 604/592/693
-f 683/588/690 603/589/691 429/635/732 515/634/731
-f 703/590/685 568/637/734 429/635/732 603/589/691
-f 517/644/741 518/645/742 569/646/743 516/643/740
-f 568/648/734 516/643/740 569/646/743 567/647/735
-f 703/581/685 602/580/684 516/643/740 568/648/734
-f 682/578/682 517/644/741 516/643/740 602/580/684
-f 682/578/682 601/579/683 430/649/744 517/644/741
-f 711/537/641 692/536/640 430/649/744 601/579/683
-f 517/644/741 430/649/744 570/650/745 518/645/742
-f 692/536/640 706/535/639 570/650/745 430/649/744
-f 567/647/735 569/646/743 521/652/747 676/651/746
-f 518/645/742 519/653/748 521/652/747 569/646/743
-f 518/645/742 570/650/745 431/654/749 519/653/748
-f 706/535/639 691/555/659 431/654/749 570/650/745
-f 519/653/748 431/654/749 432/656/751 520/655/750
-f 691/555/659 619/554/658 432/656/751 431/654/749
-f 712/553/657 612/619/717 432/656/751 619/554/658
-f 687/615/714 520/655/750 432/656/751 612/619/717
-f 519/653/748 520/655/750 433/657/752 521/652/747
-f 687/615/714 613/616/715 433/657/752 520/655/750
-f 705/617/709 571/658/753 433/657/752 613/616/715
-f 676/651/746 521/652/747 433/657/752 571/658/753
-f 677/633/730 572/636/733 434/660/755 667/659/754
-f 567/638/735 676/661/746 434/660/755 572/636/733
-f 667/659/754 434/660/755 435/663/757 522/662/756
-f 676/661/746 571/664/753 435/663/757 434/660/755
-f 705/608/709 614/607/708 435/663/757 571/664/753
-f 688/604/705 522/662/756 435/663/757 614/607/708
-f 667/659/754 522/662/756 436/666/759 523/665/758
-f 688/604/705 615/605/706 436/666/759 522/662/756
-f 630/606/707 620/667/760 436/666/759 615/605/706
-f 693/668/761 523/665/758 436/666/759 620/667/760
-f 707/641/738 573/640/737 523/665/758 693/668/761
-f 677/633/730 667/659/754 523/665/758 573/640/737
-f 525/670/763 526/671/764 574/672/765 524/669/762
-f 468/674/767 524/669/762 574/672/765 467/673/766
-f 465/454/566 607/453/565 524/669/762 468/674/767
-f 685/450/562 525/670/763 524/669/762 607/453/565
-f 685/450/562 608/451/563 437/675/768 525/670/763
-f 610/452/564 694/642/739 437/675/768 608/451/563
-f 525/670/763 437/675/768 575/676/769 526/671/764
-f 694/642/739 707/641/738 575/676/769 437/675/768
-f 467/673/766 574/672/765 529/678/771 469/677/770
-f 526/671/764 527/679/772 529/678/771 574/672/765
-f 526/671/764 575/676/769 438/680/773 527/679/772
-f 707/641/738 693/668/761 438/680/773 575/676/769
-f 527/679/772 438/680/773 439/682/775 528/681/774
-f 693/668/761 620/667/760 439/682/775 438/680/773
-f 630/606/707 618/683/776 439/682/775 620/667/760
-f 690/684/777 528/681/774 439/682/775 618/683/776
-f 527/679/772 528/681/774 440/685/778 529/678/771
-f 690/684/777 617/686/779 440/685/778 528/681/774
-f 721/687/780 470/688/781 440/685/778 617/686/779
-f 469/677/770 529/678/771 440/685/778 470/688/781
-f 532/690/783 443/691/784 441/692/785 530/689/782
-f 577/693/786 576/694/787 441/692/785 443/691/784
-f 532/690/783 530/689/782 442/696/789 531/695/788
-f 697/698/791 531/695/788 442/696/789 627/697/790
-f 713/632/729 624/631/728 531/695/788 697/698/791
-f 696/629/727 532/690/783 531/695/788 624/631/728
-f 696/629/727 623/628/726 443/691/784 532/690/783
-f 708/630/723 577/693/786 443/691/784 623/628/726
-f 534/700/793 535/701/794 444/702/795 533/699/792
-f 577/704/786 533/699/792 444/702/795 576/703/787
-f 708/625/723 622/624/722 533/699/792 577/704/786
-f 695/623/721 534/700/793 533/699/792 622/624/722
-f 695/623/721 621/626/724 445/705/796 534/700/793
-f 699/627/725 625/706/797 445/705/796 621/626/724
-f 534/700/793 445/705/796 446/707/798 535/701/794
-f 625/706/797 626/708/799 446/707/798 445/705/796
-f 579/710/801 578/711/802 447/712/803 537/709/800
-f 537/709/800 447/712/803 448/714/805 536/713/804
-f 447/712/803 471/715/806 448/714/805
-f 721/687/780 617/686/779 448/714/805 471/715/806
-f 690/684/777 536/713/804 448/714/805 617/686/779
-f 690/684/777 618/683/776 536/713/804
-f 618/683/776 630/606/707 536/713/804
-f 629/603/704 537/709/800 536/713/804 630/606/707
-f 628/602/703 579/710/801 537/709/800 629/603/704
-f 538/716/807 449/717/808 578/711/802 579/710/801
-f 713/632/729 538/716/807 579/710/801 628/602/703
-f 713/632/729 697/698/791 538/716/807
-f 697/698/791 627/697/790 449/717/808 538/716/807
-f 474/719/810 580/720/811 540/721/812 472/718/809
-f 450/722/813 539/723/814 540/721/812 580/720/811
-f 709/621/719 698/620/718 539/723/814 450/722/813
-f 698/620/718 712/553/657 689/550/654 539/723/814
-f 539/723/814 689/550/654 616/549/653 540/721/812
-f 472/718/809 540/721/812 616/549/653 473/548/652
-f 541/725/816 450/722/813 580/720/811 475/724/815
-f 474/719/810 475/724/815 580/720/811
-f 625/706/797 541/725/816 475/724/815 626/708/799
-f 625/706/797 699/627/725 541/725/816
-f 699/627/725 709/621/719 450/722/813 541/725/816
-f 652/526/630 553/525/629 452/726/817
-f 714/481/589 632/727/818 452/726/817 553/525/629
-f 632/727/818 714/481/589 599/480/588
-f 663/558/662 637/563/667 453/729/820 638/728/819
-f 637/563/667 730/567/671 453/729/820
-f 730/567/671 732/556/660 454/731/822 648/730/821
-f 636/559/663 663/558/662 638/728/819
-f 717/560/664 636/559/663 638/728/819 476/732/823
-f 651/733/824 838/734/825 655/735/826
-f 723/517/621 641/522/626 455/737/828 654/736/827
-f 652/526/630 451/739/830 456/740/831 640/738/829
-f 479/741/832 477/742/833 456/740/831 451/739/830
-f 501/521/625 652/526/630 640/738/829
-f 641/522/626 501/521/625 640/738/829 455/737/828
-f 723/517/621 418/520/624 457/523/627 641/522/626
-f 724/493/601 642/492/600 457/523/627 418/520/624
-f 551/509/610 643/512/616 498/503/611 670/508/595
-f 499/514/618 661/504/612 498/503/611 643/512/616
-f 497/498/606 415/500/608 458/485/593 660/484/592
-f 551/502/610 670/487/595 458/485/593 415/500/608
-f 724/493/601 644/496/604 496/489/597 642/492/600
-f 497/498/606 660/484/592 496/489/597 644/496/604
-f 722/518/622 723/517/621 654/736/827 639/743/834
-f 704/565/669 559/576/680 649/745/836 731/744/835
-f 726/574/678 646/568/672 649/745/836 559/576/680
-f 726/574/678 558/572/676 459/569/673 646/568/672
-f 728/571/675 557/746/837 459/569/673 558/572/676
-f 673/583/687 561/593/694 767/748/839 664/747/838
-f 729/448/560 647/749/840 767/748/839 561/593/694
-f 767/748/839 647/749/840 710/751/842 593/750/841
-f 728/586/675 560/584/688 650/753/843 557/752/837
-f 673/583/687 664/747/838 650/753/843 560/584/688
-f 730/567/671 556/566/670 460/557/661 732/556/660
-f 704/565/669 731/744/835 460/557/661 556/566/670
-f 768/755/845 645/756/846 681/757/847 596/754/844
-f 729/448/560 545/446/558 768/755/845 647/749/840
-f 725/444/556 645/756/846 768/755/845 545/446/558
-f 645/756/846 769/758/848 595/759/849 681/757/847
-f 725/444/556 544/442/554 769/758/848 645/756/846
-f 727/441/553 770/760/850 769/758/848 544/442/554
-f 769/758/848 770/760/850 719/761/851 595/759/849
-f 453/729/820 730/567/671 648/730/821
-f 649/745/836 646/568/672 679/497/605 590/495/603
-f 731/744/835 649/745/836 590/495/603 611/494/602
-f 459/569/673 557/746/837 702/501/609 591/499/607
-f 650/753/843 664/747/838 680/513/617 592/511/615
-f 557/752/837 650/753/843 592/511/615 702/510/609
-f 460/557/661 731/744/835 611/494/602 594/519/623
-f 647/749/840 768/755/845 596/754/844 710/751/842
-f 655/735/826 732/556/660 651/733/824
-f 454/731/822 732/556/660 655/735/826
-f 792/763/853 791/764/854 658/765/855 733/762/852
-f 793/766/856 794/767/857 658/765/855
-f 795/768/858 789/769/859 658/765/855
-f 797/770/860 796/771/861 656/772/862
-f 799/773/863 798/774/864 656/772/862
-f 801/775/865 800/776/866 656/772/862
-f 788/777/867 802/778/868 656/772/862
-f 803/779/869 804/780/870 656/772/862
-f 791/764/854 793/766/856 658/765/855
-f 794/767/857 795/768/858 658/765/855
-f 789/769/859 790/781/871 658/765/855
-f 792/763/853 733/762/852 656/772/862 796/771/861
-f 798/774/864 797/770/860 656/772/862
-f 800/776/866 799/773/863 656/772/862
-f 802/778/868 803/779/869 656/772/862
-f 804/780/870 801/775/865 656/772/862
-f 805/782/872 806/783/873 658/765/855
-f 790/781/871 805/782/872 658/765/855
-f 657/785/875 461/786/876 751/787/877 734/784/874
-f 461/786/876 487/788/878 752/789/879 751/787/877
-f 487/788/878 406/790/880 753/791/881 752/789/879
-f 406/790/880 587/792/882 735/793/883 753/791/881
-f 735/793/883 587/792/882 401/795/885 736/794/884
-f 736/794/884 401/795/885 483/456/568 754/455/567
-f 500/505/613 417/516/620 743/797/887 737/796/886
-f 417/516/620 597/428/540 742/798/888 743/797/887
-f 742/798/888 597/428/540 405/426/538 738/799/889
-f 738/799/889 405/426/538 484/422/534 739/800/890
-f 739/800/890 484/422/534 404/425/537 740/801/891
-f 741/802/892 740/801/891 404/425/537 462/431/543
-f 744/803/893 745/804/894 740/801/891 741/802/892
-f 745/804/894 746/805/895 739/800/890 740/801/891
-f 746/805/895 747/806/896 738/799/889 739/800/890
-f 747/806/896 748/807/897 742/798/888 738/799/889
-f 743/797/887 742/798/888 748/807/897 749/808/898
-f 737/796/886 743/797/887 749/808/898 750/809/899
-f 734/784/874 751/787/877 745/804/894 744/803/893
-f 751/787/877 752/789/879 746/805/895 745/804/894
-f 752/789/879 753/791/881 747/806/896 746/805/895
-f 753/791/881 735/793/883 748/807/897 747/806/896
-f 749/808/898 748/807/897 735/793/883 736/794/884
-f 750/809/899 749/808/898 736/794/884 754/455/567
-f 754/455/567 586/416/528 409/464/576
-f 750/809/899 754/455/567 409/464/576 490/457/569
-f 408/460/572 737/796/886 750/809/899 490/457/569
-f 408/460/572 552/462/574 737/796/886
-f 416/506/614 500/505/613 737/796/886 552/462/574
-f 593/750/841 710/751/842 765/811/901 766/810/900
-f 710/751/842 596/754/844 764/812/902 765/811/901
-f 596/754/844 681/757/847 762/813/903 764/812/902
-f 681/757/847 595/759/849 763/814/904 762/813/903
-f 595/759/849 719/761/851 761/815/905 763/814/904
-f 763/814/904 761/815/905 756/430/542 757/424/536
-f 762/813/903 763/814/904 757/424/536 755/423/535
-f 764/812/902 762/813/903 755/423/535 758/427/539
-f 765/811/901 764/812/902 758/427/539 759/429/541
-f 766/810/900 765/811/901 759/429/541 760/515/619
-f 680/513/617 593/750/841 766/810/900 499/514/618
-f 499/514/618 766/810/900 760/515/619 661/504/612
-f 664/747/838 767/748/839 593/750/841 680/513/617
-f 485/434/546 659/433/545 773/817/907 787/816/906
-f 631/419/531 485/434/546 787/816/906 779/818/908
-f 486/436/548 478/439/551 771/820/910 772/819/909
-f 659/433/545 486/436/548 772/819/909 773/817/907
-f 451/739/830 652/526/630 774/821/911
-f 452/726/817 632/727/818 776/823/913 775/822/912
-f 652/526/630 452/726/817 775/822/912 774/821/911
-f 581/420/532 631/419/531 779/818/908 777/824/914
-f 653/403/517 581/420/532 777/824/914 778/825/915
-f 582/404/518 653/403/517 778/825/915 780/826/916
-f 633/405/519 582/404/518 780/826/916 781/827/917
-f 583/406/520 633/405/519 781/827/917 782/828/918
-f 634/408/522 583/406/520 782/828/918 783/829/919
-f 598/477/585 634/408/522 783/829/919 784/830/920
-f 635/478/586 598/477/585 784/830/920 785/831/921
-f 599/480/588 635/478/586 785/831/921 786/832/922
-f 632/727/818 599/480/588 786/832/922 776/823/913
-f 397/401/515 482/400/514 792/834/924 796/833/923
-f 543/402/516 397/401/515 796/833/923 797/835/925
-f 792/834/924 482/400/514 399/410/524 542/413/527
-f 400/417/529 483/456/568 793/837/927 791/836/926
-f 542/414/527 400/417/529 791/836/926 792/838/924
-f 483/456/568 401/795/885 794/839/928 793/837/927
-f 401/795/885 587/792/882 795/840/929 794/839/928
-f 402/421/533 543/402/516 797/835/925 798/841/930
-f 588/418/530 402/421/533 798/841/930 799/842/931
-f 800/843/932 588/418/530 799/842/931
-f 801/844/933 588/418/530 800/843/932
-f 403/437/549 678/432/544 803/846/935 802/845/934
-f 463/438/550 403/437/549 802/845/934 788/847/936
-f 589/435/547 588/418/530 801/844/933 804/848/937
-f 678/432/544 589/435/547 804/848/937 803/846/935
-f 406/790/880 487/788/878 790/850/939 789/849/938
-f 587/792/882 406/790/880 789/849/938 795/840/929
-f 461/786/876 657/785/875 806/852/941 805/851/940
-f 487/788/878 461/786/876 805/851/940 790/850/939
-f 820/854/943 819/855/944 807/856/945 808/853/942
-f 835/858/947 836/859/948 809/860/949 810/857/946
-f 842/862/951 841/863/952 811/864/953 812/861/950
-f 837/866/955 838/867/825 813/868/956 814/865/954
-f 830/870/958 829/871/959 815/872/960 816/869/957
-f 818/873/961 817/874/962 816/869/957 815/872/960
-f 823/875/963 824/876/964 817/874/962 818/873/961
-f 822/877/965 821/878/966 819/855/944 820/854/943
-f 828/879/967 827/880/968 821/878/966 822/877/965
-f 825/881/969 826/882/970 824/876/964 823/875/963
-f 827/880/968 828/879/967 826/882/970 825/881/969
-f 832/883/971 831/884/972 829/871/959 830/870/958
-f 834/885/973 833/886/974 831/884/972 832/883/971
-f 836/859/948 835/858/947 833/886/974 834/885/973
-f 840/887/975 839/888/976 838/867/825 837/866/955
-f 853/889/977 854/890/978 839/888/976 840/887/975
-f 844/891/979 843/892/980 841/863/952 842/862/951
-f 846/893/981 845/894/982 843/892/980 844/891/979
-f 848/895/983 847/896/984 845/894/982 846/893/981
-f 850/897/985 849/898/986 847/896/984 848/895/983
-f 852/899/987 851/900/988 849/898/986 850/897/985
-f 858/901/989 857/902/990 851/900/988 852/899/987
-f 856/903/991 855/904/992 854/890/978 853/889/977
-f 857/902/990 858/901/989 855/904/992 856/903/991
-f 848/905/983 846/906/981 453/729/820
-f 844/907/979 638/728/819 453/729/820 846/906/981
-f 855/908/992 858/909/989 454/731/822
-f 852/910/987 648/730/821 454/731/822 858/909/989
-f 844/907/979 842/911/951 638/728/819
-f 812/912/950 476/732/823 638/728/819 842/911/951
-f 639/743/834 828/913/967 822/914/965 651/733/824
-f 830/915/958 816/916/957 455/737/828
-f 817/917/962 654/736/827 455/737/828 816/916/957
-f 809/918/949 836/919/948 456/740/831 477/742/833
-f 834/920/973 640/738/829 456/740/831 836/919/948
-f 834/920/973 832/921/971 640/738/829
-f 830/915/958 455/737/828 640/738/829 832/921/971
-f 817/917/962 824/922/964 654/736/827
-f 826/923/970 639/743/834 654/736/827 824/922/964
-f 852/910/987 850/924/985 648/730/821
-f 848/905/983 453/729/820 648/730/821 850/924/985
-f 826/923/970 828/913/967 639/743/834
-f 855/908/992 454/731/822 655/735/826 854/925/978
-f 808/927/942 813/928/956 838/734/825 820/926/943
-f 839/929/976 854/925/978 655/735/826
-f 822/914/965 820/926/943 838/734/825 651/733/824
-f 838/734/825 839/929/976 655/735/826
-f 859/930/993 860/931/994 479/741/994 451/739/993
-f 861/932/995 859/930/993 451/739/993 774/821/995
-f 862/933/996 861/932/995 774/821/995 775/822/996
-f 863/934/997 862/933/996 775/822/996 776/823/997
-f 864/935/998 863/934/997 776/823/997 786/832/998
-f 865/936/999 864/935/998 786/832/998 785/831/999
-f 866/937/1000 865/936/999 785/831/999 784/830/1000
-f 867/938/1001 866/937/1000 784/830/1000 783/829/1001
-f 868/939/1002 867/938/1001 783/829/1001 782/828/1002
-f 869/940/1003 868/939/1002 782/828/1002 781/827/1003
-f 870/941/1004 869/940/1003 781/827/1003 780/826/1004
-f 871/942/1005 870/941/1004 780/826/1004 778/825/1005
-f 872/943/1006 871/942/1005 778/825/1005 777/824/1006
-f 873/944/1007 872/943/1006 777/824/1006 779/818/1007
-f 874/945/1008 873/944/1007 779/818/1007 787/816/1008
-f 875/946/1009 874/945/1008 787/816/1008 773/817/1009
-f 876/947/1010 875/946/1009 773/817/1009 772/819/1010
-f 877/948/1011 876/947/1010 772/819/1010 771/820/1011
-f 938/950/1013 937/951/1014 878/952/1015 939/949/1012
-f 937/951/1014 997/953/1016 878/952/1015
-f 1103/955/1018 997/953/1016 937/951/1014 1034/954/1017
-f 1083/956/1019 1034/954/1017 937/951/1014 938/950/1013
-f 1083/956/1019 938/950/1013 879/958/1021 1035/957/1020
-f 1084/960/1023 1035/957/1020 879/958/1021 1036/959/1022
-f 938/950/1013 939/949/1012 880/961/1024 879/958/1021
-f 1036/959/1022 879/958/1021 880/961/1024 1037/962/1025
-f 1149/964/1027 1037/962/1025 880/961/1024 996/963/1026
-f 1149/966/1027 996/967/1026 881/968/1029 1038/965/1028
-f 1081/970/1031 1040/971/1032 883/972/1033 1033/969/1030
-f 1103/955/1018 1033/969/1030 883/972/1033 997/953/1016
-f 1191/974/1035 941/975/1036 885/976/1037 1192/973/1034
-f 1193/977/1038 886/978/1039 941/975/1036 1191/974/1035
-f 1194/979/1040 1049/980/1041 886/978/1039 1193/977/1038
-f 756/430/542 1192/973/1034 885/976/1037 462/431/543
-f 1106/982/1043 1126/983/1044 1041/984/1045 942/981/1042
-f 1081/970/1031 942/981/1042 1041/984/1045 1040/971/1032
-f 1106/982/1043 943/985/1046 884/986/1047 1126/983/1044
-f 478/439/551 463/438/550 884/986/1047 943/985/1046
-f 727/441/553 464/440/552 946/988/1049 998/987/1048
-f 1166/990/1051 998/987/1048 946/988/1049 945/989/1050
-f 1166/990/1051 945/989/1050 888/992/1053 999/991/1052
-f 1169/994/1055 999/991/1052 888/992/1053 1061/993/1054
-f 945/989/1050 1133/995/1056 1060/996/1057 888/992/1053
-f 1061/993/1054 888/992/1053 1060/996/1057 1062/997/1058
-f 945/989/1050 946/988/1049 1059/998/1059 1133/995/1056
-f 464/440/552 465/454/566 1059/998/1059 946/988/1049
-f 940/999/1060 1190/1000/1061 1038/965/1028 881/968/1029
-f 1115/1002/1063 947/1003/1064 889/1004/1065 1000/1001/1062
-f 1148/1006/1067 1000/1001/1062 889/1004/1065 1006/1005/1066
-f 1149/966/1027 1038/965/1028 890/1008/1069 1001/1007/1068
-f 1115/1002/1063 1001/1007/1068 890/1008/1069 947/1003/1064
-f 950/1010/1071 948/1011/1072 891/1012/1073 951/1009/1070
-f 1116/1014/1075 951/1009/1070 891/1012/1073 1002/1013/1074
-f 1148/1016/1067 1002/1013/1074 891/1012/1073 1000/1015/1062
-f 1115/1017/1063 1000/1015/1062 891/1012/1073 948/1011/1072
-f 950/1010/1071 949/1018/1076 892/1019/1077 948/1011/1072
-f 1115/1017/1063 948/1011/1072 892/1019/1077 1001/1020/1068
-f 1149/964/1027 1001/1020/1068 892/1019/1077 1037/962/1025
-f 1036/959/1022 1037/962/1025 892/1019/1077 949/1018/1076
-f 1084/960/1023 1036/959/1022 949/1018/1076 1050/1021/1078
-f 1085/1022/1079 1050/1021/1078 949/1018/1076 950/1010/1071
-f 950/1010/1071 951/1009/1070 893/1023/1080
-f 1085/1022/1079 950/1010/1071 893/1023/1080 1051/1024/1081
-f 1162/1026/1083 1051/1024/1081 893/1023/1080 1003/1025/1082
-f 1116/1014/1075 1003/1025/1082 893/1023/1080 951/1009/1070
-f 1107/1028/1085 952/1029/1086 894/1030/1087 933/1027/1084
-f 1117/1032/1089 933/1027/1084 894/1030/1087 1004/1031/1088
-f 1148/1016/1067 1004/1031/1088 894/1030/1087 1002/1013/1074
-f 1116/1014/1075 1002/1013/1074 894/1030/1087 952/1029/1086
-f 1107/1028/1085 953/1033/1090 895/1034/1091 952/1029/1086
-f 1116/1014/1075 952/1029/1086 895/1034/1091 1003/1025/1082
-f 1162/1026/1083 1003/1025/1082 895/1034/1091 1052/1035/1092
-f 1092/1036/1093 1052/1035/1092 895/1034/1091 953/1033/1090
-f 1063/1038/1095 1165/1039/1096 1094/1040/1097 1042/1037/1094
-f 1127/1042/1099 1042/1037/1094 1094/1040/1097 954/1041/1098
-f 1127/1042/1099 954/1041/1098 896/1044/1101 1043/1043/1100
-f 1150/1046/1103 1043/1043/1100 896/1044/1101 1005/1045/1102
-f 1108/1048/1105 955/1049/1106 897/1050/1107 957/1047/1104
-f 1148/1006/1067 1006/1005/1066 897/1050/1107 1004/1051/1088
-f 1117/1052/1089 1004/1051/1088 897/1050/1107 955/1049/1106
-f 1150/1054/1103 1005/1055/1102 1093/1056/1109 1044/1053/1108
-f 1128/1058/1111 1044/1053/1108 1093/1056/1109 956/1057/1110
-f 1194/979/1040 1195/1059/1112 898/1060/1113 1049/980/1041
-f 1108/1048/1105 957/1047/1104 898/1060/1113 1195/1059/1112
-f 1163/1062/1115 1164/1063/1116 899/1064/1117 1046/1061/1114
-f 1063/1038/1095 1046/1061/1114 899/1064/1117 1165/1039/1096
-f 1091/1066/1119 958/1067/1120 900/1068/1121 932/1065/1118
-f 1092/1036/1093 932/1065/1118 900/1068/1121 1052/1035/1092
-f 1162/1026/1083 1052/1035/1092 900/1068/1121 1007/1069/1122
-f 1102/1070/1123 1007/1069/1122 900/1068/1121 958/1067/1120
-f 960/1072/1125 1118/1073/1126 1008/1074/1127 901/1071/1124
-f 715/531/635 901/1071/1124 1008/1074/1127 718/532/636
-f 960/1072/1125 959/1075/1128 1009/1076/1129 1118/1073/1126
-f 1140/1077/1130 1154/1078/1131 1009/1076/1129 959/1075/1128
-f 1159/1080/1133 1140/1077/1130 959/1075/1128 1057/1079/1132
-f 1132/1081/1134 1057/1079/1132 959/1075/1128 960/1072/1125
-f 1132/1081/1134 960/1072/1125 901/1071/1124 1058/1082/1135
-f 720/541/645 1058/1082/1135 901/1071/1124 715/531/635
-f 1118/1073/1126 1109/1083/1136 902/1084/1137 1008/1074/1127
-f 718/532/636 1008/1074/1127 902/1084/1137 716/544/648
-f 1109/1083/1136 961/1085/1138 903/1086/1139 902/1084/1137
-f 716/544/648 902/1084/1137 903/1086/1139 466/547/651
-f 473/548/652 466/547/651 903/1086/1139 1068/1087/1140
-f 1137/1088/1141 1068/1087/1140 903/1086/1139 961/1085/1138
-f 1109/1083/1136 962/1089/1142 904/1090/1143 961/1085/1138
-f 1137/1088/1141 961/1085/1138 904/1090/1143
-f 1160/1092/1145 1137/1088/1141 904/1090/1143 1071/1091/1144
-f 1139/1093/1146 1071/1091/1144 904/1090/1143 962/1089/1142
-f 1154/1078/1131 1139/1093/1146 962/1089/1142 1009/1076/1129
-f 1118/1073/1126 1009/1076/1129 962/1089/1142 1109/1083/1136
-f 1172/1095/1148 1163/1062/1115 1046/1061/1114 935/1094/1147
-f 1110/1097/1150 1132/1081/1134 1058/1082/1135 1086/1096/1149
-f 717/560/664 1086/1096/1149 1058/1082/1135 720/541/645
-f 1110/1097/1150 963/1098/1151 1057/1079/1132 1132/1081/1134
-f 1134/1099/1152 1159/1080/1133 1057/1079/1132 963/1098/1151
-f 1110/1097/1150 1087/1100/1153 905/1101/1154 963/1098/1151
-f 1134/1099/1152 963/1098/1151 905/1101/1154
-f 1152/1103/1156 1134/1099/1152 905/1101/1154 1010/1102/1155
-f 1170/1104/1157 1010/1102/1155 905/1101/1154 1087/1100/1153
-f 1111/1106/1159 1128/1058/1111 1045/1107/1160 1201/1105/1158
-f 1011/1109/1162 1150/1054/1103 1044/1053/1108 1100/1108/1161
-f 1096/1111/1164 1127/1042/1099 1043/1043/1100 934/1110/1163
-f 1171/1113/1166 1063/1038/1095 1042/1037/1094 1099/1112/1165
-f 1168/1115/1168 1119/1116/1169 965/1117/1170 1012/1114/1167
-f 1167/1119/1172 1012/1114/1167 965/1117/1170 964/1118/1171
-f 1167/1119/1172 964/1118/1171 906/1121/1174 1013/1120/1173
-f 1152/1103/1156 1013/1120/1173 906/1121/1174 1134/1099/1152
-f 964/1118/1171 1130/1122/1175 1053/1123/1176 906/1121/1174
-f 1134/1099/1152 906/1121/1174 1053/1123/1176 1159/1080/1133
-f 964/1118/1171 965/1117/1170 1054/1124/1177 1130/1122/1175
-f 1119/1116/1169 1151/1125/1178 1054/1124/1177 965/1117/1170
-f 1120/1127/1180 1112/1128/1181 907/1129/1182 1014/1126/1179
-f 1168/1131/1168 1014/1126/1179 907/1129/1182 1119/1130/1169
-f 1112/1128/1181 1131/1132/1183 1055/1133/1184 907/1129/1182
-f 1119/1130/1169 907/1129/1182 1055/1133/1184 1151/1134/1178
-f 1112/1128/1181 966/1135/1185 1056/1136/1186 1131/1132/1183
-f 1061/993/1054 1062/997/1058 1056/1136/1186 966/1135/1185
-f 1169/994/1055 1061/993/1054 966/1135/1185 1015/1137/1187
-f 1120/1127/1180 1015/1137/1187 966/1135/1185 1112/1128/1181
-f 1018/1139/1189 1121/1140/1190 968/1141/1191 1019/1138/1188
-f 970/1143/1193 1019/1138/1188 968/1141/1191 967/1142/1192
-f 970/1143/1193 967/1142/1192 908/1145/1195 1020/1144/1194
-f 1078/1147/1197 1020/1144/1194 908/1145/1195 1079/1146/1196
-f 967/1142/1192 1136/1148/1198 1067/1149/1199 908/1145/1195
-f 1079/1146/1196 908/1145/1195 1067/1149/1199 1080/1150/1200
-f 967/1142/1192 968/1141/1191 1066/1151/1201 1136/1148/1198
-f 1121/1140/1190 1153/1152/1202 1066/1151/1201 968/1141/1191
-f 1122/1154/1204 1113/1155/1205 909/1156/1206 1016/1153/1203
-f 1018/1158/1189 1016/1153/1203 909/1156/1206 1121/1157/1190
-f 1113/1155/1205 1135/1159/1207 1065/1160/1208 909/1156/1206
-f 1121/1157/1190 909/1156/1206 1065/1160/1208 1153/1161/1202
-f 1113/1155/1205 969/1162/1209 1064/1163/1210 1135/1159/1207
-f 1146/1164/1211 1160/1092/1145 1064/1163/1210 969/1162/1209
-f 1157/1166/1213 1146/1164/1211 969/1162/1209 1017/1165/1212
-f 1122/1154/1204 1017/1165/1212 969/1162/1209 1113/1155/1205
-f 1143/1168/1215 1122/1154/1204 1016/1153/1203 1074/1167/1214
-f 1156/1169/1216 1074/1167/1214 1016/1153/1203 1018/1158/1189
-f 1143/1168/1215 1073/1170/1217 1017/1165/1212 1122/1154/1204
-f 1147/1171/1218 1157/1166/1213 1017/1165/1212 1073/1170/1217
-f 1144/1172/1219 1075/1173/1220 1019/1138/1188 970/1143/1193
-f 1156/1174/1216 1018/1139/1189 1019/1138/1188 1075/1173/1220
-f 1144/1172/1219 970/1143/1193 1020/1144/1194 1076/1175/1221
-f 1161/1176/1222 1076/1175/1221 1020/1144/1194 1078/1147/1197
-f 972/1178/1224 1124/1179/1225 1026/1180/1226 910/1177/1223
-f 1022/1182/1228 910/1177/1223 1026/1180/1226 1021/1181/1227
-f 972/1178/1224 971/1183/1229 1027/1184/1230 1124/1179/1225
-f 1142/1185/1231 1155/1186/1232 1027/1184/1230 971/1183/1229
-f 1062/997/1058 1142/1185/1231 971/1183/1229 1056/1136/1186
-f 1131/1132/1183 1056/1136/1186 971/1183/1229 972/1178/1224
-f 1131/1132/1183 972/1178/1224 910/1177/1223 1055/1133/1184
-f 1151/1134/1178 1055/1133/1184 910/1177/1223 1022/1182/1228
-f 974/1188/1234 973/1189/1235 1023/1190/1236 975/1187/1233
-f 1022/1191/1228 1021/1192/1227 1023/1190/1236 973/1189/1235
-f 1151/1125/1178 1022/1191/1228 973/1189/1235 1054/1124/1177
-f 1130/1122/1175 1054/1124/1177 973/1189/1235 974/1188/1234
-f 1130/1122/1175 974/1188/1234 911/1193/1237 1053/1123/1176
-f 1159/1080/1133 1053/1123/1176 911/1193/1237 1140/1077/1130
-f 974/1188/1234 975/1187/1233 1024/1194/1238 911/1193/1237
-f 1140/1077/1130 911/1193/1237 1024/1194/1238 1154/1078/1131
-f 1021/1192/1227 1123/1195/1239 978/1196/1240 1023/1190/1236
-f 975/1187/1233 1023/1190/1236 978/1196/1240 976/1197/1241
-f 975/1187/1233 976/1197/1241 912/1198/1242 1024/1194/1238
-f 1154/1078/1131 1024/1194/1238 912/1198/1242 1139/1093/1146
-f 976/1197/1241 977/1199/1243 913/1200/1244 912/1198/1242
-f 1139/1093/1146 912/1198/1242 913/1200/1244 1071/1091/1144
-f 1160/1092/1145 1071/1091/1144 913/1200/1244 1064/1163/1210
-f 1135/1159/1207 1064/1163/1210 913/1200/1244 977/1199/1243
-f 976/1197/1241 978/1196/1240 914/1201/1245 977/1199/1243
-f 1135/1159/1207 977/1199/1243 914/1201/1245 1065/1160/1208
-f 1153/1161/1202 1065/1160/1208 914/1201/1245 1025/1202/1246
-f 1123/1195/1239 1025/1202/1246 914/1201/1245 978/1196/1240
-f 1124/1179/1225 1114/1203/1247 915/1204/1248 1026/1180/1226
-f 1021/1181/1227 1026/1180/1226 915/1204/1248 1123/1205/1239
-f 1114/1203/1247 979/1206/1249 916/1207/1250 915/1204/1248
-f 1123/1205/1239 915/1204/1248 916/1207/1250 1025/1208/1246
-f 1153/1152/1202 1025/1208/1246 916/1207/1250 1066/1151/1201
-f 1136/1148/1198 1066/1151/1201 916/1207/1250 979/1206/1249
-f 1114/1203/1247 980/1209/1251 917/1210/1252 979/1206/1249
-f 1136/1148/1198 979/1206/1249 917/1210/1252 1067/1149/1199
-f 1080/1150/1200 1067/1149/1199 917/1210/1252 1072/1211/1253
-f 1141/1212/1254 1072/1211/1253 917/1210/1252 980/1209/1251
-f 1155/1186/1232 1141/1212/1254 980/1209/1251 1027/1184/1230
-f 1124/1179/1225 1027/1184/1230 980/1209/1251 1114/1203/1247
-f 982/1214/1256 981/1215/1257 1028/1216/1258 983/1213/1255
-f 468/674/767 467/673/766 1028/1216/1258 981/1215/1257
-f 465/454/566 468/674/767 981/1215/1257 1059/998/1059
-f 1133/995/1056 1059/998/1059 981/1215/1257 982/1214/1256
-f 1133/995/1056 982/1214/1256 918/1217/1259 1060/996/1057
-f 1062/997/1058 1060/996/1057 918/1217/1259 1142/1185/1231
-f 982/1214/1256 983/1213/1255 1029/1218/1260 918/1217/1259
-f 1142/1185/1231 918/1217/1259 1029/1218/1260 1155/1186/1232
-f 467/673/766 469/677/770 986/1219/1261 1028/1216/1258
-f 983/1213/1255 1028/1216/1258 986/1219/1261 984/1220/1262
-f 983/1213/1255 984/1220/1262 919/1221/1263 1029/1218/1260
-f 1155/1186/1232 1029/1218/1260 919/1221/1263 1141/1212/1254
-f 984/1220/1262 985/1222/1264 920/1223/1265 919/1221/1263
-f 1141/1212/1254 919/1221/1263 920/1223/1265 1072/1211/1253
-f 1080/1150/1200 1072/1211/1253 920/1223/1265 1070/1224/1266
-f 1138/1225/1267 1070/1224/1266 920/1223/1265 985/1222/1264
-f 984/1220/1262 986/1219/1261 921/1226/1268 985/1222/1264
-f 1138/1225/1267 985/1222/1264 921/1226/1268 1069/1227/1269
-f 721/687/780 1069/1227/1269 921/1226/1268 470/688/781
-f 469/677/770 470/688/781 921/1226/1268 986/1219/1261
-f 988/1229/1271 530/689/782 441/692/785 922/1228/1270
-f 1030/1230/1272 922/1228/1270 441/692/785 576/694/787
-f 988/1229/1271 987/1231/1273 442/696/789 530/689/782
-f 1145/1232/1274 627/697/790 442/696/789 987/1231/1273
-f 1161/1176/1222 1145/1232/1274 987/1231/1273 1076/1175/1221
-f 1144/1172/1219 1076/1175/1221 987/1231/1273 988/1229/1271
-f 1144/1172/1219 988/1229/1271 922/1228/1270 1075/1173/1220
-f 1156/1174/1216 1075/1173/1220 922/1228/1270 1030/1230/1272
-f 990/1233/1275 989/1234/1276 444/702/795 535/701/794
-f 1030/1235/1272 576/703/787 444/702/795 989/1234/1276
-f 1156/1169/1216 1030/1235/1272 989/1234/1276 1074/1167/1214
-f 1143/1168/1215 1074/1167/1214 989/1234/1276 990/1233/1275
-f 1143/1168/1215 990/1233/1275 923/1236/1277 1073/1170/1217
-f 1147/1171/1218 1073/1170/1217 923/1236/1277 1077/1237/1278
-f 990/1233/1275 535/701/794 446/707/798 923/1236/1277
-f 1077/1237/1278 923/1236/1277 446/707/798 626/708/799
-f 1031/1238/1279 992/1239/1280 447/712/803 578/711/802
-f 992/1239/1280 991/1240/1281 924/1241/1282 447/712/803
-f 471/715/806 447/712/803 924/1241/1282
-f 721/687/780 471/715/806 924/1241/1282 1069/1227/1269
-f 1138/1225/1267 1069/1227/1269 924/1241/1282 991/1240/1281
-f 1070/1224/1266 1138/1225/1267 991/1240/1281
-f 1080/1150/1200 1070/1224/1266 991/1240/1281
-f 1079/1146/1196 1080/1150/1200 991/1240/1281 992/1239/1280
-f 1078/1147/1197 1079/1146/1196 992/1239/1280 1031/1238/1279
-f 925/1242/1283 1031/1238/1279 578/711/802 449/717/808
-f 1161/1176/1222 1078/1147/1197 1031/1238/1279 925/1242/1283
-f 1145/1232/1274 1161/1176/1222 925/1242/1283
-f 1145/1232/1274 925/1242/1283 449/717/808 627/697/790
-f 474/719/810 472/718/809 994/1244/1285 1032/1243/1284
-f 1125/1246/1287 1032/1243/1284 994/1244/1285 993/1245/1286
-f 1157/1166/1213 1125/1246/1287 993/1245/1286 1146/1164/1211
-f 1146/1164/1211 993/1245/1286 1137/1088/1141 1160/1092/1145
-f 993/1245/1286 994/1244/1285 1068/1087/1140 1137/1088/1141
-f 472/718/809 473/548/652 1068/1087/1140 994/1244/1285
-f 995/1247/1288 475/724/815 1032/1243/1284 1125/1246/1287
-f 475/724/815 474/719/810 1032/1243/1284
-f 1077/1237/1278 626/708/799 475/724/815 995/1247/1288
-f 1147/1171/1218 1077/1237/1278 995/1247/1288
-f 1147/1171/1218 995/1247/1288 1125/1246/1287 1157/1166/1213
-f 1007/1069/1122 1102/1070/1123 927/1248/1289
-f 1162/1026/1083 1007/1069/1122 927/1248/1289 1082/1249/1290
-f 1162/1026/1083 1082/1249/1290 1051/1024/1081
-f 877/948/1011 771/820/1011 1204/1251/1291 1297/1250/1291
-f 1297/1250/1291 1204/1251/1291 1205/1253/1292 1296/1252/1292
-f 1282/1255/1294 1206/1256/1294 926/1257/1293 1281/1254/1293
-f 1281/1254/1293 926/1257/1293 479/741/994 860/931/994
-f 1284/1259/1296 1208/1260/1296 1207/1261/1295 1283/1258/1295
-f 1283/1258/1295 1207/1261/1295 1206/1256/1294 1282/1255/1294
-f 1294/1263/1298 1211/1264/1298 1209/1265/1297 1293/1262/1297
-f 1293/1262/1297 1209/1265/1297 1210/1267/1299 1292/1266/1299
-f 1292/1266/1299 1210/1267/1299 1212/1269/1300 1291/1268/1300
-f 1291/1268/1300 1212/1269/1300 1213/1271/1301 1290/1270/1301
-f 1290/1270/1301 1213/1271/1301 1214/1273/1302 1289/1272/1302
-f 1289/1272/1302 1214/1273/1302 1215/1275/1303 1288/1274/1303
-f 1288/1274/1303 1215/1275/1303 1216/1277/1304 1287/1276/1304
-f 1287/1276/1304 1216/1277/1304 1217/1279/1305 1286/1278/1305
-f 1110/1097/1150 1088/1280/1306 928/1281/1307 1087/1100/1153
-f 1170/1104/1157 1087/1100/1153 928/1281/1307
-f 1170/1104/1157 1098/1282/1308 929/1283/1309 1172/1095/1148
-f 1110/1097/1150 1086/1096/1149 1088/1280/1306
-f 717/560/664 476/732/823 1088/1280/1306 1086/1096/1149
-f 1260/1284/1310 1101/1285/1311 1105/1286/1312
-f 1163/1062/1115 1172/1095/1148 1101/1285/1311 1089/1287/1313
-f 1164/1063/1116 1104/1288/1314 930/1289/1315 1091/1066/1119
-f 1102/1070/1123 1090/1290/1317 931/1291/1318 926/1257/1316
-f 479/741/832 926/1257/1316 931/1291/1318 477/742/833
-f 1102/1070/1123 958/1067/1120 1090/1290/1317
-f 1091/1066/1119 930/1289/1315 1090/1290/1317 958/1067/1120
-f 1164/1063/1116 1091/1066/1119 932/1065/1118 899/1064/1117
-f 1165/1039/1096 899/1064/1117 932/1065/1118 1092/1036/1093
-f 1005/1055/1102 1117/1052/1089 955/1049/1106 1093/1056/1109
-f 956/1057/1110 1093/1056/1109 955/1049/1106 1108/1048/1105
-f 954/1041/1098 1107/1028/1085 933/1027/1084 896/1044/1101
-f 1005/1045/1102 896/1044/1101 933/1027/1084 1117/1032/1089
-f 1165/1039/1096 1092/1036/1093 953/1033/1090 1094/1040/1097
-f 954/1041/1098 1094/1040/1097 953/1033/1090 1107/1028/1085
-f 1163/1062/1115 1089/1287/1313 1104/1288/1314 1164/1063/1116
-f 1152/1103/1156 1171/1113/1166 1099/1112/1165 1013/1120/1173
-f 1167/1119/1172 1013/1120/1173 1099/1112/1165 1096/1111/1164
-f 1167/1119/1172 1096/1111/1164 934/1110/1163 1012/1114/1167
-f 1168/1115/1168 1012/1114/1167 934/1110/1163 1011/1292/1162
-f 1120/1127/1180 1111/1106/1159 1201/1105/1158 1015/1137/1187
-f 1169/994/1055 1015/1137/1187 1201/1105/1158 1097/1293/1319
-f 1097/1293/1319 1201/1105/1158 1045/1107/1160 1158/1294/1320
-f 1168/1131/1168 1011/1109/1162 1100/1108/1161 1014/1126/1179
-f 1120/1127/1180 1014/1126/1179 1100/1108/1161 1111/1106/1159
-f 1170/1104/1157 1172/1095/1148 935/1094/1147 1010/1102/1155
-f 1152/1103/1156 1010/1102/1155 935/1094/1147 1171/1113/1166
-f 1095/1296/1322 1202/1297/1323 1048/1298/1324 1129/1295/1321
-f 1169/994/1055 1097/1293/1319 1202/1297/1323 999/991/1052
-f 1166/990/1051 999/991/1052 1202/1297/1323 1095/1296/1322
-f 1203/1300/1326 1095/1296/1322 1129/1295/1321 1047/1299/1325
-f 1166/990/1051 1095/1296/1322 1203/1300/1326 998/987/1048
-f 727/441/553 998/987/1048 1203/1300/1326 770/760/850
-f 770/760/850 1203/1300/1326 1047/1299/1325 719/761/851
-f 1170/1104/1157 928/1281/1307 1098/1282/1308
-f 1096/1111/1164 1099/1112/1165 1042/1037/1094 1127/1042/1099
-f 1011/1292/1162 934/1110/1163 1043/1043/1100 1150/1046/1103
-f 1111/1106/1159 1100/1108/1161 1044/1053/1108 1128/1058/1111
-f 1171/1113/1166 935/1094/1147 1046/1061/1114 1063/1038/1095
-f 1202/1297/1323 1097/1293/1319 1158/1294/1320 1048/1298/1324
-f 1172/1095/1148 929/1283/1309 1105/1286/1312
-f 1296/1252/1292 1205/1253/1292 1219/1302/1327 1295/1301/1327
-f 1295/1301/1327 1219/1302/1327 1211/1264/1298 1294/1263/1298
-f 1223/1304/1329 733/762/852 658/765/855 1222/1303/1328
-f 1224/1305/1330 1222/1303/1328 658/765/855
-f 1225/1306/1331 1224/1305/1330 658/765/855
-f 1226/1307/1332 1225/1306/1331 658/765/855
-f 1220/1308/1333 1226/1307/1332 658/765/855
-f 1227/1309/1334 1228/1310/1335 656/772/862
-f 1223/1304/1329 1227/1309/1334 656/772/862 733/762/852
-f 1229/1311/1336 1230/1312/1337 656/772/862
-f 1228/1310/1335 1229/1311/1336 656/772/862
-f 1231/1313/1338 1232/1314/1339 656/772/862
-f 1230/1312/1337 1231/1313/1338 656/772/862
-f 1233/1315/1340 788/777/867 656/772/862
-f 1234/1316/1341 1233/1315/1340 656/772/862
-f 1235/1317/1342 1234/1316/1341 656/772/862
-f 1232/1314/1339 1235/1317/1342 656/772/862
-f 1236/1318/1343 1221/1319/1344 658/765/855
-f 657/785/875 734/784/874 1187/1321/1346 936/1320/1345
-f 936/1320/1345 1187/1321/1346 1188/1323/1348 944/1322/1347
-f 944/1322/1347 1188/1323/1348 1189/1325/1350 887/1324/1349
-f 887/1324/1349 1189/1325/1350 1173/1327/1352 1039/1326/1351
-f 1173/1327/1352 1174/1328/1353 882/1329/1354 1039/1326/1351
-f 1174/1328/1353 1190/1000/1061 940/999/1060 882/1329/1354
-f 957/1047/1104 1175/1330/1355 1180/1331/1356 898/1060/1113
-f 898/1060/1113 1180/1331/1356 1179/1332/1357 1049/980/1041
-f 1179/1332/1357 1176/1333/1358 886/978/1039 1049/980/1041
-f 1176/1333/1358 1177/1334/1359 941/975/1036 886/978/1039
-f 1177/1334/1359 1178/1335/1360 885/976/1037 941/975/1036
-f 741/802/892 462/431/543 885/976/1037 1178/1335/1360
-f 744/803/893 741/802/892 1178/1335/1360 1181/1336/1361
-f 1181/1336/1361 1178/1335/1360 1177/1334/1359 1182/1337/1362
-f 1182/1337/1362 1177/1334/1359 1176/1333/1358 1183/1338/1363
-f 1183/1338/1363 1176/1333/1358 1179/1332/1357 1184/1339/1364
-f 1180/1331/1356 1185/1340/1365 1184/1339/1364 1179/1332/1357
-f 1175/1330/1355 1186/1341/1366 1185/1340/1365 1180/1331/1356
-f 734/784/874 744/803/893 1181/1336/1361 1187/1321/1346
-f 1187/1321/1346 1181/1336/1361 1182/1337/1362 1188/1323/1348
-f 1188/1323/1348 1182/1337/1362 1183/1338/1363 1189/1325/1350
-f 1189/1325/1350 1183/1338/1363 1184/1339/1364 1173/1327/1352
-f 1185/1340/1365 1174/1328/1353 1173/1327/1352 1184/1339/1364
-f 1186/1341/1366 1190/1000/1061 1174/1328/1353 1185/1340/1365
-f 1038/965/1028 1190/1000/1061 890/1008/1069
-f 1186/1341/1366 947/1003/1064 890/1008/1069 1190/1000/1061
-f 889/1004/1065 947/1003/1064 1186/1341/1366 1175/1330/1355
-f 1006/1005/1066 889/1004/1065 1175/1330/1355
-f 897/1050/1107 1006/1005/1066 1175/1330/1355 957/1047/1104
-f 1045/1107/1160 1200/1342/1367 1199/1343/1368 1158/1294/1320
-f 1158/1294/1320 1199/1343/1368 1198/1344/1369 1048/1298/1324
-f 1048/1298/1324 1198/1344/1369 1196/1345/1370 1129/1295/1321
-f 1129/1295/1321 1196/1345/1370 1197/1346/1371 1047/1299/1325
-f 1047/1299/1325 1197/1346/1371 761/815/905 719/761/851
-f 1197/1346/1371 1192/973/1034 756/430/542 761/815/905
-f 1196/1345/1370 1191/974/1035 1192/973/1034 1197/1346/1371
-f 1198/1344/1369 1193/977/1038 1191/974/1035 1196/1345/1370
-f 1199/1343/1368 1194/979/1040 1193/977/1038 1198/1344/1369
-f 1200/1342/1367 1195/1059/1112 1194/979/1040 1199/1343/1368
-f 1128/1058/1111 956/1057/1110 1200/1342/1367 1045/1107/1160
-f 956/1057/1110 1108/1048/1105 1195/1059/1112 1200/1342/1367
-f 943/985/1046 1204/1251/1372 771/820/910 478/439/551
-f 1106/982/1043 1205/1253/1373 1204/1251/1372 943/985/1046
-f 942/981/1042 1219/1302/1374 1205/1253/1373 1106/982/1043
-f 1102/1070/1123 926/1257/1316 1206/1256/1375
-f 1102/1070/1123 1206/1256/1375 1207/1261/1376 927/1248/1289
-f 927/1248/1289 1207/1261/1376 1208/1260/1377 1082/1249/1290
-f 1082/1249/1290 1208/1260/1377 1218/1347/1378 1051/1024/1081
-f 1033/969/1030 1209/1265/1379 1211/1264/1380 1081/970/1031
-f 1103/955/1018 1210/1267/1381 1209/1265/1379 1033/969/1030
-f 1034/954/1017 1212/1269/1382 1210/1267/1381 1103/955/1018
-f 1081/970/1031 1211/1264/1380 1219/1302/1374 942/981/1042
-f 1083/956/1019 1213/1271/1383 1212/1269/1382 1034/954/1017
-f 1035/957/1020 1214/1273/1384 1213/1271/1383 1083/956/1019
-f 1084/960/1023 1215/1275/1385 1214/1273/1384 1035/957/1020
-f 1050/1021/1078 1216/1277/1386 1215/1275/1385 1084/960/1023
-f 1085/1022/1079 1217/1279/1387 1216/1277/1386 1050/1021/1078
-f 1051/1024/1081 1218/1347/1378 1217/1279/1387 1085/1022/1079
-f 1285/1348/1388 1218/1347/1388 1208/1260/1296 1284/1259/1296
-f 1286/1278/1305 1217/1279/1305 1218/1347/1388 1285/1348/1388
-f 463/438/550 788/847/936 1233/1349/1389 884/986/1047
-f 1039/1326/1351 1226/1350/1390 1220/1351/1391 887/1324/1349
-f 887/1324/1349 1220/1351/1391 1221/1352/1392 944/1322/1347
-f 944/1322/1347 1221/1352/1392 1236/1353/1393 936/1320/1345
-f 881/968/1029 1222/1354/1394 1224/1355/1395 940/999/1060
-f 996/967/1026 1223/1356/1396 1222/1354/1394 881/968/1029
-f 878/952/1015 1227/1357/1397 1223/1358/1396 939/949/1012
-f 940/999/1060 1224/1355/1395 1225/1359/1398 882/1329/1354
-f 882/1329/1354 1225/1359/1398 1226/1350/1390 1039/1326/1351
-f 997/953/1016 1228/1360/1399 1227/1357/1397 878/952/1015
-f 883/972/1033 1229/1361/1400 1228/1360/1399 997/953/1016
-f 1040/971/1032 1230/1362/1401 1229/1361/1400 883/972/1033
-f 1040/971/1032 1231/1363/1402 1230/1362/1401
-f 1040/971/1032 1232/1364/1403 1231/1363/1402
-f 1041/984/1045 1235/1365/1404 1232/1364/1403 1040/971/1032
-f 884/986/1047 1233/1349/1389 1234/1366/1405 1126/983/1044
-f 1126/983/1044 1234/1366/1405 1235/1365/1404 1041/984/1045
-f 936/1320/1345 1236/1353/1393 806/852/941 657/785/875
-f 1223/1358/1396 996/963/1026 880/961/1024 939/949/1012
-f 1221/1319/1344 1220/1308/1333 658/765/855
-f 806/783/873 1236/1318/1343 658/765/855
-f 1242/1368/1407 808/853/942 807/856/945 1241/1367/1406
-f 1257/1370/1409 810/857/946 809/860/949 1258/1369/1408
-f 1264/1372/1411 812/861/950 811/864/953 1263/1371/1410
-f 1259/1374/1412 814/865/954 813/868/956 1260/1373/1310
-f 1252/1376/1414 1238/1377/1415 1237/1378/1416 1251/1375/1413
-f 1240/1380/1418 1237/1378/1416 1238/1377/1415 1239/1379/1417
-f 1245/1382/1420 1240/1380/1418 1239/1379/1417 1246/1381/1419
-f 1244/1384/1422 1242/1368/1407 1241/1367/1406 1243/1383/1421
-f 1250/1386/1424 1244/1384/1422 1243/1383/1421 1249/1385/1423
-f 1247/1388/1426 1245/1382/1420 1246/1381/1419 1248/1387/1425
-f 1249/1385/1423 1247/1388/1426 1248/1387/1425 1250/1386/1424
-f 1254/1390/1428 1252/1376/1414 1251/1375/1413 1253/1389/1427
-f 1256/1392/1430 1254/1390/1428 1253/1389/1427 1255/1391/1429
-f 1258/1369/1408 1256/1392/1430 1255/1391/1429 1257/1370/1409
-f 1262/1394/1432 1259/1374/1412 1260/1373/1310 1261/1393/1431
-f 1275/1396/1434 1262/1394/1432 1261/1393/1431 1276/1395/1433
-f 1266/1398/1436 1264/1372/1411 1263/1371/1410 1265/1397/1435
-f 1268/1400/1438 1266/1398/1436 1265/1397/1435 1267/1399/1437
-f 1270/1402/1440 1268/1400/1438 1267/1399/1437 1269/1401/1439
-f 1272/1404/1442 1270/1402/1440 1269/1401/1439 1271/1403/1441
-f 1274/1406/1444 1272/1404/1442 1271/1403/1441 1273/1405/1443
-f 1280/1408/1446 1274/1406/1444 1273/1405/1443 1279/1407/1445
-f 1278/1410/1448 1275/1396/1434 1276/1395/1433 1277/1409/1447
-f 1279/1407/1445 1278/1410/1448 1277/1409/1447 1280/1408/1446
-f 1268/1411/1438 1270/1412/1440 928/1281/1307
-f 1266/1413/1436 1268/1411/1438 928/1281/1307 1088/1280/1306
-f 1280/1414/1446 1277/1415/1447 929/1283/1309
-f 1274/1416/1444 1280/1414/1446 929/1283/1309 1098/1282/1308
-f 1264/1417/1411 1266/1413/1436 1088/1280/1306
-f 812/912/950 1264/1417/1411 1088/1280/1306 476/732/823
-f 1089/1287/1313 1101/1285/1311 1244/1419/1422 1250/1418/1424
-f 1238/1420/1415 1252/1421/1414 930/1289/1315
-f 1239/1422/1417 1238/1420/1415 930/1289/1315 1104/1288/1314
-f 809/918/949 477/742/833 931/1291/1318 1258/1423/1408
-f 1256/1424/1430 1258/1423/1408 931/1291/1318 1090/1290/1317
-f 1254/1425/1428 1256/1424/1430 1090/1290/1317
-f 1252/1421/1414 1254/1425/1428 1090/1290/1317 930/1289/1315
-f 808/927/942 1242/1426/1407 1260/1284/1310 813/928/956
-f 1246/1427/1419 1239/1422/1417 1104/1288/1314
-f 1248/1428/1425 1246/1427/1419 1104/1288/1314 1089/1287/1313
-f 1272/1429/1442 1274/1416/1444 1098/1282/1308
-f 1270/1412/1440 1272/1429/1442 1098/1282/1308 928/1281/1307
-f 1250/1418/1424 1248/1428/1425 1089/1287/1313
-f 1277/1415/1447 1276/1430/1433 1105/1286/1312 929/1283/1309
-f 1276/1430/1433 1261/1431/1431 1105/1286/1312
-f 1244/1419/1422 1101/1285/1311 1260/1284/1310 1242/1426/1407
-f 1261/1431/1431 1260/1284/1310 1105/1286/1312
-f 1299/1433/1450 811/864/953 841/863/952 1298/1432/1449
-f 1301/1435/1452 837/866/955 814/865/954 1300/1434/1451
-f 1302/1436/1453 840/887/975 837/866/955 1301/1435/1452
-f 1303/1437/1454 853/889/977 840/887/975 1302/1436/1453
-f 1298/1432/1449 841/863/952 843/892/980 1304/1438/1455
-f 1304/1438/1455 843/892/980 845/894/982 1305/1439/1456
-f 1305/1439/1456 845/894/982 847/896/984 1306/1440/1457
-f 1306/1440/1457 847/896/984 849/898/986 1307/1441/1458
-f 1307/1441/1458 849/898/986 851/900/988 1308/1442/1459
-f 1308/1442/1459 851/900/988 857/902/990 1309/1443/1460
-f 1310/1444/1461 856/903/991 853/889/977 1303/1437/1454
-f 1309/1443/1460 857/902/990 856/903/991 1310/1444/1461
-f 1311/1445/1462 1263/1371/1410 811/864/953 1299/1433/1450
-f 1300/1434/1451 814/865/954 1259/1374/1412 1312/1446/1463
-f 1312/1446/1463 1259/1374/1412 1262/1394/1432 1313/1447/1464
-f 1313/1447/1464 1262/1394/1432 1275/1396/1434 1314/1448/1465
-f 1315/1449/1466 1265/1397/1435 1263/1371/1410 1311/1445/1462
-f 1316/1450/1467 1267/1399/1437 1265/1397/1435 1315/1449/1466
-f 1317/1451/1468 1269/1401/1439 1267/1399/1437 1316/1450/1467
-f 1318/1452/1469 1271/1403/1441 1269/1401/1439 1317/1451/1468
-f 1319/1453/1470 1273/1405/1443 1271/1403/1441 1318/1452/1469
-f 1320/1454/1471 1279/1407/1445 1273/1405/1443 1319/1453/1470
-f 1314/1448/1465 1275/1396/1434 1278/1410/1448 1321/1455/1472
-f 1321/1455/1472 1278/1410/1448 1279/1407/1445 1320/1454/1471
-f 1308/1442/1459 1322/1456/1473 1307/1441/1458
-f 1322/1456/1473 1320/1454/1471 1319/1453/1470
-f 1321/1455/1472 1320/1454/1471 1322/1456/1473
-f 1314/1448/1465 1321/1455/1472 1322/1456/1473
-f 1313/1447/1464 1314/1448/1465 1322/1456/1473
-f 1312/1446/1463 1313/1447/1464 1322/1456/1473
-f 1300/1434/1451 1312/1446/1463 1322/1456/1473
-f 1301/1435/1452 1300/1434/1451 1322/1456/1473
-f 1302/1436/1453 1301/1435/1452 1322/1456/1473
-f 1303/1437/1454 1302/1436/1453 1322/1456/1473
-f 1310/1444/1461 1303/1437/1454 1322/1456/1473
-f 1309/1443/1460 1310/1444/1461 1322/1456/1473
-f 1308/1442/1459 1309/1443/1460 1322/1456/1473
-f 1307/1441/1458 1322/1456/1473 1306/1440/1457
-f 1306/1440/1457 1322/1456/1473 1305/1439/1456
-f 1305/1439/1456 1322/1456/1473 1304/1438/1455
-f 1304/1438/1455 1322/1456/1473 1298/1432/1449
-f 1298/1432/1449 1322/1456/1473 1299/1433/1450
-f 1299/1433/1450 1322/1456/1473 1311/1445/1462
-f 1311/1445/1462 1322/1456/1473 1315/1449/1466
-f 1315/1449/1466 1322/1456/1473 1316/1450/1467
-f 1316/1450/1467 1322/1456/1473 1317/1451/1468
-f 1317/1451/1468 1322/1456/1473 1318/1452/1469
-f 1318/1452/1469 1322/1456/1473 1319/1453/1470
-f 1335/1457/1474 1336/1458/1475 1323/1459/1476
-f 1255/1391/1429 1253/1389/1427 1323/1459/1476 1336/1458/1475
-f 1251/1375/1413 1337/1460/1477 1323/1459/1476 1253/1389/1427
-f 1337/1460/1477 1335/1457/1478 1323/1459/1476
-f 1335/1457/1479 1339/1461/1480 1324/1462/1481
-f 810/857/946 1257/1370/1409 1324/1462/1481 1339/1461/1480
-f 1255/1391/1429 1336/1458/1475 1324/1462/1481 1257/1370/1409
-f 1336/1458/1475 1335/1457/1474 1324/1462/1481
-f 1335/1457/1482 1340/1463/1483 1325/1464/1484
-f 1240/1380/1418 1245/1382/1420 1325/1464/1484 1340/1463/1483
-f 1247/1388/1426 1338/1465/1485 1325/1464/1484 1245/1382/1420
-f 1338/1465/1485 1335/1457/1486 1325/1464/1484
-f 1335/1457/1487 1341/1466/1488 1326/1467/1489
-f 1243/1383/1421 1241/1367/1406 1326/1467/1489 1341/1466/1488
-f 807/856/945 1342/1468/1490 1326/1467/1489 1241/1367/1406
-f 1342/1468/1490 1335/1457/1491 1326/1467/1489
-f 1335/1457/1478 1337/1460/1477 1327/1469/1492
-f 1251/1375/1413 1237/1378/1416 1327/1469/1492 1337/1460/1477
-f 1240/1380/1418 1340/1463/1483 1327/1469/1492 1237/1378/1416
-f 1340/1463/1483 1335/1457/1482 1327/1469/1492
-f 1335/1457/1486 1338/1465/1485 1328/1470/1493
-f 1247/1388/1426 1249/1385/1423 1328/1470/1493 1338/1465/1485
-f 1243/1383/1421 1341/1466/1488 1328/1470/1493 1249/1385/1423
-f 1341/1466/1488 1335/1457/1487 1328/1470/1493
-f 1343/1471/1494 1335/1457/1495 1329/1472/1496
-f 1335/1457/1497 1344/1473/1498 1329/1472/1496
-f 829/871/959 831/884/972 1329/1472/1496 1344/1473/1498
-f 833/886/974 1343/1471/1494 1329/1472/1496 831/884/972
-f 1339/1461/1480 1335/1457/1479 1330/1474/1499
-f 1335/1457/1495 1343/1471/1494 1330/1474/1499
-f 833/886/974 835/858/947 1330/1474/1499 1343/1471/1494
-f 810/857/946 1339/1461/1480 1330/1474/1499 835/858/947
-f 1346/1475/1500 1335/1457/1501 1331/1476/1502
-f 1335/1457/1503 1345/1477/1504 1331/1476/1502
-f 825/881/969 823/875/963 1331/1476/1502 1345/1477/1504
-f 818/873/961 1346/1475/1500 1331/1476/1502 823/875/963
-f 1347/1478/1505 1335/1457/1506 1332/1479/1507
-f 1335/1457/1491 1342/1468/1490 1332/1479/1507
-f 807/856/945 819/855/944 1332/1479/1507 1342/1468/1490
-f 821/878/966 1347/1478/1505 1332/1479/1507 819/855/944
-f 1344/1473/1498 1335/1457/1497 1333/1480/1508
-f 1335/1457/1501 1346/1475/1500 1333/1480/1508
-f 818/873/961 815/872/960 1333/1480/1508 1346/1475/1500
-f 829/871/959 1344/1473/1498 1333/1480/1508 815/872/960
-f 1345/1477/1504 1335/1457/1503 1334/1481/1509
-f 1335/1457/1506 1347/1478/1505 1334/1481/1509
-f 821/878/966 827/880/968 1334/1481/1509 1347/1478/1505
-f 825/881/969 1345/1477/1504 1334/1481/1509 827/880/968
-f 722/518/622 639/743/834 651/733/824 732/556/660
-f 1172/1095/1148 1105/1286/1312 1101/1285/1311
-f 1357/1483/1511 1356/1484/1511 1368/1485/1510 1363/1482/1510
-f 1365/1486/1512 1372/1487/1512 1356/1484/1511 1357/1483/1511
-f 1369/1489/1514 1362/1490/1514 1348/1491/1513 1349/1488/1513
-f 1370/1493/1515 1349/1488/1513 1348/1491/1513 1364/1492/1515
-f 1370/1493/1515 1364/1492/1515 1350/1495/1516 1351/1494/1516
-f 1368/1485/1510 1351/1494/1516 1350/1495/1516 1363/1482/1510
-f 1366/1497/1518 1371/1498/1518 1352/1499/1517 1353/1496/1517
-f 1367/1501/1519 1353/1496/1517 1352/1499/1517 1373/1500/1519
-f 1367/1501/1519 1373/1500/1519 1354/1503/1520 1355/1502/1520
-f 1365/1486/1512 1355/1502/1520 1354/1503/1520 1372/1487/1512
-f 1371/1498/1518 1366/1497/1518 1359/1505/1521 1358/1504/1521
-f 1362/1490/1514 1369/1489/1514 1361/1507/1522 1360/1506/1522
-f 1383/1483/1523 1385/1482/1524 1390/1485/1524 1382/1484/1523
-f 1387/1486/1525 1383/1483/1523 1382/1484/1523 1394/1487/1525
-f 1391/1489/1526 1375/1488/1527 1374/1491/1527 1384/1490/1526
-f 1392/1493/1528 1386/1492/1528 1374/1491/1527 1375/1488/1527
-f 1392/1493/1528 1377/1494/1529 1376/1495/1529 1386/1492/1528
-f 1390/1485/1524 1385/1482/1524 1376/1495/1529 1377/1494/1529
-f 1388/1497/1530 1379/1496/1531 1378/1499/1531 1393/1498/1530
-f 1389/1501/1532 1395/1500/1532 1378/1499/1531 1379/1496/1531
-f 1389/1501/1532 1381/1502/1533 1380/1503/1533 1395/1500/1532
-f 1387/1486/1525 1394/1487/1525 1380/1503/1533 1381/1502/1533
-f 1393/1498/1530 1358/1504/1521 1359/1505/1521 1388/1497/1530
-f 1384/1490/1526 1360/1506/1522 1361/1507/1522 1391/1489/1526
-f 1725/1509/1535 1492/1510/1536 1396/1511/1537 1494/1508/1534
-f 1726/1512/1538 1497/1513/1539 1396/1511/1537 1492/1510/1536
-f 1685/1514/1540 1496/1515/1541 1396/1511/1537 1497/1513/1539
-f 1684/1516/1542 1494/1508/1534 1396/1511/1537 1496/1515/1541
-f 1684/1516/1542 1496/1515/1541 1397/1518/1544 1495/1517/1543
-f 1685/1514/1540 1499/1519/1545 1397/1518/1544 1496/1515/1541
-f 1707/1520/1546 1577/1521/1547 1397/1518/1544 1499/1519/1545
-f 1708/1522/1548 1495/1517/1543 1397/1518/1544 1577/1521/1547
-f 1726/1512/1538 1493/1523/1549 1398/1524/1550 1497/1513/1539
-f 1760/1525/1551 1574/1526/1552 1398/1524/1550 1493/1523/1549
-f 1706/1527/1553 1498/1528/1554 1398/1524/1550 1574/1526/1552
-f 1685/1514/1540 1497/1513/1539 1398/1524/1550 1498/1528/1554
-f 1685/1514/1540 1498/1528/1554 1399/1529/1555 1499/1519/1545
-f 1706/1527/1553 1575/1530/1556 1399/1529/1555 1498/1528/1554
-f 1724/1531/1557 1576/1532/1558 1399/1529/1555 1575/1530/1556
-f 1707/1520/1546 1499/1519/1545 1399/1529/1555 1576/1532/1558
-f 1725/1534/1535 1494/1535/1534 1400/1536/1560 1500/1533/1559
-f 1684/1537/1542 1503/1538/1561 1400/1536/1560 1494/1535/1534
-f 1686/1539/1562 1502/1540/1563 1400/1536/1560 1503/1538/1561
-f 1728/1541/1564 1500/1533/1559 1400/1536/1560 1502/1540/1563
-f 1728/1541/1564 1502/1540/1563 1401/1543/1566 1501/1542/1565
-f 1686/1539/1562 1505/1544/1567 1401/1543/1566 1502/1540/1563
-f 1705/1545/1568 1573/1546/1569 1401/1543/1566 1505/1544/1567
-f 1759/1547/1570 1501/1542/1565 1401/1543/1566 1573/1546/1569
-f 1684/1537/1542 1495/1548/1543 1402/1549/1571 1503/1538/1561
-f 1708/1550/1548 1578/1551/1572 1402/1549/1571 1495/1548/1543
-f 1709/1552/1573 1504/1553/1574 1402/1549/1571 1578/1551/1572
-f 1686/1539/1562 1503/1538/1561 1402/1549/1571 1504/1553/1574
-f 1686/1539/1562 1504/1553/1574 1403/1554/1575 1505/1544/1567
-f 1709/1552/1573 1579/1555/1576 1403/1554/1575 1504/1553/1574
-f 1723/1556/1577 1572/1557/1578 1403/1554/1575 1579/1555/1576
-f 1705/1545/1568 1505/1544/1567 1403/1554/1575 1572/1557/1578
-f 1687/1559/1580 1524/1560/1581 1404/1561/1582 1506/1558/1579
-f 1691/1562/1583 1509/1563/1584 1404/1561/1582 1524/1560/1581
-f 1692/1564/1585 1508/1565/1586 1404/1561/1582 1509/1563/1584
-f 1688/1566/1587 1506/1558/1579 1404/1561/1582 1508/1565/1586
-f 1688/1566/1587 1508/1565/1586 1405/1568/1589 1507/1567/1588
-f 1692/1564/1585 1511/1569/1590 1405/1568/1589 1508/1565/1586
-f 1709/1552/1573 1578/1551/1572 1405/1568/1589 1511/1569/1590
-f 1708/1550/1548 1507/1567/1588 1405/1568/1589 1578/1551/1572
-f 1691/1562/1583 1525/1570/1591 1406/1571/1592 1509/1563/1584
-f 1711/1572/1593 1582/1573/1594 1406/1571/1592 1525/1570/1591
-f 1712/1574/1595 1510/1575/1596 1406/1571/1592 1582/1573/1594
-f 1692/1564/1585 1509/1563/1584 1406/1571/1592 1510/1575/1596
-f 1692/1564/1585 1510/1575/1596 1407/1576/1597 1511/1569/1590
-f 1712/1574/1595 1583/1577/1598 1407/1576/1597 1510/1575/1596
-f 1723/1556/1577 1579/1555/1576 1407/1576/1597 1583/1577/1598
-f 1709/1552/1573 1511/1569/1590 1407/1576/1597 1579/1555/1576
-f 1687/1579/1580 1506/1580/1579 1408/1581/1600 1512/1578/1599
-f 1688/1582/1587 1515/1583/1601 1408/1581/1600 1506/1580/1579
-f 1693/1584/1602 1514/1585/1603 1408/1581/1600 1515/1583/1601
-f 1689/1586/1604 1512/1578/1599 1408/1581/1600 1514/1585/1603
-f 1689/1586/1604 1514/1585/1603 1409/1588/1606 1513/1587/1605
-f 1693/1584/1602 1517/1589/1607 1409/1588/1606 1514/1585/1603
-f 1713/1590/1608 1585/1591/1609 1409/1588/1606 1517/1589/1607
-f 1714/1592/1610 1513/1587/1605 1409/1588/1606 1585/1591/1609
-f 1688/1582/1587 1507/1593/1588 1410/1594/1611 1515/1583/1601
-f 1708/1522/1548 1577/1521/1547 1410/1594/1611 1507/1593/1588
-f 1707/1520/1546 1516/1595/1612 1410/1594/1611 1577/1521/1547
-f 1693/1584/1602 1515/1583/1601 1410/1594/1611 1516/1595/1612
-f 1693/1584/1602 1516/1595/1612 1411/1596/1613 1517/1589/1607
-f 1707/1520/1546 1576/1532/1558 1411/1596/1613 1516/1595/1612
-f 1724/1531/1557 1584/1597/1614 1411/1596/1613 1576/1532/1558
-f 1713/1590/1608 1517/1589/1607 1411/1596/1613 1584/1597/1614
-f 1687/1579/1580 1512/1578/1599 1412/1599/1616 1518/1598/1615
-f 1689/1586/1604 1521/1600/1617 1412/1599/1616 1512/1578/1599
-f 1694/1601/1618 1520/1602/1619 1412/1599/1616 1521/1600/1617
-f 1690/1603/1620 1518/1598/1615 1412/1599/1616 1520/1602/1619
-f 1690/1603/1620 1520/1602/1619 1413/1605/1622 1519/1604/1621
-f 1694/1601/1618 1523/1606/1623 1413/1605/1622 1520/1602/1619
-f 1716/1607/1624 1589/1608/1625 1413/1605/1622 1523/1606/1623
-f 1717/1609/1626 1519/1604/1621 1413/1605/1622 1589/1608/1625
-f 1689/1586/1604 1513/1587/1605 1414/1610/1627 1521/1600/1617
-f 1714/1592/1610 1586/1611/1628 1414/1610/1627 1513/1587/1605
-f 1715/1612/1629 1522/1613/1630 1414/1610/1627 1586/1611/1628
-f 1694/1601/1618 1521/1600/1617 1414/1610/1627 1522/1613/1630
-f 1694/1601/1618 1522/1613/1630 1415/1614/1631 1523/1606/1623
-f 1715/1612/1629 1587/1615/1632 1415/1614/1631 1522/1613/1630
-f 1722/1616/1633 1588/1617/1634 1415/1614/1631 1587/1615/1632
-f 1716/1607/1624 1523/1606/1623 1415/1614/1631 1588/1617/1634
-f 1687/1559/1580 1518/1618/1615 1416/1619/1635 1524/1560/1581
-f 1690/1620/1620 1527/1621/1636 1416/1619/1635 1518/1618/1615
-f 1695/1622/1637 1526/1623/1638 1416/1619/1635 1527/1621/1636
-f 1691/1562/1583 1524/1560/1581 1416/1619/1635 1526/1623/1638
-f 1691/1562/1583 1526/1623/1638 1417/1624/1639 1525/1570/1591
-f 1695/1622/1637 1529/1625/1640 1417/1624/1639 1526/1623/1638
-f 1710/1626/1641 1581/1627/1642 1417/1624/1639 1529/1625/1640
-f 1711/1572/1593 1525/1570/1591 1417/1624/1639 1581/1627/1642
-f 1690/1620/1620 1519/1628/1621 1418/1629/1643 1527/1621/1636
-f 1717/1630/1626 1590/1631/1644 1418/1629/1643 1519/1628/1621
-f 1718/1632/1645 1528/1633/1646 1418/1629/1643 1590/1631/1644
-f 1695/1622/1637 1527/1621/1636 1418/1629/1643 1528/1633/1646
-f 1695/1622/1637 1528/1633/1646 1419/1634/1647 1529/1625/1640
-f 1718/1632/1645 1591/1635/1648 1419/1634/1647 1528/1633/1646
-f 1721/1636/1649 1580/1637/1650 1419/1634/1647 1591/1635/1648
-f 1710/1626/1641 1529/1625/1640 1419/1634/1647 1580/1637/1650
-f 1740/1639/1652 1542/1640/1653 1420/1641/1654 1530/1638/1651
-f 1743/1642/1655 1533/1643/1656 1420/1641/1654 1542/1640/1653
-f 1697/1644/1657 1532/1645/1658 1420/1641/1654 1533/1643/1656
-f 1696/1646/1659 1530/1638/1651 1420/1641/1654 1532/1645/1658
-f 1696/1646/1659 1532/1645/1658 1421/1648/1661 1531/1647/1660
-f 1697/1644/1657 1535/1649/1662 1421/1648/1661 1532/1645/1658
-f 1718/1632/1645 1590/1631/1644 1421/1648/1661 1535/1649/1662
-f 1717/1630/1626 1531/1647/1660 1421/1648/1661 1590/1631/1644
-f 1743/1642/1655 1543/1650/1663 1422/1651/1664 1533/1643/1656
-f 1774/1652/1665 1592/1653/1666 1422/1651/1664 1543/1650/1663
-f 1719/1654/1667 1534/1655/1668 1422/1651/1664 1592/1653/1666
-f 1697/1644/1657 1533/1643/1656 1422/1651/1664 1534/1655/1668
-f 1697/1644/1657 1534/1655/1668 1423/1656/1669 1535/1649/1662
-f 1719/1654/1667 1593/1657/1670 1423/1656/1669 1534/1655/1668
-f 1721/1636/1649 1591/1635/1648 1423/1656/1669 1593/1657/1670
-f 1718/1632/1645 1535/1649/1662 1423/1656/1669 1591/1635/1648
-f 1740/1659/1652 1530/1660/1651 1424/1661/1672 1536/1658/1671
-f 1696/1662/1659 1539/1663/1673 1424/1661/1672 1530/1660/1651
-f 1698/1664/1674 1538/1665/1675 1424/1661/1672 1539/1663/1673
-f 1742/1666/1676 1536/1658/1671 1424/1661/1672 1538/1665/1675
-f 1742/1666/1676 1538/1665/1675 1425/1668/1678 1537/1667/1677
-f 1698/1664/1674 1541/1669/1679 1425/1668/1678 1538/1665/1675
-f 1720/1670/1680 1595/1671/1681 1425/1668/1678 1541/1669/1679
-f 1777/1672/1682 1537/1667/1677 1425/1668/1678 1595/1671/1681
-f 1696/1662/1659 1531/1673/1660 1426/1674/1683 1539/1663/1673
-f 1717/1609/1626 1589/1608/1625 1426/1674/1683 1531/1673/1660
-f 1716/1607/1624 1540/1675/1684 1426/1674/1683 1589/1608/1625
-f 1698/1664/1674 1539/1663/1673 1426/1674/1683 1540/1675/1684
-f 1698/1664/1674 1540/1675/1684 1427/1676/1685 1541/1669/1679
-f 1716/1607/1624 1588/1617/1634 1427/1676/1685 1540/1675/1684
-f 1722/1616/1633 1594/1677/1686 1427/1676/1685 1588/1617/1634
-f 1720/1670/1680 1541/1669/1679 1427/1676/1685 1594/1677/1686
-f 1746/1679/1688 1544/1680/1689 1428/1681/1690 1546/1678/1687
-f 1747/1682/1691 1549/1683/1692 1428/1681/1690 1544/1680/1689
-f 1700/1684/1693 1548/1685/1694 1428/1681/1690 1549/1683/1692
-f 1699/1686/1695 1546/1678/1687 1428/1681/1690 1548/1685/1694
-f 1699/1686/1695 1548/1685/1694 1429/1688/1697 1547/1687/1696
-f 1700/1684/1693 1551/1689/1698 1429/1688/1697 1548/1685/1694
-f 1712/1574/1595 1582/1573/1594 1429/1688/1697 1551/1689/1698
-f 1711/1572/1593 1547/1687/1696 1429/1688/1697 1582/1573/1594
-f 1747/1682/1691 1545/1690/1699 1430/1691/1700 1549/1683/1692
-f 1759/1547/1570 1573/1546/1569 1430/1691/1700 1545/1690/1699
-f 1705/1545/1568 1550/1692/1701 1430/1691/1700 1573/1546/1569
-f 1700/1684/1693 1549/1683/1692 1430/1691/1700 1550/1692/1701
-f 1700/1684/1693 1550/1692/1701 1431/1693/1702 1551/1689/1698
-f 1705/1545/1568 1572/1557/1578 1431/1693/1702 1550/1692/1701
-f 1723/1556/1577 1583/1577/1598 1431/1693/1702 1572/1557/1578
-f 1712/1574/1595 1551/1689/1698 1431/1693/1702 1583/1577/1598
-f 1746/1679/1688 1546/1678/1687 1432/1695/1704 1552/1694/1703
-f 1699/1686/1695 1555/1696/1705 1432/1695/1704 1546/1678/1687
-f 1701/1697/1706 1554/1698/1707 1432/1695/1704 1555/1696/1705
-f 1749/1699/1708 1552/1694/1703 1432/1695/1704 1554/1698/1707
-f 1749/1699/1708 1554/1698/1707 1433/1701/1710 1553/1700/1709
-f 1701/1697/1706 1557/1702/1711 1433/1701/1710 1554/1698/1707
-f 1719/1654/1667 1592/1653/1666 1433/1701/1710 1557/1702/1711
-f 1774/1652/1665 1553/1700/1709 1433/1701/1710 1592/1653/1666
-f 1699/1686/1695 1547/1687/1696 1434/1703/1712 1555/1696/1705
-f 1711/1572/1593 1581/1627/1642 1434/1703/1712 1547/1687/1696
-f 1710/1626/1641 1556/1704/1713 1434/1703/1712 1581/1627/1642
-f 1701/1697/1706 1555/1696/1705 1434/1703/1712 1556/1704/1713
-f 1701/1697/1706 1556/1704/1713 1435/1705/1714 1557/1702/1711
-f 1710/1626/1641 1580/1637/1650 1435/1705/1714 1556/1704/1713
-f 1721/1636/1649 1593/1657/1670 1435/1705/1714 1580/1637/1650
-f 1719/1654/1667 1557/1702/1711 1435/1705/1714 1593/1657/1670
-f 1752/1707/1716 1566/1708/1717 1436/1709/1718 1558/1706/1715
-f 1702/1710/1719 1561/1711/1720 1436/1709/1718 1566/1708/1717
-f 1703/1712/1721 1560/1713/1722 1436/1709/1718 1561/1711/1720
-f 1753/1714/1723 1558/1706/1715 1436/1709/1718 1560/1713/1722
-f 1753/1714/1723 1560/1713/1722 1437/1716/1725 1559/1715/1724
-f 1703/1712/1721 1563/1717/1726 1437/1716/1725 1560/1713/1722
-f 1706/1527/1553 1574/1526/1552 1437/1716/1725 1563/1717/1726
-f 1760/1525/1551 1559/1715/1724 1437/1716/1725 1574/1526/1552
-f 1702/1710/1719 1567/1718/1727 1438/1719/1728 1561/1711/1720
-f 1714/1592/1610 1585/1591/1609 1438/1719/1728 1567/1718/1727
-f 1713/1590/1608 1562/1720/1729 1438/1719/1728 1585/1591/1609
-f 1703/1712/1721 1561/1711/1720 1438/1719/1728 1562/1720/1729
-f 1703/1712/1721 1562/1720/1729 1439/1721/1730 1563/1717/1726
-f 1713/1590/1608 1584/1597/1614 1439/1721/1730 1562/1720/1729
-f 1724/1531/1557 1575/1530/1556 1439/1721/1730 1584/1597/1614
-f 1706/1527/1553 1563/1717/1726 1439/1721/1730 1575/1530/1556
-f 1752/1707/1716 1564/1722/1731 1440/1723/1732 1566/1708/1717
-f 1754/1724/1733 1569/1725/1734 1440/1723/1732 1564/1722/1731
-f 1704/1726/1735 1568/1727/1736 1440/1723/1732 1569/1725/1734
-f 1702/1710/1719 1566/1708/1717 1440/1723/1732 1568/1727/1736
-f 1702/1710/1719 1568/1727/1736 1441/1728/1737 1567/1718/1727
-f 1704/1726/1735 1571/1729/1738 1441/1728/1737 1568/1727/1736
-f 1715/1612/1629 1586/1611/1628 1441/1728/1737 1571/1729/1738
-f 1714/1592/1610 1567/1718/1727 1441/1728/1737 1586/1611/1628
-f 1754/1724/1733 1565/1730/1739 1442/1731/1740 1569/1725/1734
-f 1777/1672/1682 1595/1671/1681 1442/1731/1740 1565/1730/1739
-f 1720/1670/1680 1570/1732/1741 1442/1731/1740 1595/1671/1681
-f 1704/1726/1735 1569/1725/1734 1442/1731/1740 1570/1732/1741
-f 1704/1726/1735 1570/1732/1741 1443/1733/1742 1571/1729/1738
-f 1720/1670/1680 1594/1677/1686 1443/1733/1742 1570/1732/1741
-f 1722/1616/1633 1587/1615/1632 1443/1733/1742 1594/1677/1686
-f 1715/1612/1629 1571/1729/1738 1443/1733/1742 1587/1615/1632
-f 1725/1509/1535 1596/1734/1743 1444/1735/1744 1492/1510/1536
-f 1727/1736/1745 1598/1737/1746 1444/1735/1744 1596/1734/1743
-f 1729/1738/1747 1599/1739/1748 1444/1735/1744 1598/1737/1746
-f 1726/1512/1538 1492/1510/1536 1444/1735/1744 1599/1739/1748
-f 1727/1736/1745 1597/1740/1749 1445/1741/1750 1598/1737/1746
-f 1763/1742/1751 1665/1743/1752 1445/1741/1750 1597/1740/1749
-f 1762/1744/1753 1601/1745/1754 1445/1741/1750 1665/1743/1752
-f 1729/1738/1747 1598/1737/1746 1445/1741/1750 1601/1745/1754
-f 1726/1512/1538 1599/1739/1748 1446/1746/1755 1493/1523/1549
-f 1729/1738/1747 1600/1747/1756 1446/1746/1755 1599/1739/1748
-f 1761/1748/1757 1662/1749/1758 1446/1746/1755 1600/1747/1756
-f 1760/1525/1551 1493/1523/1549 1446/1746/1755 1662/1749/1758
-f 1729/1738/1747 1601/1745/1754 1447/1750/1759 1600/1747/1756
-f 1762/1744/1753 1664/1751/1760 1447/1750/1759 1601/1745/1754
-f 1781/1752/1761 1663/1753/1762 1447/1750/1759 1664/1751/1760
-f 1761/1748/1757 1600/1747/1756 1447/1750/1759 1663/1753/1762
-f 1725/1534/1535 1500/1533/1559 1448/1755/1763 1596/1754/1743
-f 1728/1541/1564 1602/1756/1764 1448/1755/1763 1500/1533/1559
-f 1730/1757/1765 1603/1758/1766 1448/1755/1763 1602/1756/1764
-f 1727/1759/1745 1596/1754/1743 1448/1755/1763 1603/1758/1766
-f 1728/1541/1564 1501/1542/1565 1449/1760/1767 1602/1756/1764
-f 1759/1547/1570 1661/1761/1768 1449/1760/1767 1501/1542/1565
-f 1758/1762/1769 1605/1763/1770 1449/1760/1767 1661/1761/1768
-f 1730/1757/1765 1602/1756/1764 1449/1760/1767 1605/1763/1770
-f 1727/1759/1745 1603/1758/1766 1450/1765/1771 1597/1764/1749
-f 1730/1757/1765 1604/1766/1772 1450/1765/1771 1603/1758/1766
-f 1764/1767/1773 1666/1768/1774 1450/1765/1771 1604/1766/1772
-f 1763/1769/1751 1597/1764/1749 1450/1765/1771 1666/1768/1774
-f 1730/1757/1765 1605/1763/1770 1451/1770/1775 1604/1766/1772
-f 1758/1762/1769 1660/1771/1776 1451/1770/1775 1605/1763/1770
-f 1780/1772/1777 1667/1773/1778 1451/1770/1775 1660/1771/1776
-f 1764/1767/1773 1604/1766/1772 1451/1770/1775 1667/1773/1778
-f 1731/1775/1780 1606/1776/1781 1452/1777/1782 1624/1774/1779
-f 1732/1778/1783 1608/1779/1784 1452/1777/1782 1606/1776/1781
-f 1736/1780/1785 1609/1781/1786 1452/1777/1782 1608/1779/1784
-f 1735/1782/1787 1624/1774/1779 1452/1777/1782 1609/1781/1786
-f 1732/1778/1783 1607/1783/1788 1453/1784/1789 1608/1779/1784
-f 1763/1769/1751 1666/1768/1774 1453/1784/1789 1607/1783/1788
-f 1764/1767/1773 1611/1785/1790 1453/1784/1789 1666/1768/1774
-f 1736/1780/1785 1608/1779/1784 1453/1784/1789 1611/1785/1790
-f 1735/1782/1787 1609/1781/1786 1454/1787/1792 1625/1786/1791
-f 1736/1780/1785 1610/1788/1793 1454/1787/1792 1609/1781/1786
-f 1767/1789/1794 1670/1790/1795 1454/1787/1792 1610/1788/1793
-f 1766/1791/1796 1625/1786/1791 1454/1787/1792 1670/1790/1795
-f 1736/1780/1785 1611/1785/1790 1455/1792/1797 1610/1788/1793
-f 1764/1767/1773 1667/1773/1778 1455/1792/1797 1611/1785/1790
-f 1780/1772/1777 1671/1793/1798 1455/1792/1797 1667/1773/1778
-f 1767/1789/1794 1610/1788/1793 1455/1792/1797 1671/1793/1798
-f 1731/1795/1780 1612/1796/1799 1456/1797/1800 1606/1794/1781
-f 1733/1798/1801 1614/1799/1802 1456/1797/1800 1612/1796/1799
-f 1737/1800/1803 1615/1801/1804 1456/1797/1800 1614/1799/1802
-f 1732/1802/1783 1606/1794/1781 1456/1797/1800 1615/1801/1804
-f 1733/1798/1801 1613/1803/1805 1457/1804/1806 1614/1799/1802
-f 1769/1805/1807 1673/1806/1808 1457/1804/1806 1613/1803/1805
-f 1768/1807/1809 1617/1808/1810 1457/1804/1806 1673/1806/1808
-f 1737/1800/1803 1614/1799/1802 1457/1804/1806 1617/1808/1810
-f 1732/1802/1783 1615/1801/1804 1458/1810/1811 1607/1809/1788
-f 1737/1800/1803 1616/1811/1812 1458/1810/1811 1615/1801/1804
-f 1762/1744/1753 1665/1743/1752 1458/1810/1811 1616/1811/1812
-f 1763/1742/1751 1607/1809/1788 1458/1810/1811 1665/1743/1752
-f 1737/1800/1803 1617/1808/1810 1459/1812/1813 1616/1811/1812
-f 1768/1807/1809 1672/1813/1814 1459/1812/1813 1617/1808/1810
-f 1781/1752/1761 1664/1751/1760 1459/1812/1813 1672/1813/1814
-f 1762/1744/1753 1616/1811/1812 1459/1812/1813 1664/1751/1760
-f 1731/1795/1780 1618/1814/1815 1460/1815/1816 1612/1796/1799
-f 1734/1816/1817 1620/1817/1818 1460/1815/1816 1618/1814/1815
-f 1738/1818/1819 1621/1819/1820 1460/1815/1816 1620/1817/1818
-f 1733/1798/1801 1612/1796/1799 1460/1815/1816 1621/1819/1820
-f 1734/1816/1817 1619/1820/1821 1461/1821/1822 1620/1817/1818
-f 1772/1822/1823 1677/1823/1824 1461/1821/1822 1619/1820/1821
-f 1771/1824/1825 1623/1825/1826 1461/1821/1822 1677/1823/1824
-f 1738/1818/1819 1620/1817/1818 1461/1821/1822 1623/1825/1826
-f 1733/1798/1801 1621/1819/1820 1462/1826/1827 1613/1803/1805
-f 1738/1818/1819 1622/1827/1828 1462/1826/1827 1621/1819/1820
-f 1770/1828/1829 1674/1829/1830 1462/1826/1827 1622/1827/1828
-f 1769/1805/1807 1613/1803/1805 1462/1826/1827 1674/1829/1830
-f 1738/1818/1819 1623/1825/1826 1463/1830/1831 1622/1827/1828
-f 1771/1824/1825 1676/1831/1832 1463/1830/1831 1623/1825/1826
-f 1779/1832/1833 1675/1833/1834 1463/1830/1831 1676/1831/1832
-f 1770/1828/1829 1622/1827/1828 1463/1830/1831 1675/1833/1834
-f 1731/1775/1780 1624/1774/1779 1464/1835/1835 1618/1834/1815
-f 1735/1782/1787 1626/1836/1836 1464/1835/1835 1624/1774/1779
-f 1739/1837/1837 1627/1838/1838 1464/1835/1835 1626/1836/1836
-f 1734/1839/1817 1618/1834/1815 1464/1835/1835 1627/1838/1838
-f 1735/1782/1787 1625/1786/1791 1465/1840/1839 1626/1836/1836
-f 1766/1791/1796 1669/1841/1840 1465/1840/1839 1625/1786/1791
-f 1765/1842/1841 1629/1843/1842 1465/1840/1839 1669/1841/1840
-f 1739/1837/1837 1626/1836/1836 1465/1840/1839 1629/1843/1842
-f 1734/1839/1817 1627/1838/1838 1466/1845/1843 1619/1844/1821
-f 1739/1837/1837 1628/1846/1844 1466/1845/1843 1627/1838/1838
-f 1773/1847/1845 1678/1848/1846 1466/1845/1843 1628/1846/1844
-f 1772/1849/1823 1619/1844/1821 1466/1845/1843 1678/1848/1846
-f 1739/1837/1837 1629/1843/1842 1467/1850/1847 1628/1846/1844
-f 1765/1842/1841 1668/1851/1848 1467/1850/1847 1629/1843/1842
-f 1778/1852/1849 1679/1853/1850 1467/1850/1847 1668/1851/1848
-f 1773/1847/1845 1628/1846/1844 1467/1850/1847 1679/1853/1850
-f 1740/1639/1652 1630/1854/1851 1468/1855/1852 1542/1640/1653
-f 1741/1856/1853 1632/1857/1854 1468/1855/1852 1630/1854/1851
-f 1744/1858/1855 1633/1859/1856 1468/1855/1852 1632/1857/1854
-f 1743/1642/1655 1542/1640/1653 1468/1855/1852 1633/1859/1856
-f 1741/1856/1853 1631/1860/1857 1469/1861/1858 1632/1857/1854
-f 1772/1849/1823 1678/1848/1846 1469/1861/1858 1631/1860/1857
-f 1773/1847/1845 1635/1862/1859 1469/1861/1858 1678/1848/1846
-f 1744/1858/1855 1632/1857/1854 1469/1861/1858 1635/1862/1859
-f 1743/1642/1655 1633/1859/1856 1470/1863/1860 1543/1650/1663
-f 1744/1858/1855 1634/1864/1861 1470/1863/1860 1633/1859/1856
-f 1775/1865/1862 1680/1866/1863 1470/1863/1860 1634/1864/1861
-f 1774/1652/1665 1543/1650/1663 1470/1863/1860 1680/1866/1863
-f 1744/1858/1855 1635/1862/1859 1471/1867/1864 1634/1864/1861
-f 1773/1847/1845 1679/1853/1850 1471/1867/1864 1635/1862/1859
-f 1778/1852/1849 1681/1868/1865 1471/1867/1864 1679/1853/1850
-f 1775/1865/1862 1634/1864/1861 1471/1867/1864 1681/1868/1865
-f 1740/1659/1652 1536/1658/1671 1472/1870/1866 1630/1869/1851
-f 1742/1666/1676 1636/1871/1867 1472/1870/1866 1536/1658/1671
-f 1745/1872/1868 1637/1873/1869 1472/1870/1866 1636/1871/1867
-f 1741/1874/1853 1630/1869/1851 1472/1870/1866 1637/1873/1869
-f 1742/1666/1676 1537/1667/1677 1473/1875/1870 1636/1871/1867
-f 1777/1672/1682 1683/1876/1871 1473/1875/1870 1537/1667/1677
-f 1776/1877/1872 1639/1878/1873 1473/1875/1870 1683/1876/1871
-f 1745/1872/1868 1636/1871/1867 1473/1875/1870 1639/1878/1873
-f 1741/1874/1853 1637/1873/1869 1474/1880/1874 1631/1879/1857
-f 1745/1872/1868 1638/1881/1875 1474/1880/1874 1637/1873/1869
-f 1771/1824/1825 1677/1823/1824 1474/1880/1874 1638/1881/1875
-f 1772/1822/1823 1631/1879/1857 1474/1880/1874 1677/1823/1824
-f 1745/1872/1868 1639/1878/1873 1475/1882/1876 1638/1881/1875
-f 1776/1877/1872 1682/1883/1877 1475/1882/1876 1639/1878/1873
-f 1779/1832/1833 1676/1831/1832 1475/1882/1876 1682/1883/1877
-f 1771/1824/1825 1638/1881/1875 1475/1882/1876 1676/1831/1832
-f 1746/1679/1688 1640/1884/1878 1476/1885/1879 1544/1680/1689
-f 1748/1886/1880 1642/1887/1881 1476/1885/1879 1640/1884/1878
-f 1750/1888/1882 1643/1889/1883 1476/1885/1879 1642/1887/1881
-f 1747/1682/1691 1544/1680/1689 1476/1885/1879 1643/1889/1883
-f 1748/1886/1880 1641/1890/1884 1477/1891/1885 1642/1887/1881
-f 1766/1791/1796 1670/1790/1795 1477/1891/1885 1641/1890/1884
-f 1767/1789/1794 1645/1892/1886 1477/1891/1885 1670/1790/1795
-f 1750/1888/1882 1642/1887/1881 1477/1891/1885 1645/1892/1886
-f 1747/1682/1691 1643/1889/1883 1478/1893/1887 1545/1690/1699
-f 1750/1888/1882 1644/1894/1888 1478/1893/1887 1643/1889/1883
-f 1758/1762/1769 1661/1761/1768 1478/1893/1887 1644/1894/1888
-f 1759/1547/1570 1545/1690/1699 1478/1893/1887 1661/1761/1768
-f 1750/1888/1882 1645/1892/1886 1479/1895/1889 1644/1894/1888
-f 1767/1789/1794 1671/1793/1798 1479/1895/1889 1645/1892/1886
-f 1780/1772/1777 1660/1771/1776 1479/1895/1889 1671/1793/1798
-f 1758/1762/1769 1644/1894/1888 1479/1895/1889 1660/1771/1776
-f 1746/1679/1688 1552/1694/1703 1480/1896/1890 1640/1884/1878
-f 1749/1699/1708 1646/1897/1891 1480/1896/1890 1552/1694/1703
-f 1751/1898/1892 1647/1899/1893 1480/1896/1890 1646/1897/1891
-f 1748/1886/1880 1640/1884/1878 1480/1896/1890 1647/1899/1893
-f 1749/1699/1708 1553/1700/1709 1481/1900/1894 1646/1897/1891
-f 1774/1652/1665 1680/1866/1863 1481/1900/1894 1553/1700/1709
-f 1775/1865/1862 1649/1901/1895 1481/1900/1894 1680/1866/1863
-f 1751/1898/1892 1646/1897/1891 1481/1900/1894 1649/1901/1895
-f 1748/1886/1880 1647/1899/1893 1482/1902/1896 1641/1890/1884
-f 1751/1898/1892 1648/1903/1897 1482/1902/1896 1647/1899/1893
-f 1765/1842/1841 1669/1841/1840 1482/1902/1896 1648/1903/1897
-f 1766/1791/1796 1641/1890/1884 1482/1902/1896 1669/1841/1840
-f 1751/1898/1892 1649/1901/1895 1483/1904/1898 1648/1903/1897
-f 1775/1865/1862 1681/1868/1865 1483/1904/1898 1649/1901/1895
-f 1778/1852/1849 1668/1851/1848 1483/1904/1898 1681/1868/1865
-f 1765/1842/1841 1648/1903/1897 1483/1904/1898 1668/1851/1848
-f 1752/1707/1716 1558/1706/1715 1484/1906/1900 1654/1905/1899
-f 1753/1714/1723 1650/1907/1901 1484/1906/1900 1558/1706/1715
-f 1756/1908/1902 1651/1909/1903 1484/1906/1900 1650/1907/1901
-f 1755/1910/1904 1654/1905/1899 1484/1906/1900 1651/1909/1903
-f 1753/1714/1723 1559/1715/1724 1485/1911/1905 1650/1907/1901
-f 1760/1525/1551 1662/1749/1758 1485/1911/1905 1559/1715/1724
-f 1761/1748/1757 1653/1912/1906 1485/1911/1905 1662/1749/1758
-f 1756/1908/1902 1650/1907/1901 1485/1911/1905 1653/1912/1906
-f 1755/1910/1904 1651/1909/1903 1486/1914/1908 1655/1913/1907
-f 1756/1908/1902 1652/1915/1909 1486/1914/1908 1651/1909/1903
-f 1768/1807/1809 1673/1806/1808 1486/1914/1908 1652/1915/1909
-f 1769/1805/1807 1655/1913/1907 1486/1914/1908 1673/1806/1808
-f 1756/1908/1902 1653/1912/1906 1487/1916/1910 1652/1915/1909
-f 1761/1748/1757 1663/1753/1762 1487/1916/1910 1653/1912/1906
-f 1781/1752/1761 1672/1813/1814 1487/1916/1910 1663/1753/1762
-f 1768/1807/1809 1652/1915/1909 1487/1916/1910 1672/1813/1814
-f 1752/1707/1716 1654/1905/1899 1488/1917/1911 1564/1722/1731
-f 1755/1910/1904 1656/1918/1912 1488/1917/1911 1654/1905/1899
-f 1757/1919/1913 1657/1920/1914 1488/1917/1911 1656/1918/1912
-f 1754/1724/1733 1564/1722/1731 1488/1917/1911 1657/1920/1914
-f 1755/1910/1904 1655/1913/1907 1489/1921/1915 1656/1918/1912
-f 1769/1805/1807 1674/1829/1830 1489/1921/1915 1655/1913/1907
-f 1770/1828/1829 1659/1922/1916 1489/1921/1915 1674/1829/1830
-f 1757/1919/1913 1656/1918/1912 1489/1921/1915 1659/1922/1916
-f 1754/1724/1733 1657/1920/1914 1490/1923/1917 1565/1730/1739
-f 1757/1919/1913 1658/1924/1918 1490/1923/1917 1657/1920/1914
-f 1776/1877/1872 1683/1876/1871 1490/1923/1917 1658/1924/1918
-f 1777/1672/1682 1565/1730/1739 1490/1923/1917 1683/1876/1871
-f 1757/1919/1913 1659/1922/1916 1491/1925/1919 1658/1924/1918
-f 1770/1828/1829 1675/1833/1834 1491/1925/1919 1659/1922/1916
-f 1779/1832/1833 1682/1883/1877 1491/1925/1919 1675/1833/1834
-f 1776/1877/1872 1658/1924/1918 1491/1925/1919 1682/1883/1877
+f 4/4/4 1/3/3 2/2/2 3/1/1
+f 5/6/6 6/5/5 4/4/4 3/1/1
+f 8/8/8 1/3/3 4/4/4 7/7/7
+f 4/4/4 6/5/5 9/9/9 7/7/7
+f 11/11/11 2/2/2 1/3/3 10/10/10
+f 6/5/5 5/6/6 12/13/13 13/12/12
+f 1/3/3 8/8/8 14/14/14 10/10/10
+f 15/15/15 9/9/9 6/5/5 13/12/12
+f 10/10/10 17/17/17 16/16/16 11/11/11
+f 19/19/19 18/18/18 13/12/12 12/13/13
+f 20/20/20 17/17/17 10/10/10 14/14/14
+f 13/12/12 18/18/18 21/21/21 15/15/15
+f 23/23/23 16/16/16 17/17/17 22/22/22
+f 18/18/18 19/19/19 24/25/25 25/24/24
+f 17/17/17 20/20/20 26/26/26 22/22/22
+f 27/27/27 21/21/21 18/18/18 25/24/24
+f 29/29/29 23/23/23 22/22/22 28/28/28
+f 25/24/24 24/25/25 30/31/31 31/30/30
+f 22/22/22 26/26/26 32/32/32 28/28/28
+f 33/33/33 27/27/27 25/24/24 31/30/30
+f 35/35/35 29/29/29 28/28/28 34/34/34
+f 31/30/30 30/31/31 36/37/37 37/36/36
+f 38/38/38 34/34/34 28/28/28 32/32/32
+f 31/30/30 37/36/36 39/39/39 33/33/33
+f 41/41/41 35/35/35 34/34/34 40/40/40
+f 37/36/36 36/37/37 42/43/43 43/42/42
+f 34/34/34 38/38/38 44/44/44 40/40/40
+f 45/45/45 39/39/39 37/36/36 43/42/42
+f 47/47/47 40/40/40 44/44/44 46/46/46
+f 45/45/45 43/42/42 48/49/49 49/48/48
+f 50/50/50 41/41/41 40/40/40 47/47/47
+f 43/42/42 42/43/43 51/51/51 48/49/49
+f 2/2/2 53/53/53 52/52/52 3/1/1
+f 52/52/52 54/54/54 5/6/6 3/1/1
+f 53/53/53 2/2/2 11/11/11 55/55/55
+f 12/13/13 5/6/6 54/54/54 56/56/56
+f 55/55/55 11/11/11 16/16/16 57/57/57
+f 19/19/19 12/13/13 56/56/56 58/58/58
+f 16/16/16 23/23/23 59/59/59 57/57/57
+f 60/60/60 24/25/25 19/19/19 58/58/58
+f 23/23/23 29/29/29 61/61/61 59/59/59
+f 62/62/62 30/31/31 24/25/25 60/60/60
+f 29/29/29 35/35/35 63/63/63 61/61/61
+f 64/64/64 36/37/37 30/31/31 62/62/62
+f 65/65/65 63/63/63 35/35/35 41/41/41
+f 36/37/37 64/64/64 66/66/66 42/43/43
+f 67/67/67 65/65/65 41/41/41 50/50/50
+f 42/43/43 66/66/66 68/68/68 51/51/51
+f 47/47/47 69/69/69 67/67/67 50/50/50
+f 68/68/68 70/70/70 48/49/49 51/51/51
+f 69/69/69 47/47/47 46/46/46 71/71/71
+f 49/48/48 48/49/49 70/70/70 72/72/72
+f 7/7/7 74/74/74 73/73/73 8/8/8
+f 75/75/75 74/74/74 7/7/7 9/9/9
+f 8/8/8 73/73/73 76/76/76 14/14/14
+f 77/77/77 75/75/75 9/9/9 15/15/15
+f 14/14/14 76/76/76 78/78/78 20/20/20
+f 79/79/79 77/77/77 15/15/15 21/21/21
+f 20/20/20 78/78/78 80/80/80 26/26/26
+f 81/81/81 79/79/79 21/21/21 27/27/27
+f 82/82/82 32/32/32 26/26/26 80/80/80
+f 27/27/27 33/33/33 83/83/83 81/81/81
+f 32/32/32 82/82/82 84/84/84 38/38/38
+f 85/85/85 83/83/83 33/33/33 39/39/39
+f 84/84/84 86/86/86 44/44/44 38/38/38
+f 45/45/45 87/87/87 85/85/85 39/39/39
+f 86/86/86 88/88/88 46/46/46 44/44/44
+f 49/48/48 89/89/89 87/87/87 45/45/45
+f 71/71/71 46/46/46 88/88/88 90/90/90
+f 89/89/89 49/48/48 72/72/72 91/91/91
+f 92/93/93 93/92/92 73/73/73 74/74/74
+f 75/75/75 94/94/94 92/93/93 74/74/74
+f 82/82/82 96/96/96 95/95/95 84/84/84
+f 98/98/98 97/97/97 83/83/83 85/85/85
+f 99/99/99 96/96/96 82/82/82 80/80/80
+f 83/83/83 97/97/97 100/100/100 81/81/81
+f 101/101/101 99/99/99 80/80/80 78/78/78
+f 81/81/81 100/100/100 102/102/102 79/79/79
+f 78/78/78 76/76/76 103/103/103 101/101/101
+f 104/104/104 77/77/77 79/79/79 102/102/102
+f 76/76/76 73/73/73 93/92/92 103/103/103
+f 94/94/94 75/75/75 77/77/77 104/104/104
+f 88/88/88 105/106/106 106/105/105 90/90/90
+f 107/108/108 108/107/107 89/89/89 91/91/91
+f 105/106/106 88/88/88 86/86/86 109/109/109
+f 87/87/87 89/89/89 108/107/107 110/110/110
+f 95/95/95 109/109/109 86/86/86 84/84/84
+f 87/87/87 110/110/110 98/98/98 85/85/85
+f 93/92/92 92/93/93 111/112/112 112/111/111
+f 111/112/112 92/93/93 94/94/94 113/113/113
+f 103/103/103 93/92/92 112/111/111 114/114/114
+f 113/113/113 94/94/94 104/104/104 115/115/115
+f 101/101/101 103/103/103 114/114/114 116/116/116
+f 115/115/115 104/104/104 102/102/102 117/117/117
+f 99/99/99 101/101/101 116/116/116 118/118/118
+f 117/117/117 102/102/102 100/100/100 119/119/119
+f 96/96/96 99/99/99 118/118/118 120/120/120
+f 119/119/119 100/100/100 97/97/97 121/121/121
+f 95/95/95 96/96/96 120/120/120 122/122/122
+f 121/121/121 97/97/97 98/98/98 123/123/123
+f 109/109/109 95/95/95 122/122/122 124/124/124
+f 123/123/123 98/98/98 110/110/110 125/125/125
+f 124/124/124 106/105/105 105/106/106 109/109/109
+f 108/107/107 107/108/108 125/125/125 110/110/110
+f 66/66/66 64/64/64 127/127/127 126/126/126
+f 64/64/64 62/62/62 128/128/128 127/127/127
+f 62/62/62 60/60/60 129/129/129 128/128/128
+f 60/60/60 58/58/58 130/130/130 129/129/129
+f 58/58/58 56/56/56 131/131/131 130/130/130
+f 56/56/56 54/54/54 132/132/132 131/131/131
+f 54/54/54 52/52/52 133/133/133 132/132/132
+f 133/133/133 52/52/52 53/53/53 134/134/134
+f 134/134/134 53/53/53 55/55/55 135/135/135
+f 135/135/135 55/55/55 57/57/57 136/136/136
+f 136/136/136 57/57/57 59/59/59 137/137/137
+f 137/137/137 59/59/59 61/61/61 138/138/138
+f 138/138/138 61/61/61 63/63/63 139/139/139
+f 139/139/139 63/63/63 65/65/65 140/140/140
+f 71/71/71 90/90/90 69/69/69
+f 69/69/69 90/90/90 140/140/140
+f 72/72/72 70/70/70 91/91/91
+f 91/91/91 70/70/70 126/126/126
+f 67/67/67 69/69/69 140/140/140 65/65/65
+f 126/126/126 70/70/70 68/68/68 66/66/66
+f 212/145/145 213/144/144 181/143/143 143/142/142
+f 219/149/149 220/148/148 182/147/147 145/146/146
+f 226/153/153 227/152/152 180/151/151 144/150/150
+f 233/157/157 234/156/156 183/155/155 149/154/154
+f 240/161/161 241/160/160 179/159/159 148/158/158
+f 247/165/165 248/164/164 184/163/163 153/162/162
+f 156/169/169 177/168/168 178/167/167 152/166/166
+f 184/163/163 185/171/171 157/170/170 153/162/162
+f 142/175/175 214/174/174 215/173/173 160/172/172
+f 146/179/179 221/178/178 222/177/177 161/176/176
+f 141/183/183 228/182/182 229/181/181 159/180/180
+f 150/187/187 235/186/186 236/185/185 163/184/184
+f 147/191/191 242/190/190 243/189/189 162/188/188
+f 154/195/195 249/194/194 250/193/193 165/192/192
+f 151/199/199 155/198/198 166/197/197 164/196/196
+f 158/201/201 154/195/195 165/192/192 167/200/200
+f 211/203/203 212/145/145 143/142/142 168/202/202
+f 218/205/205 219/149/149 145/146/146 170/204/204
+f 225/207/207 226/153/153 144/150/150 169/206/206
+f 232/209/209 233/157/157 149/154/154 172/208/208
+f 239/211/211 240/161/161 148/158/158 171/210/210
+f 246/213/213 247/165/165 153/162/162 174/212/212
+f 156/169/169 152/166/166 173/215/215 175/214/214
+f 153/162/162 157/170/170 176/216/216 174/212/212
+f 178/167/167 177/168/168 155/198/198 151/199/199
+f 179/159/159 241/160/160 242/190/190 147/191/191
+f 180/151/151 227/152/152 228/182/182 141/183/183
+f 213/144/144 214/174/174 142/175/175 181/143/143
+f 146/179/179 182/147/147 220/148/148 221/178/178
+f 150/187/187 183/155/155 234/156/156 235/186/186
+f 154/195/195 184/163/163 248/164/164 249/194/194
+f 158/201/201 185/171/171 184/163/163 154/195/195
+f 177/168/168 156/169/169 175/214/214 186/217/217
+f 157/170/170 185/171/171 187/218/218 176/216/216
+f 155/198/198 177/168/168 186/217/217 188/219/219
+f 185/171/171 158/201/201 189/220/220 187/218/218
+f 188/219/219 190/221/221 166/197/197 155/198/198
+f 191/222/222 189/220/220 158/201/201 167/200/200
+f 210/224/224 211/203/203 168/202/202 192/223/223
+f 217/226/226 218/205/205 170/204/204 194/225/225
+f 224/228/228 225/207/207 169/206/206 193/227/227
+f 231/230/230 232/209/209 172/208/208 196/229/229
+f 238/232/232 239/211/211 171/210/210 195/231/231
+f 245/234/234 246/213/213 174/212/212 198/233/233
+f 197/236/236 199/235/235 175/214/214 173/215/215
+f 200/237/237 198/233/233 174/212/212 176/216/216
+f 199/235/235 201/238/238 186/217/217 175/214/214
+f 202/239/239 200/237/237 176/216/216 187/218/218
+f 160/172/172 215/173/173 216/241/241 204/240/240
+f 161/176/176 222/177/177 223/243/243 205/242/242
+f 159/180/180 229/181/181 230/245/245 203/244/244
+f 163/184/184 236/185/185 237/247/247 207/246/246
+f 162/188/188 243/189/189 244/249/249 206/248/248
+f 165/192/192 250/193/193 251/251/251 209/250/250
+f 164/196/196 166/197/197 190/221/221 208/252/252
+f 167/200/200 165/192/192 209/250/250 191/222/222
+f 169/206/206 211/203/203 210/224/224 193/227/227
+f 144/150/150 212/145/145 211/203/203 169/206/206
+f 180/151/151 213/144/144 212/145/145 144/150/150
+f 141/183/183 214/174/174 213/144/144 180/151/151
+f 215/173/173 214/174/174 141/183/183 159/180/180
+f 216/241/241 215/173/173 159/180/180 203/244/244
+f 168/202/202 218/205/205 217/226/226 192/223/223
+f 143/142/142 219/149/149 218/205/205 168/202/202
+f 181/143/143 220/148/148 219/149/149 143/142/142
+f 221/178/178 220/148/148 181/143/143 142/175/175
+f 222/177/177 221/178/178 142/175/175 160/172/172
+f 223/243/243 222/177/177 160/172/172 204/240/240
+f 171/210/210 225/207/207 224/228/228 195/231/231
+f 148/158/158 226/153/153 225/207/207 171/210/210
+f 148/158/158 179/159/159 227/152/152 226/153/153
+f 228/182/182 227/152/152 179/159/159 147/191/191
+f 229/181/181 228/182/182 147/191/191 162/188/188
+f 230/245/245 229/181/181 162/188/188 206/248/248
+f 170/204/204 232/209/209 231/230/230 194/225/225
+f 145/146/146 233/157/157 232/209/209 170/204/204
+f 182/147/147 234/156/156 233/157/157 145/146/146
+f 235/186/186 234/156/156 182/147/147 146/179/179
+f 236/185/185 235/186/186 146/179/179 161/176/176
+f 237/247/247 236/185/185 161/176/176 205/242/242
+f 173/215/215 239/211/211 238/232/232 197/236/236
+f 152/166/166 240/161/161 239/211/211 173/215/215
+f 152/166/166 178/167/167 241/160/160 240/161/161
+f 242/190/190 241/160/160 178/167/167 151/199/199
+f 243/189/189 242/190/190 151/199/199 164/196/196
+f 244/249/249 243/189/189 164/196/196 208/252/252
+f 172/208/208 246/213/213 245/234/234 196/229/229
+f 149/154/154 247/165/165 246/213/213 172/208/208
+f 183/155/155 248/164/164 247/165/165 149/154/154
+f 249/194/194 248/164/164 183/155/155 150/187/187
+f 250/193/193 249/194/194 150/187/187 163/184/184
+f 251/251/251 250/193/193 163/184/184 207/246/246
+f 271/256/256 260/255/255 312/254/254 356/253/253
+f 271/256/256 319/258/257 316/257/257 260/255/255
+f 272/262/261 253/261/260 309/260/259 306/259/258
+f 272/262/261 357/264/263 334/263/262 253/261/260
+f 296/268/267 254/267/266 335/266/265 331/265/264
+f 296/268/267 318/270/269 311/269/268 254/267/266
+f 298/272/272 255/271/271 311/269/270 318/270/270
+f 298/272/272 356/253/274 312/254/273 255/271/271
+f 294/276/278 256/275/277 313/274/276 308/273/275
+f 294/276/278 307/278/279 310/277/279 256/275/277
+f 295/282/283 257/281/282 314/280/281 317/279/280
+f 295/282/283 308/273/284 313/274/284 257/281/282
+f 299/286/288 258/285/287 315/284/286 355/283/285
+f 299/286/288 317/279/289 314/280/289 258/285/287
+f 300/288/291 259/287/291 316/257/290 319/258/290
+f 300/288/291 355/283/292 315/284/292 259/287/291
+f 270/290/295 252/289/294 310/277/293 307/278/293
+f 270/290/295 306/259/297 309/260/296 252/289/294
+f 261/292/299 252/289/294 309/260/296 320/291/298
+f 261/292/299 321/293/300 310/277/300 252/289/294
+f 262/295/302 253/261/260 334/263/262 347/294/301
+f 262/295/302 320/291/303 309/260/259 253/261/260
+f 263/297/305 254/267/266 311/269/268 322/296/304
+f 263/297/305 348/298/306 335/266/265 254/267/266
+f 264/300/308 255/271/271 312/254/273 323/299/307
+f 264/300/308 322/296/309 311/269/309 255/271/271
+f 265/301/311 256/275/277 310/277/310 321/293/310
+f 265/301/311 324/302/312 313/274/276 256/275/277
+f 266/303/314 257/281/282 313/274/313 324/302/313
+f 266/303/314 325/304/315 314/280/281 257/281/282
+f 267/305/317 258/285/287 314/280/316 325/304/316
+f 267/305/317 326/306/318 315/284/286 258/285/287
+f 268/307/320 259/287/320 315/284/319 326/306/319
+f 268/307/320 327/308/321 316/257/321 259/287/320
+f 269/309/323 260/255/255 316/257/322 327/308/322
+f 269/309/323 323/299/324 312/254/254 260/255/255
+f 292/313/328 281/312/327 341/311/326 344/310/325
+f 359/315/330 337/314/329 281/312/327 292/313/328
+f 293/317/333 274/316/332 334/263/331 357/264/331
+f 328/319/335 332/318/334 274/316/332 293/317/333
+f 297/323/339 275/322/338 336/321/337 343/320/336
+f 331/265/340 335/266/340 275/322/338 297/323/339
+f 303/325/344 276/324/343 337/314/342 359/315/341
+f 343/320/346 336/321/345 276/324/343 303/325/344
+f 301/329/350 277/328/349 333/327/348 329/326/347
+f 330/331/352 338/330/351 277/328/349 301/329/350
+f 302/333/356 278/332/355 338/330/354 330/331/353
+f 342/335/358 339/334/357 278/332/355 302/333/356
+f 304/337/362 279/336/361 339/334/360 342/335/359
+f 358/339/364 340/338/363 279/336/361 304/337/362
+f 305/341/368 280/340/367 340/338/366 358/339/365
+f 344/310/370 341/311/369 280/340/367 305/341/368
+f 291/343/374 273/342/373 332/318/372 328/319/371
+f 329/326/376 333/327/375 273/342/373 291/343/374
+f 282/345/378 273/342/373 333/327/375 346/344/377
+f 345/346/379 332/318/372 273/342/373 282/345/378
+f 283/347/381 274/316/332 332/318/334 345/346/380
+f 347/294/382 334/263/382 274/316/332 283/347/381
+f 284/348/384 275/322/338 335/266/383 348/298/383
+f 349/349/385 336/321/337 275/322/338 284/348/384
+f 285/350/387 276/324/343 336/321/345 349/349/386
+f 350/351/388 337/314/342 276/324/343 285/350/387
+f 286/353/390 277/328/349 338/330/351 351/352/389
+f 346/344/391 333/327/348 277/328/349 286/353/390
+f 287/355/393 278/332/355 339/334/357 352/354/392
+f 351/352/394 338/330/354 278/332/355 287/355/393
+f 288/357/396 279/336/361 340/338/363 353/356/395
+f 352/354/397 339/334/360 279/336/361 288/357/396
+f 289/359/399 280/340/367 341/311/369 354/358/398
+f 353/356/400 340/338/366 280/340/367 289/359/399
+f 290/360/402 281/312/327 337/314/329 350/351/401
+f 354/358/403 341/311/326 281/312/327 290/360/402
+f 360/363/406 378/362/405 379/361/404
+f 360/363/406 380/364/408 378/362/407
+f 360/363/406 261/292/410 320/291/409 380/364/408
+f 360/363/406 379/361/404 321/293/411 261/292/410
+f 361/365/413 378/362/412 380/364/408
+f 361/365/413 381/366/415 378/362/414
+f 361/365/413 262/295/417 347/294/416 381/366/415
+f 361/365/413 380/364/408 320/291/409 262/295/417
+f 362/368/420 378/362/419 382/367/418
+f 362/368/420 383/369/422 378/362/421
+f 362/368/420 263/297/424 322/296/423 383/369/422
+f 362/368/420 382/367/418 348/298/425 263/297/424
+f 363/370/427 378/362/426 383/369/422
+f 363/370/427 384/371/429 378/362/428
+f 363/370/427 264/300/431 323/299/430 384/371/429
+f 363/370/427 383/369/422 322/296/423 264/300/431
+f 364/373/434 378/362/433 385/372/432
+f 364/373/434 379/361/404 378/362/435
+f 364/373/434 265/301/436 321/293/411 379/361/404
+f 364/373/434 385/372/432 324/302/437 265/301/436
+f 365/375/440 378/362/439 386/374/438
+f 365/375/440 385/372/432 378/362/441
+f 365/375/440 266/303/442 324/302/437 385/372/432
+f 365/375/440 386/374/438 325/304/443 266/303/442
+f 366/377/446 378/362/445 387/376/444
+f 366/377/446 386/374/438 378/362/447
+f 366/377/446 267/305/448 325/304/443 386/374/438
+f 366/377/446 387/376/444 326/306/449 267/305/448
+f 367/379/452 378/362/451 388/378/450
+f 367/379/452 387/376/444 378/362/453
+f 367/379/452 268/307/454 326/306/449 387/376/444
+f 367/379/452 388/378/450 327/308/455 268/307/454
+f 368/380/457 378/362/456 384/371/429
+f 368/380/457 388/378/450 378/362/458
+f 368/380/457 269/309/459 327/308/455 388/378/450
+f 368/380/457 384/371/429 323/299/430 269/309/459
+f 369/382/462 389/381/461 378/362/460
+f 369/382/462 282/345/464 346/344/463 389/381/461
+f 369/382/462 390/383/466 345/346/465 282/345/464
+f 369/382/462 378/362/467 390/383/466
+f 370/384/469 390/383/466 378/362/468
+f 370/384/469 283/347/470 345/346/465 390/383/466
+f 370/384/469 381/366/415 347/294/416 283/347/470
+f 370/384/469 378/362/471 381/366/415
+f 371/385/473 382/367/418 378/362/472
+f 371/385/473 284/348/474 348/298/425 382/367/418
+f 371/385/473 391/386/476 349/349/475 284/348/474
+f 371/385/473 378/362/477 391/386/476
+f 372/387/479 391/386/476 378/362/478
+f 372/387/479 285/350/480 349/349/475 391/386/476
+f 372/387/479 392/388/482 350/351/481 285/350/480
+f 372/387/479 378/362/483 392/388/482
+f 373/390/486 393/389/485 378/362/484
+f 373/390/486 286/353/488 351/352/487 393/389/485
+f 373/390/486 389/381/461 346/344/463 286/353/488
+f 373/390/486 378/362/489 389/381/461
+f 374/392/492 394/391/491 378/362/490
+f 374/392/492 287/355/494 352/354/493 394/391/491
+f 374/392/492 393/389/485 351/352/487 287/355/494
+f 374/392/492 378/362/495 393/389/485
+f 375/394/498 395/393/497 378/362/496
+f 375/394/498 288/357/500 353/356/499 395/393/497
+f 375/394/498 394/391/491 352/354/493 288/357/500
+f 375/394/498 378/362/501 394/391/491
+f 376/396/504 396/395/503 378/362/502
+f 376/396/504 289/359/506 354/358/505 396/395/503
+f 376/396/504 395/393/497 353/356/499 289/359/506
+f 376/396/504 378/362/507 395/393/497
+f 377/397/509 392/388/482 378/362/508
+f 377/397/509 290/360/510 350/351/481 392/388/482
+f 377/397/509 396/395/503 354/358/505 290/360/510
+f 377/397/509 378/362/511 396/395/503
+f 397/401/515 482/400/514 481/399/513 480/398/512
+f 397/401/515 480/398/512 543/402/516
+f 480/398/512 582/404/518 653/403/517 543/402/516
+f 480/398/512 481/399/513 633/405/519 582/404/518
+f 398/407/521 583/406/520 633/405/519 481/399/513
+f 398/407/521 584/409/523 634/408/522 583/406/520
+f 399/410/524 398/407/521 481/399/513 482/400/514
+f 399/410/524 585/411/525 584/409/523 398/407/521
+f 399/410/524 542/413/527 701/412/526 585/411/525
+f 400/417/529 586/416/528 701/415/526 542/414/527
+f 402/421/533 581/420/532 631/419/531 588/418/530
+f 402/421/533 543/402/516 653/403/517 581/420/532
+f 404/425/537 757/424/536 755/423/535 484/422/534
+f 484/422/534 755/423/535 758/427/539 405/426/538
+f 405/426/538 758/427/539 759/429/541 597/428/540
+f 404/425/537 462/431/543 756/430/542 757/424/536
+f 589/435/547 485/434/546 659/433/545 678/432/544
+f 589/435/547 588/418/530 631/419/531 485/434/546
+f 403/437/549 678/432/544 659/433/545 486/436/548
+f 403/437/549 486/436/548 478/439/551 463/438/550
+f 489/443/555 544/442/554 727/441/553 464/440/552
+f 489/443/555 488/445/557 725/444/556 544/442/554
+f 407/447/559 545/446/558 725/444/556 488/445/557
+f 407/447/559 609/449/561 729/448/560 545/446/558
+f 608/451/563 407/447/559 488/445/557 685/450/562
+f 608/451/563 610/452/564 609/449/561 407/447/559
+f 607/453/565 685/450/562 488/445/557 489/443/555
+f 607/453/565 489/443/555 464/440/552 465/454/566
+f 586/416/528 400/417/529 483/456/568 754/455/567
+f 408/460/572 546/459/571 668/458/570 490/457/569
+f 408/460/572 552/462/574 700/461/573 546/459/571
+f 409/464/576 547/463/575 701/415/526 586/416/528
+f 409/464/576 490/457/569 668/458/570 547/463/575
+f 410/468/580 494/467/579 493/466/578 491/465/577
+f 410/468/580 548/470/582 669/469/581 494/467/579
+f 410/468/580 546/472/571 700/471/573 548/470/582
+f 410/468/580 491/465/577 668/473/570 546/472/571
+f 411/475/584 491/465/577 493/466/578 492/474/583
+f 411/475/584 547/476/575 668/473/570 491/465/577
+f 411/475/584 585/411/525 701/412/526 547/476/575
+f 411/475/584 492/474/583 584/409/523 585/411/525
+f 492/474/583 598/477/585 634/408/522 584/409/523
+f 492/474/583 493/466/578 635/478/586 598/477/585
+f 412/479/587 493/466/578 494/467/579
+f 412/479/587 599/480/588 635/478/586 493/466/578
+f 412/479/587 549/482/590 714/481/589 599/480/588
+f 412/479/587 494/467/579 669/469/581 549/482/590
+f 413/486/594 458/485/593 660/484/592 495/483/591
+f 413/486/594 550/488/596 670/487/595 458/485/593
+f 413/486/594 548/470/582 700/471/573 550/488/596
+f 413/486/594 495/483/591 669/469/581 548/470/582
+f 414/490/598 495/483/591 660/484/592 496/489/597
+f 414/490/598 549/482/590 669/469/581 495/483/591
+f 414/490/598 600/491/599 714/481/589 549/482/590
+f 414/490/598 496/489/597 642/492/600 600/491/599
+f 644/496/604 590/495/603 611/494/602 724/493/601
+f 644/496/604 497/498/606 679/497/605 590/495/603
+f 415/500/608 591/499/607 679/497/605 497/498/606
+f 415/500/608 551/502/610 702/501/609 591/499/607
+f 416/506/614 500/505/613 661/504/612 498/503/611
+f 416/506/614 550/507/596 700/461/573 552/462/574
+f 416/506/614 498/503/611 670/508/595 550/507/596
+f 643/512/616 592/511/615 702/510/609 551/509/610
+f 643/512/616 499/514/618 680/513/617 592/511/615
+f 417/516/620 597/428/540 759/429/541 760/515/619
+f 417/516/620 760/515/619 661/504/612 500/505/613
+f 418/520/624 594/519/623 722/518/622 723/517/621
+f 418/520/624 724/493/601 611/494/602 594/519/623
+f 419/524/628 457/523/627 641/522/626 501/521/625
+f 419/524/628 600/491/599 642/492/600 457/523/627
+f 419/524/628 553/525/629 714/481/589 600/491/599
+f 419/524/628 501/521/625 652/526/630 553/525/629
+f 554/530/634 420/529/633 503/528/632 671/527/631
+f 554/530/634 718/532/636 715/531/635 420/529/633
+f 555/534/638 671/527/631 503/528/632 502/533/637
+f 555/534/638 502/533/637 692/536/640 706/535/639
+f 502/533/637 605/538/642 711/537/641 692/536/640
+f 502/533/637 503/528/632 684/539/643 605/538/642
+f 420/529/633 606/540/644 684/539/643 503/528/632
+f 420/529/633 715/531/635 720/541/645 606/540/644
+f 421/543/647 554/530/634 671/527/631 662/542/646
+f 421/543/647 716/544/648 718/532/636 554/530/634
+f 422/546/650 421/543/647 662/542/646 504/545/649
+f 422/546/650 466/547/651 716/544/648 421/543/647
+f 422/546/650 616/549/653 473/548/652 466/547/651
+f 422/546/650 504/545/649 689/550/654 616/549/653
+f 423/552/656 504/545/649 662/542/646 505/551/655
+f 423/552/656 689/550/654 504/545/649
+f 423/552/656 619/554/658 712/553/657 689/550/654
+f 423/552/656 505/551/655 691/555/659 619/554/658
+f 505/551/655 555/534/638 706/535/639 691/555/659
+f 505/551/655 662/542/646 671/527/631 555/534/638
+f 722/518/622 594/519/623 460/557/661 732/556/660
+f 606/540/644 636/559/663 663/558/662 684/539/643
+f 606/540/644 720/541/645 717/560/664 636/559/663
+f 605/538/642 684/539/643 663/558/662 506/561/665
+f 605/538/642 506/561/665 686/562/666 711/537/641
+f 424/564/668 506/561/665 663/558/662 637/563/667
+f 424/564/668 686/562/666 506/561/665
+f 424/564/668 556/566/670 704/565/669 686/562/666
+f 424/564/668 637/563/667 730/567/671 556/566/670
+f 679/497/605 591/499/607 459/569/673 646/568/672
+f 508/573/677 558/572/676 728/571/675 672/570/674
+f 508/573/677 507/575/679 726/574/678 558/572/676
+f 425/577/681 559/576/680 726/574/678 507/575/679
+f 425/577/681 686/562/666 704/565/669 559/576/680
+f 601/579/683 425/577/681 507/575/679 682/578/682
+f 601/579/683 711/537/641 686/562/666 425/577/681
+f 602/580/684 682/578/682 507/575/679 508/573/677
+f 602/580/684 508/573/677 672/570/674 703/581/685
+f 426/585/689 560/584/688 673/583/687 665/582/686
+f 426/585/689 672/587/674 728/586/675 560/584/688
+f 603/589/691 426/585/689 665/582/686 683/588/690
+f 603/589/691 703/590/685 672/587/674 426/585/689
+f 604/592/693 683/588/690 665/582/686 509/591/692
+f 604/592/693 509/591/692 609/449/561 610/452/564
+f 509/591/692 561/593/694 729/448/560 609/449/561
+f 509/591/692 665/582/686 673/583/687 561/593/694
+f 511/597/698 565/596/697 564/595/696 674/594/695
+f 511/597/698 510/599/700 513/598/699 565/596/697
+f 427/601/702 566/600/701 513/598/699 510/599/700
+f 427/601/702 629/603/704 628/602/703 566/600/701
+f 615/605/706 427/601/702 510/599/700 688/604/705
+f 615/605/706 630/606/707 629/603/704 427/601/702
+f 614/607/708 688/604/705 510/599/700 511/597/698
+f 614/607/708 511/597/698 674/594/695 705/608/709
+f 428/612/713 562/611/712 675/610/711 666/609/710
+f 428/612/713 674/614/695 564/613/696 562/611/712
+f 613/616/715 428/612/713 666/609/710 687/615/714
+f 613/616/715 705/617/709 674/614/695 428/612/713
+f 612/619/717 687/615/714 666/609/710 512/618/716
+f 612/619/717 512/618/716 698/620/718 712/553/657
+f 512/618/716 563/622/720 709/621/719 698/620/718
+f 512/618/716 666/609/710 675/610/711 563/622/720
+f 562/611/712 622/624/722 695/623/721 675/610/711
+f 562/611/712 564/613/696 708/625/723 622/624/722
+f 563/622/720 675/610/711 695/623/721 621/626/724
+f 563/622/720 621/626/724 699/627/725 709/621/719
+f 565/596/697 513/598/699 696/629/727 623/628/726
+f 565/596/697 623/628/726 708/630/723 564/595/696
+f 566/600/701 624/631/728 696/629/727 513/598/699
+f 566/600/701 628/602/703 713/632/729 624/631/728
+f 572/636/733 429/635/732 515/634/731 677/633/730
+f 572/636/733 567/638/735 568/637/734 429/635/732
+f 573/640/737 677/633/730 515/634/731 514/639/736
+f 573/640/737 514/639/736 694/642/739 707/641/738
+f 514/639/736 604/592/693 610/452/564 694/642/739
+f 514/639/736 515/634/731 683/588/690 604/592/693
+f 429/635/732 603/589/691 683/588/690 515/634/731
+f 429/635/732 568/637/734 703/590/685 603/589/691
+f 569/646/743 518/645/742 517/644/741 516/643/740
+f 569/646/743 516/643/740 568/648/734 567/647/735
+f 516/643/740 602/580/684 703/581/685 568/648/734
+f 516/643/740 517/644/741 682/578/682 602/580/684
+f 430/649/744 601/579/683 682/578/682 517/644/741
+f 430/649/744 692/536/640 711/537/641 601/579/683
+f 570/650/745 430/649/744 517/644/741 518/645/742
+f 570/650/745 706/535/639 692/536/640 430/649/744
+f 521/652/747 569/646/743 567/647/735 676/651/746
+f 521/652/747 519/653/748 518/645/742 569/646/743
+f 431/654/749 570/650/745 518/645/742 519/653/748
+f 431/654/749 691/555/659 706/535/639 570/650/745
+f 432/656/751 431/654/749 519/653/748 520/655/750
+f 432/656/751 619/554/658 691/555/659 431/654/749
+f 432/656/751 612/619/717 712/553/657 619/554/658
+f 432/656/751 520/655/750 687/615/714 612/619/717
+f 433/657/752 520/655/750 519/653/748 521/652/747
+f 433/657/752 613/616/715 687/615/714 520/655/750
+f 433/657/752 571/658/753 705/617/709 613/616/715
+f 433/657/752 521/652/747 676/651/746 571/658/753
+f 434/660/755 572/636/733 677/633/730 667/659/754
+f 434/660/755 676/661/746 567/638/735 572/636/733
+f 435/663/757 434/660/755 667/659/754 522/662/756
+f 435/663/757 571/664/753 676/661/746 434/660/755
+f 435/663/757 614/607/708 705/608/709 571/664/753
+f 435/663/757 522/662/756 688/604/705 614/607/708
+f 436/666/759 522/662/756 667/659/754 523/665/758
+f 436/666/759 615/605/706 688/604/705 522/662/756
+f 436/666/759 620/667/760 630/606/707 615/605/706
+f 436/666/759 523/665/758 693/668/761 620/667/760
+f 523/665/758 573/640/737 707/641/738 693/668/761
+f 523/665/758 667/659/754 677/633/730 573/640/737
+f 574/672/765 526/671/764 525/670/763 524/669/762
+f 574/672/765 524/669/762 468/674/767 467/673/766
+f 524/669/762 607/453/565 465/454/566 468/674/767
+f 524/669/762 525/670/763 685/450/562 607/453/565
+f 437/675/768 608/451/563 685/450/562 525/670/763
+f 437/675/768 694/642/739 610/452/564 608/451/563
+f 575/676/769 437/675/768 525/670/763 526/671/764
+f 575/676/769 707/641/738 694/642/739 437/675/768
+f 529/678/771 574/672/765 467/673/766 469/677/770
+f 529/678/771 527/679/772 526/671/764 574/672/765
+f 438/680/773 575/676/769 526/671/764 527/679/772
+f 438/680/773 693/668/761 707/641/738 575/676/769
+f 439/682/775 438/680/773 527/679/772 528/681/774
+f 439/682/775 620/667/760 693/668/761 438/680/773
+f 439/682/775 618/683/776 630/606/707 620/667/760
+f 439/682/775 528/681/774 690/684/777 618/683/776
+f 440/685/778 528/681/774 527/679/772 529/678/771
+f 440/685/778 617/686/779 690/684/777 528/681/774
+f 440/685/778 470/688/781 721/687/780 617/686/779
+f 440/685/778 529/678/771 469/677/770 470/688/781
+f 441/692/785 443/691/784 532/690/783 530/689/782
+f 441/692/785 576/694/787 577/693/786 443/691/784
+f 442/696/789 530/689/782 532/690/783 531/695/788
+f 442/696/789 531/695/788 697/698/791 627/697/790
+f 531/695/788 624/631/728 713/632/729 697/698/791
+f 531/695/788 532/690/783 696/629/727 624/631/728
+f 443/691/784 623/628/726 696/629/727 532/690/783
+f 443/691/784 577/693/786 708/630/723 623/628/726
+f 444/702/795 535/701/794 534/700/793 533/699/792
+f 444/702/795 533/699/792 577/704/786 576/703/787
+f 533/699/792 622/624/722 708/625/723 577/704/786
+f 533/699/792 534/700/793 695/623/721 622/624/722
+f 445/705/796 621/626/724 695/623/721 534/700/793
+f 445/705/796 625/706/797 699/627/725 621/626/724
+f 446/707/798 445/705/796 534/700/793 535/701/794
+f 446/707/798 626/708/799 625/706/797 445/705/796
+f 447/712/803 578/711/802 579/710/801 537/709/800
+f 448/714/805 447/712/803 537/709/800 536/713/804
+f 448/714/805 471/715/806 447/712/803
+f 448/714/805 617/686/779 721/687/780 471/715/806
+f 448/714/805 536/713/804 690/684/777 617/686/779
+f 536/713/804 618/683/776 690/684/777
+f 536/713/804 630/606/707 618/683/776
+f 536/713/804 537/709/800 629/603/704 630/606/707
+f 537/709/800 579/710/801 628/602/703 629/603/704
+f 578/711/802 449/717/808 538/716/807 579/710/801
+f 579/710/801 538/716/807 713/632/729 628/602/703
+f 538/716/807 697/698/791 713/632/729
+f 449/717/808 627/697/790 697/698/791 538/716/807
+f 540/721/812 580/720/811 474/719/810 472/718/809
+f 540/721/812 539/723/814 450/722/813 580/720/811
+f 539/723/814 698/620/718 709/621/719 450/722/813
+f 689/550/654 712/553/657 698/620/718 539/723/814
+f 616/549/653 689/550/654 539/723/814 540/721/812
+f 616/549/653 540/721/812 472/718/809 473/548/652
+f 580/720/811 450/722/813 541/725/816 475/724/815
+f 580/720/811 475/724/815 474/719/810
+f 475/724/815 541/725/816 625/706/797 626/708/799
+f 541/725/816 699/627/725 625/706/797
+f 450/722/813 709/621/719 699/627/725 541/725/816
+f 452/726/817 553/525/629 652/526/630
+f 452/726/817 632/727/818 714/481/589 553/525/629
+f 599/480/588 714/481/589 632/727/818
+f 453/729/820 637/563/667 663/558/662 638/728/819
+f 453/729/820 730/567/671 637/563/667
+f 454/731/822 732/556/660 730/567/671 648/730/821
+f 638/728/819 663/558/662 636/559/663
+f 638/728/819 636/559/663 717/560/664 476/732/823
+f 655/735/826 838/734/825 651/733/824
+f 455/737/828 641/522/626 723/517/621 654/736/827
+f 456/740/831 451/739/830 652/526/630 640/738/829
+f 456/740/831 477/742/833 479/741/832 451/739/830
+f 640/738/829 652/526/630 501/521/625
+f 640/738/829 501/521/625 641/522/626 455/737/828
+f 457/523/627 418/520/624 723/517/621 641/522/626
+f 457/523/627 642/492/600 724/493/601 418/520/624
+f 498/503/611 643/512/616 551/509/610 670/508/595
+f 498/503/611 661/504/612 499/514/618 643/512/616
+f 458/485/593 415/500/608 497/498/606 660/484/592
+f 458/485/593 670/487/595 551/502/610 415/500/608
+f 496/489/597 644/496/604 724/493/601 642/492/600
+f 496/489/597 660/484/592 497/498/606 644/496/604
+f 654/736/827 723/517/621 722/518/622 639/743/834
+f 649/745/836 559/576/680 704/565/669 731/744/835
+f 649/745/836 646/568/672 726/574/678 559/576/680
+f 459/569/673 558/572/676 726/574/678 646/568/672
+f 459/569/673 557/746/837 728/571/675 558/572/676
+f 767/748/839 561/593/694 673/583/687 664/747/838
+f 767/748/839 647/749/840 729/448/560 561/593/694
+f 710/751/842 647/749/840 767/748/839 593/750/841
+f 650/753/843 560/584/688 728/586/675 557/752/837
+f 650/753/843 664/747/838 673/583/687 560/584/688
+f 460/557/661 556/566/670 730/567/671 732/556/660
+f 460/557/661 731/744/835 704/565/669 556/566/670
+f 681/757/847 645/756/846 768/755/845 596/754/844
+f 768/755/845 545/446/558 729/448/560 647/749/840
+f 768/755/845 645/756/846 725/444/556 545/446/558
+f 595/759/849 769/758/848 645/756/846 681/757/847
+f 769/758/848 544/442/554 725/444/556 645/756/846
+f 769/758/848 770/760/850 727/441/553 544/442/554
+f 719/761/851 770/760/850 769/758/848 595/759/849
+f 648/730/821 730/567/671 453/729/820
+f 679/497/605 646/568/672 649/745/836 590/495/603
+f 590/495/603 649/745/836 731/744/835 611/494/602
+f 702/501/609 557/746/837 459/569/673 591/499/607
+f 680/513/617 664/747/838 650/753/843 592/511/615
+f 592/511/615 650/753/843 557/752/837 702/510/609
+f 611/494/602 731/744/835 460/557/661 594/519/623
+f 596/754/844 768/755/845 647/749/840 710/751/842
+f 651/733/824 732/556/660 655/735/826
+f 655/735/826 732/556/660 454/731/822
+f 658/765/855 791/764/854 792/763/853 733/762/852
+f 658/765/855 794/767/857 793/766/856
+f 658/765/855 789/769/859 795/768/858
+f 656/772/862 796/771/861 797/770/860
+f 656/772/862 798/774/864 799/773/863
+f 656/772/862 800/776/866 801/775/865
+f 656/772/862 802/778/868 788/777/867
+f 656/772/862 804/780/870 803/779/869
+f 658/765/855 793/766/856 791/764/854
+f 658/765/855 795/768/858 794/767/857
+f 658/765/855 790/781/871 789/769/859
+f 656/772/862 733/762/852 792/763/853 796/771/861
+f 656/772/862 797/770/860 798/774/864
+f 656/772/862 799/773/863 800/776/866
+f 656/772/862 803/779/869 802/778/868
+f 656/772/862 801/775/865 804/780/870
+f 658/765/855 806/783/873 805/782/872
+f 658/765/855 805/782/872 790/781/871
+f 751/787/877 461/786/876 657/785/875 734/784/874
+f 752/789/879 487/788/878 461/786/876 751/787/877
+f 753/791/881 406/790/880 487/788/878 752/789/879
+f 735/793/883 587/792/882 406/790/880 753/791/881
+f 401/795/885 587/792/882 735/793/883 736/794/884
+f 483/456/568 401/795/885 736/794/884 754/455/567
+f 743/797/887 417/516/620 500/505/613 737/796/886
+f 742/798/888 597/428/540 417/516/620 743/797/887
+f 405/426/538 597/428/540 742/798/888 738/799/889
+f 484/422/534 405/426/538 738/799/889 739/800/890
+f 404/425/537 484/422/534 739/800/890 740/801/891
+f 404/425/537 740/801/891 741/802/892 462/431/543
+f 740/801/891 745/804/894 744/803/893 741/802/892
+f 739/800/890 746/805/895 745/804/894 740/801/891
+f 738/799/889 747/806/896 746/805/895 739/800/890
+f 742/798/888 748/807/897 747/806/896 738/799/889
+f 748/807/897 742/798/888 743/797/887 749/808/898
+f 749/808/898 743/797/887 737/796/886 750/809/899
+f 745/804/894 751/787/877 734/784/874 744/803/893
+f 746/805/895 752/789/879 751/787/877 745/804/894
+f 747/806/896 753/791/881 752/789/879 746/805/895
+f 748/807/897 735/793/883 753/791/881 747/806/896
+f 735/793/883 748/807/897 749/808/898 736/794/884
+f 736/794/884 749/808/898 750/809/899 754/455/567
+f 409/464/576 586/416/528 754/455/567
+f 409/464/576 754/455/567 750/809/899 490/457/569
+f 750/809/899 737/796/886 408/460/572 490/457/569
+f 737/796/886 552/462/574 408/460/572
+f 737/796/886 500/505/613 416/506/614 552/462/574
+f 765/811/901 710/751/842 593/750/841 766/810/900
+f 764/812/902 596/754/844 710/751/842 765/811/901
+f 762/813/903 681/757/847 596/754/844 764/812/902
+f 763/814/904 595/759/849 681/757/847 762/813/903
+f 761/815/905 719/761/851 595/759/849 763/814/904
+f 756/430/542 761/815/905 763/814/904 757/424/536
+f 757/424/536 763/814/904 762/813/903 755/423/535
+f 755/423/535 762/813/903 764/812/902 758/427/539
+f 758/427/539 764/812/902 765/811/901 759/429/541
+f 759/429/541 765/811/901 766/810/900 760/515/619
+f 766/810/900 593/750/841 680/513/617 499/514/618
+f 760/515/619 766/810/900 499/514/618 661/504/612
+f 593/750/841 767/748/839 664/747/838 680/513/617
+f 773/817/907 659/433/545 485/434/546 787/816/906
+f 787/816/906 485/434/546 631/419/531 779/818/908
+f 771/820/910 478/439/551 486/436/548 772/819/909
+f 772/819/909 486/436/548 659/433/545 773/817/907
+f 774/821/911 652/526/630 451/739/830
+f 776/823/913 632/727/818 452/726/817 775/822/912
+f 775/822/912 452/726/817 652/526/630 774/821/911
+f 779/818/908 631/419/531 581/420/532 777/824/914
+f 777/824/914 581/420/532 653/403/517 778/825/915
+f 778/825/915 653/403/517 582/404/518 780/826/916
+f 780/826/916 582/404/518 633/405/519 781/827/917
+f 781/827/917 633/405/519 583/406/520 782/828/918
+f 782/828/918 583/406/520 634/408/522 783/829/919
+f 783/829/919 634/408/522 598/477/585 784/830/920
+f 784/830/920 598/477/585 635/478/586 785/831/921
+f 785/831/921 635/478/586 599/480/588 786/832/922
+f 786/832/922 599/480/588 632/727/818 776/823/913
+f 792/834/924 482/400/514 397/401/515 796/833/923
+f 796/833/923 397/401/515 543/402/516 797/835/925
+f 399/410/524 482/400/514 792/834/924 542/413/527
+f 793/837/927 483/456/568 400/417/529 791/836/926
+f 791/836/926 400/417/529 542/414/527 792/838/924
+f 794/839/928 401/795/885 483/456/568 793/837/927
+f 795/840/929 587/792/882 401/795/885 794/839/928
+f 797/835/925 543/402/516 402/421/533 798/841/930
+f 798/841/930 402/421/533 588/418/530 799/842/931
+f 799/842/931 588/418/530 800/843/932
+f 800/843/932 588/418/530 801/844/933
+f 803/846/935 678/432/544 403/437/549 802/845/934
+f 802/845/934 403/437/549 463/438/550 788/847/936
+f 801/844/933 588/418/530 589/435/547 804/848/937
+f 804/848/937 589/435/547 678/432/544 803/846/935
+f 790/850/939 487/788/878 406/790/880 789/849/938
+f 789/849/938 406/790/880 587/792/882 795/840/929
+f 806/852/941 657/785/875 461/786/876 805/851/940
+f 805/851/940 461/786/876 487/788/878 790/850/939
+f 807/856/945 819/855/944 820/854/943 808/853/942
+f 809/860/949 836/859/948 835/858/947 810/857/946
+f 811/864/953 841/863/952 842/862/951 812/861/950
+f 813/868/956 838/867/825 837/866/955 814/865/954
+f 815/872/960 829/871/959 830/870/958 816/869/957
+f 816/869/957 817/874/962 818/873/961 815/872/960
+f 817/874/962 824/876/964 823/875/963 818/873/961
+f 819/855/944 821/878/966 822/877/965 820/854/943
+f 821/878/966 827/880/968 828/879/967 822/877/965
+f 824/876/964 826/882/970 825/881/969 823/875/963
+f 826/882/970 828/879/967 827/880/968 825/881/969
+f 829/871/959 831/884/972 832/883/971 830/870/958
+f 831/884/972 833/886/974 834/885/973 832/883/971
+f 833/886/974 835/858/947 836/859/948 834/885/973
+f 838/867/825 839/888/976 840/887/975 837/866/955
+f 839/888/976 854/890/978 853/889/977 840/887/975
+f 841/863/952 843/892/980 844/891/979 842/862/951
+f 843/892/980 845/894/982 846/893/981 844/891/979
+f 845/894/982 847/896/984 848/895/983 846/893/981
+f 847/896/984 849/898/986 850/897/985 848/895/983
+f 849/898/986 851/900/988 852/899/987 850/897/985
+f 851/900/988 857/902/990 858/901/989 852/899/987
+f 854/890/978 855/904/992 856/903/991 853/889/977
+f 855/904/992 858/901/989 857/902/990 856/903/991
+f 453/729/820 846/906/981 848/905/983
+f 453/729/820 638/728/819 844/907/979 846/906/981
+f 454/731/822 858/909/989 855/908/992
+f 454/731/822 648/730/821 852/910/987 858/909/989
+f 638/728/819 842/911/951 844/907/979
+f 638/728/819 476/732/823 812/912/950 842/911/951
+f 822/914/965 828/913/967 639/743/834 651/733/824
+f 455/737/828 816/916/957 830/915/958
+f 455/737/828 654/736/827 817/917/962 816/916/957
+f 456/740/831 836/919/948 809/918/949 477/742/833
+f 456/740/831 640/738/829 834/920/973 836/919/948
+f 640/738/829 832/921/971 834/920/973
+f 640/738/829 455/737/828 830/915/958 832/921/971
+f 654/736/827 824/922/964 817/917/962
+f 654/736/827 639/743/834 826/923/970 824/922/964
+f 648/730/821 850/924/985 852/910/987
+f 648/730/821 453/729/820 848/905/983 850/924/985
+f 639/743/834 828/913/967 826/923/970
+f 655/735/826 454/731/822 855/908/992 854/925/978
+f 838/734/825 813/928/956 808/927/942 820/926/943
+f 655/735/826 854/925/978 839/929/976
+f 838/734/825 820/926/943 822/914/965 651/733/824
+f 655/735/826 839/929/976 838/734/825
+f 479/741/994 860/931/994 859/930/993 451/739/993
+f 451/739/993 859/930/993 861/932/995 774/821/995
+f 774/821/995 861/932/995 862/933/996 775/822/996
+f 775/822/996 862/933/996 863/934/997 776/823/997
+f 776/823/997 863/934/997 864/935/998 786/832/998
+f 786/832/998 864/935/998 865/936/999 785/831/999
+f 785/831/999 865/936/999 866/937/1000 784/830/1000
+f 784/830/1000 866/937/1000 867/938/1001 783/829/1001
+f 783/829/1001 867/938/1001 868/939/1002 782/828/1002
+f 782/828/1002 868/939/1002 869/940/1003 781/827/1003
+f 781/827/1003 869/940/1003 870/941/1004 780/826/1004
+f 780/826/1004 870/941/1004 871/942/1005 778/825/1005
+f 778/825/1005 871/942/1005 872/943/1006 777/824/1006
+f 777/824/1006 872/943/1006 873/944/1007 779/818/1007
+f 779/818/1007 873/944/1007 874/945/1008 787/816/1008
+f 787/816/1008 874/945/1008 875/946/1009 773/817/1009
+f 773/817/1009 875/946/1009 876/947/1010 772/819/1010
+f 772/819/1010 876/947/1010 877/948/1011 771/820/1011
+f 878/952/1015 937/951/1014 938/950/1013 939/949/1012
+f 878/952/1015 997/953/1016 937/951/1014
+f 937/951/1014 997/953/1016 1103/955/1018 1034/954/1017
+f 937/951/1014 1034/954/1017 1083/956/1019 938/950/1013
+f 879/958/1021 938/950/1013 1083/956/1019 1035/957/1020
+f 879/958/1021 1035/957/1020 1084/960/1023 1036/959/1022
+f 880/961/1024 939/949/1012 938/950/1013 879/958/1021
+f 880/961/1024 879/958/1021 1036/959/1022 1037/962/1025
+f 880/961/1024 1037/962/1025 1149/964/1027 996/963/1026
+f 881/968/1029 996/967/1026 1149/966/1027 1038/965/1028
+f 883/972/1033 1040/971/1032 1081/970/1031 1033/969/1030
+f 883/972/1033 1033/969/1030 1103/955/1018 997/953/1016
+f 885/976/1037 941/975/1036 1191/974/1035 1192/973/1034
+f 941/975/1036 886/978/1039 1193/977/1038 1191/974/1035
+f 886/978/1039 1049/980/1041 1194/979/1040 1193/977/1038
+f 885/976/1037 1192/973/1034 756/430/542 462/431/543
+f 1041/984/1045 1126/983/1044 1106/982/1043 942/981/1042
+f 1041/984/1045 942/981/1042 1081/970/1031 1040/971/1032
+f 884/986/1047 943/985/1046 1106/982/1043 1126/983/1044
+f 884/986/1047 463/438/550 478/439/551 943/985/1046
+f 946/988/1049 464/440/552 727/441/553 998/987/1048
+f 946/988/1049 998/987/1048 1166/990/1051 945/989/1050
+f 888/992/1053 945/989/1050 1166/990/1051 999/991/1052
+f 888/992/1053 999/991/1052 1169/994/1055 1061/993/1054
+f 1060/996/1057 1133/995/1056 945/989/1050 888/992/1053
+f 1060/996/1057 888/992/1053 1061/993/1054 1062/997/1058
+f 1059/998/1059 946/988/1049 945/989/1050 1133/995/1056
+f 1059/998/1059 465/454/566 464/440/552 946/988/1049
+f 1038/965/1028 1190/1000/1061 940/999/1060 881/968/1029
+f 889/1004/1065 947/1003/1064 1115/1002/1063 1000/1001/1062
+f 889/1004/1065 1000/1001/1062 1148/1006/1067 1006/1005/1066
+f 890/1008/1069 1038/965/1028 1149/966/1027 1001/1007/1068
+f 890/1008/1069 1001/1007/1068 1115/1002/1063 947/1003/1064
+f 891/1012/1073 948/1011/1072 950/1010/1071 951/1009/1070
+f 891/1012/1073 951/1009/1070 1116/1014/1075 1002/1013/1074
+f 891/1012/1073 1002/1013/1074 1148/1016/1067 1000/1015/1062
+f 891/1012/1073 1000/1015/1062 1115/1017/1063 948/1011/1072
+f 892/1019/1077 949/1018/1076 950/1010/1071 948/1011/1072
+f 892/1019/1077 948/1011/1072 1115/1017/1063 1001/1020/1068
+f 892/1019/1077 1001/1020/1068 1149/964/1027 1037/962/1025
+f 892/1019/1077 1037/962/1025 1036/959/1022 949/1018/1076
+f 949/1018/1076 1036/959/1022 1084/960/1023 1050/1021/1078
+f 949/1018/1076 1050/1021/1078 1085/1022/1079 950/1010/1071
+f 893/1023/1080 951/1009/1070 950/1010/1071
+f 893/1023/1080 950/1010/1071 1085/1022/1079 1051/1024/1081
+f 893/1023/1080 1051/1024/1081 1162/1026/1083 1003/1025/1082
+f 893/1023/1080 1003/1025/1082 1116/1014/1075 951/1009/1070
+f 894/1030/1087 952/1029/1086 1107/1028/1085 933/1027/1084
+f 894/1030/1087 933/1027/1084 1117/1032/1089 1004/1031/1088
+f 894/1030/1087 1004/1031/1088 1148/1016/1067 1002/1013/1074
+f 894/1030/1087 1002/1013/1074 1116/1014/1075 952/1029/1086
+f 895/1034/1091 953/1033/1090 1107/1028/1085 952/1029/1086
+f 895/1034/1091 952/1029/1086 1116/1014/1075 1003/1025/1082
+f 895/1034/1091 1003/1025/1082 1162/1026/1083 1052/1035/1092
+f 895/1034/1091 1052/1035/1092 1092/1036/1093 953/1033/1090
+f 1094/1040/1097 1165/1039/1096 1063/1038/1095 1042/1037/1094
+f 1094/1040/1097 1042/1037/1094 1127/1042/1099 954/1041/1098
+f 896/1044/1101 954/1041/1098 1127/1042/1099 1043/1043/1100
+f 896/1044/1101 1043/1043/1100 1150/1046/1103 1005/1045/1102
+f 897/1050/1107 955/1049/1106 1108/1048/1105 957/1047/1104
+f 897/1050/1107 1006/1005/1066 1148/1006/1067 1004/1051/1088
+f 897/1050/1107 1004/1051/1088 1117/1052/1089 955/1049/1106
+f 1093/1056/1109 1005/1055/1102 1150/1054/1103 1044/1053/1108
+f 1093/1056/1109 1044/1053/1108 1128/1058/1111 956/1057/1110
+f 898/1060/1113 1195/1059/1112 1194/979/1040 1049/980/1041
+f 898/1060/1113 957/1047/1104 1108/1048/1105 1195/1059/1112
+f 899/1064/1117 1164/1063/1116 1163/1062/1115 1046/1061/1114
+f 899/1064/1117 1046/1061/1114 1063/1038/1095 1165/1039/1096
+f 900/1068/1121 958/1067/1120 1091/1066/1119 932/1065/1118
+f 900/1068/1121 932/1065/1118 1092/1036/1093 1052/1035/1092
+f 900/1068/1121 1052/1035/1092 1162/1026/1083 1007/1069/1122
+f 900/1068/1121 1007/1069/1122 1102/1070/1123 958/1067/1120
+f 1008/1074/1127 1118/1073/1126 960/1072/1125 901/1071/1124
+f 1008/1074/1127 901/1071/1124 715/531/635 718/532/636
+f 1009/1076/1129 959/1075/1128 960/1072/1125 1118/1073/1126
+f 1009/1076/1129 1154/1078/1131 1140/1077/1130 959/1075/1128
+f 959/1075/1128 1140/1077/1130 1159/1080/1133 1057/1079/1132
+f 959/1075/1128 1057/1079/1132 1132/1081/1134 960/1072/1125
+f 901/1071/1124 960/1072/1125 1132/1081/1134 1058/1082/1135
+f 901/1071/1124 1058/1082/1135 720/541/645 715/531/635
+f 902/1084/1137 1109/1083/1136 1118/1073/1126 1008/1074/1127
+f 902/1084/1137 1008/1074/1127 718/532/636 716/544/648
+f 903/1086/1139 961/1085/1138 1109/1083/1136 902/1084/1137
+f 903/1086/1139 902/1084/1137 716/544/648 466/547/651
+f 903/1086/1139 466/547/651 473/548/652 1068/1087/1140
+f 903/1086/1139 1068/1087/1140 1137/1088/1141 961/1085/1138
+f 904/1090/1143 962/1089/1142 1109/1083/1136 961/1085/1138
+f 904/1090/1143 961/1085/1138 1137/1088/1141
+f 904/1090/1143 1137/1088/1141 1160/1092/1145 1071/1091/1144
+f 904/1090/1143 1071/1091/1144 1139/1093/1146 962/1089/1142
+f 962/1089/1142 1139/1093/1146 1154/1078/1131 1009/1076/1129
+f 962/1089/1142 1009/1076/1129 1118/1073/1126 1109/1083/1136
+f 1046/1061/1114 1163/1062/1115 1172/1095/1148 935/1094/1147
+f 1058/1082/1135 1132/1081/1134 1110/1097/1150 1086/1096/1149
+f 1058/1082/1135 1086/1096/1149 717/560/664 720/541/645
+f 1057/1079/1132 963/1098/1151 1110/1097/1150 1132/1081/1134
+f 1057/1079/1132 1159/1080/1133 1134/1099/1152 963/1098/1151
+f 905/1101/1154 1087/1100/1153 1110/1097/1150 963/1098/1151
+f 905/1101/1154 963/1098/1151 1134/1099/1152
+f 905/1101/1154 1134/1099/1152 1152/1103/1156 1010/1102/1155
+f 905/1101/1154 1010/1102/1155 1170/1104/1157 1087/1100/1153
+f 1045/1107/1160 1128/1058/1111 1111/1106/1159 1201/1105/1158
+f 1044/1053/1108 1150/1054/1103 1011/1109/1162 1100/1108/1161
+f 1043/1043/1100 1127/1042/1099 1096/1111/1164 934/1110/1163
+f 1042/1037/1094 1063/1038/1095 1171/1113/1166 1099/1112/1165
+f 965/1117/1170 1119/1116/1169 1168/1115/1168 1012/1114/1167
+f 965/1117/1170 1012/1114/1167 1167/1119/1172 964/1118/1171
+f 906/1121/1174 964/1118/1171 1167/1119/1172 1013/1120/1173
+f 906/1121/1174 1013/1120/1173 1152/1103/1156 1134/1099/1152
+f 1053/1123/1176 1130/1122/1175 964/1118/1171 906/1121/1174
+f 1053/1123/1176 906/1121/1174 1134/1099/1152 1159/1080/1133
+f 1054/1124/1177 965/1117/1170 964/1118/1171 1130/1122/1175
+f 1054/1124/1177 1151/1125/1178 1119/1116/1169 965/1117/1170
+f 907/1129/1182 1112/1128/1181 1120/1127/1180 1014/1126/1179
+f 907/1129/1182 1014/1126/1179 1168/1131/1168 1119/1130/1169
+f 1055/1133/1184 1131/1132/1183 1112/1128/1181 907/1129/1182
+f 1055/1133/1184 907/1129/1182 1119/1130/1169 1151/1134/1178
+f 1056/1136/1186 966/1135/1185 1112/1128/1181 1131/1132/1183
+f 1056/1136/1186 1062/997/1058 1061/993/1054 966/1135/1185
+f 966/1135/1185 1061/993/1054 1169/994/1055 1015/1137/1187
+f 966/1135/1185 1015/1137/1187 1120/1127/1180 1112/1128/1181
+f 968/1141/1191 1121/1140/1190 1018/1139/1189 1019/1138/1188
+f 968/1141/1191 1019/1138/1188 970/1143/1193 967/1142/1192
+f 908/1145/1195 967/1142/1192 970/1143/1193 1020/1144/1194
+f 908/1145/1195 1020/1144/1194 1078/1147/1197 1079/1146/1196
+f 1067/1149/1199 1136/1148/1198 967/1142/1192 908/1145/1195
+f 1067/1149/1199 908/1145/1195 1079/1146/1196 1080/1150/1200
+f 1066/1151/1201 968/1141/1191 967/1142/1192 1136/1148/1198
+f 1066/1151/1201 1153/1152/1202 1121/1140/1190 968/1141/1191
+f 909/1156/1206 1113/1155/1205 1122/1154/1204 1016/1153/1203
+f 909/1156/1206 1016/1153/1203 1018/1158/1189 1121/1157/1190
+f 1065/1160/1208 1135/1159/1207 1113/1155/1205 909/1156/1206
+f 1065/1160/1208 909/1156/1206 1121/1157/1190 1153/1161/1202
+f 1064/1163/1210 969/1162/1209 1113/1155/1205 1135/1159/1207
+f 1064/1163/1210 1160/1092/1145 1146/1164/1211 969/1162/1209
+f 969/1162/1209 1146/1164/1211 1157/1166/1213 1017/1165/1212
+f 969/1162/1209 1017/1165/1212 1122/1154/1204 1113/1155/1205
+f 1016/1153/1203 1122/1154/1204 1143/1168/1215 1074/1167/1214
+f 1016/1153/1203 1074/1167/1214 1156/1169/1216 1018/1158/1189
+f 1017/1165/1212 1073/1170/1217 1143/1168/1215 1122/1154/1204
+f 1017/1165/1212 1157/1166/1213 1147/1171/1218 1073/1170/1217
+f 1019/1138/1188 1075/1173/1220 1144/1172/1219 970/1143/1193
+f 1019/1138/1188 1018/1139/1189 1156/1174/1216 1075/1173/1220
+f 1020/1144/1194 970/1143/1193 1144/1172/1219 1076/1175/1221
+f 1020/1144/1194 1076/1175/1221 1161/1176/1222 1078/1147/1197
+f 1026/1180/1226 1124/1179/1225 972/1178/1224 910/1177/1223
+f 1026/1180/1226 910/1177/1223 1022/1182/1228 1021/1181/1227
+f 1027/1184/1230 971/1183/1229 972/1178/1224 1124/1179/1225
+f 1027/1184/1230 1155/1186/1232 1142/1185/1231 971/1183/1229
+f 971/1183/1229 1142/1185/1231 1062/997/1058 1056/1136/1186
+f 971/1183/1229 1056/1136/1186 1131/1132/1183 972/1178/1224
+f 910/1177/1223 972/1178/1224 1131/1132/1183 1055/1133/1184
+f 910/1177/1223 1055/1133/1184 1151/1134/1178 1022/1182/1228
+f 1023/1190/1236 973/1189/1235 974/1188/1234 975/1187/1233
+f 1023/1190/1236 1021/1192/1227 1022/1191/1228 973/1189/1235
+f 973/1189/1235 1022/1191/1228 1151/1125/1178 1054/1124/1177
+f 973/1189/1235 1054/1124/1177 1130/1122/1175 974/1188/1234
+f 911/1193/1237 974/1188/1234 1130/1122/1175 1053/1123/1176
+f 911/1193/1237 1053/1123/1176 1159/1080/1133 1140/1077/1130
+f 1024/1194/1238 975/1187/1233 974/1188/1234 911/1193/1237
+f 1024/1194/1238 911/1193/1237 1140/1077/1130 1154/1078/1131
+f 978/1196/1240 1123/1195/1239 1021/1192/1227 1023/1190/1236
+f 978/1196/1240 1023/1190/1236 975/1187/1233 976/1197/1241
+f 912/1198/1242 976/1197/1241 975/1187/1233 1024/1194/1238
+f 912/1198/1242 1024/1194/1238 1154/1078/1131 1139/1093/1146
+f 913/1200/1244 977/1199/1243 976/1197/1241 912/1198/1242
+f 913/1200/1244 912/1198/1242 1139/1093/1146 1071/1091/1144
+f 913/1200/1244 1071/1091/1144 1160/1092/1145 1064/1163/1210
+f 913/1200/1244 1064/1163/1210 1135/1159/1207 977/1199/1243
+f 914/1201/1245 978/1196/1240 976/1197/1241 977/1199/1243
+f 914/1201/1245 977/1199/1243 1135/1159/1207 1065/1160/1208
+f 914/1201/1245 1065/1160/1208 1153/1161/1202 1025/1202/1246
+f 914/1201/1245 1025/1202/1246 1123/1195/1239 978/1196/1240
+f 915/1204/1248 1114/1203/1247 1124/1179/1225 1026/1180/1226
+f 915/1204/1248 1026/1180/1226 1021/1181/1227 1123/1205/1239
+f 916/1207/1250 979/1206/1249 1114/1203/1247 915/1204/1248
+f 916/1207/1250 915/1204/1248 1123/1205/1239 1025/1208/1246
+f 916/1207/1250 1025/1208/1246 1153/1152/1202 1066/1151/1201
+f 916/1207/1250 1066/1151/1201 1136/1148/1198 979/1206/1249
+f 917/1210/1252 980/1209/1251 1114/1203/1247 979/1206/1249
+f 917/1210/1252 979/1206/1249 1136/1148/1198 1067/1149/1199
+f 917/1210/1252 1067/1149/1199 1080/1150/1200 1072/1211/1253
+f 917/1210/1252 1072/1211/1253 1141/1212/1254 980/1209/1251
+f 980/1209/1251 1141/1212/1254 1155/1186/1232 1027/1184/1230
+f 980/1209/1251 1027/1184/1230 1124/1179/1225 1114/1203/1247
+f 1028/1216/1258 981/1215/1257 982/1214/1256 983/1213/1255
+f 1028/1216/1258 467/673/766 468/674/767 981/1215/1257
+f 981/1215/1257 468/674/767 465/454/566 1059/998/1059
+f 981/1215/1257 1059/998/1059 1133/995/1056 982/1214/1256
+f 918/1217/1259 982/1214/1256 1133/995/1056 1060/996/1057
+f 918/1217/1259 1060/996/1057 1062/997/1058 1142/1185/1231
+f 1029/1218/1260 983/1213/1255 982/1214/1256 918/1217/1259
+f 1029/1218/1260 918/1217/1259 1142/1185/1231 1155/1186/1232
+f 986/1219/1261 469/677/770 467/673/766 1028/1216/1258
+f 986/1219/1261 1028/1216/1258 983/1213/1255 984/1220/1262
+f 919/1221/1263 984/1220/1262 983/1213/1255 1029/1218/1260
+f 919/1221/1263 1029/1218/1260 1155/1186/1232 1141/1212/1254
+f 920/1223/1265 985/1222/1264 984/1220/1262 919/1221/1263
+f 920/1223/1265 919/1221/1263 1141/1212/1254 1072/1211/1253
+f 920/1223/1265 1072/1211/1253 1080/1150/1200 1070/1224/1266
+f 920/1223/1265 1070/1224/1266 1138/1225/1267 985/1222/1264
+f 921/1226/1268 986/1219/1261 984/1220/1262 985/1222/1264
+f 921/1226/1268 985/1222/1264 1138/1225/1267 1069/1227/1269
+f 921/1226/1268 1069/1227/1269 721/687/780 470/688/781
+f 921/1226/1268 470/688/781 469/677/770 986/1219/1261
+f 441/692/785 530/689/782 988/1229/1271 922/1228/1270
+f 441/692/785 922/1228/1270 1030/1230/1272 576/694/787
+f 442/696/789 987/1231/1273 988/1229/1271 530/689/782
+f 442/696/789 627/697/790 1145/1232/1274 987/1231/1273
+f 987/1231/1273 1145/1232/1274 1161/1176/1222 1076/1175/1221
+f 987/1231/1273 1076/1175/1221 1144/1172/1219 988/1229/1271
+f 922/1228/1270 988/1229/1271 1144/1172/1219 1075/1173/1220
+f 922/1228/1270 1075/1173/1220 1156/1174/1216 1030/1230/1272
+f 444/702/795 989/1234/1276 990/1233/1275 535/701/794
+f 444/702/795 576/703/787 1030/1235/1272 989/1234/1276
+f 989/1234/1276 1030/1235/1272 1156/1169/1216 1074/1167/1214
+f 989/1234/1276 1074/1167/1214 1143/1168/1215 990/1233/1275
+f 923/1236/1277 990/1233/1275 1143/1168/1215 1073/1170/1217
+f 923/1236/1277 1073/1170/1217 1147/1171/1218 1077/1237/1278
+f 446/707/798 535/701/794 990/1233/1275 923/1236/1277
+f 446/707/798 923/1236/1277 1077/1237/1278 626/708/799
+f 447/712/803 992/1239/1280 1031/1238/1279 578/711/802
+f 924/1241/1282 991/1240/1281 992/1239/1280 447/712/803
+f 924/1241/1282 447/712/803 471/715/806
+f 924/1241/1282 471/715/806 721/687/780 1069/1227/1269
+f 924/1241/1282 1069/1227/1269 1138/1225/1267 991/1240/1281
+f 991/1240/1281 1138/1225/1267 1070/1224/1266
+f 991/1240/1281 1070/1224/1266 1080/1150/1200
+f 991/1240/1281 1080/1150/1200 1079/1146/1196 992/1239/1280
+f 992/1239/1280 1079/1146/1196 1078/1147/1197 1031/1238/1279
+f 578/711/802 1031/1238/1279 925/1242/1283 449/717/808
+f 1031/1238/1279 1078/1147/1197 1161/1176/1222 925/1242/1283
+f 925/1242/1283 1161/1176/1222 1145/1232/1274
+f 449/717/808 925/1242/1283 1145/1232/1274 627/697/790
+f 994/1244/1285 472/718/809 474/719/810 1032/1243/1284
+f 994/1244/1285 1032/1243/1284 1125/1246/1287 993/1245/1286
+f 993/1245/1286 1125/1246/1287 1157/1166/1213 1146/1164/1211
+f 1137/1088/1141 993/1245/1286 1146/1164/1211 1160/1092/1145
+f 1068/1087/1140 994/1244/1285 993/1245/1286 1137/1088/1141
+f 1068/1087/1140 473/548/652 472/718/809 994/1244/1285
+f 1032/1243/1284 475/724/815 995/1247/1288 1125/1246/1287
+f 1032/1243/1284 474/719/810 475/724/815
+f 475/724/815 626/708/799 1077/1237/1278 995/1247/1288
+f 995/1247/1288 1077/1237/1278 1147/1171/1218
+f 1125/1246/1287 995/1247/1288 1147/1171/1218 1157/1166/1213
+f 927/1248/1289 1102/1070/1123 1007/1069/1122
+f 927/1248/1289 1007/1069/1122 1162/1026/1083 1082/1249/1290
+f 1051/1024/1081 1082/1249/1290 1162/1026/1083
+f 1204/1251/1291 771/820/1011 877/948/1011 1297/1250/1291
+f 1205/1253/1292 1204/1251/1291 1297/1250/1291 1296/1252/1292
+f 926/1257/1293 1206/1256/1294 1282/1255/1294 1281/1254/1293
+f 479/741/994 926/1257/1293 1281/1254/1293 860/931/994
+f 1207/1261/1295 1208/1260/1296 1284/1259/1296 1283/1258/1295
+f 1206/1256/1294 1207/1261/1295 1283/1258/1295 1282/1255/1294
+f 1209/1265/1297 1211/1264/1298 1294/1263/1298 1293/1262/1297
+f 1210/1267/1299 1209/1265/1297 1293/1262/1297 1292/1266/1299
+f 1212/1269/1300 1210/1267/1299 1292/1266/1299 1291/1268/1300
+f 1213/1271/1301 1212/1269/1300 1291/1268/1300 1290/1270/1301
+f 1214/1273/1302 1213/1271/1301 1290/1270/1301 1289/1272/1302
+f 1215/1275/1303 1214/1273/1302 1289/1272/1302 1288/1274/1303
+f 1216/1277/1304 1215/1275/1303 1288/1274/1303 1287/1276/1304
+f 1217/1279/1305 1216/1277/1304 1287/1276/1304 1286/1278/1305
+f 928/1281/1307 1088/1280/1306 1110/1097/1150 1087/1100/1153
+f 928/1281/1307 1087/1100/1153 1170/1104/1157
+f 929/1283/1309 1098/1282/1308 1170/1104/1157 1172/1095/1148
+f 1088/1280/1306 1086/1096/1149 1110/1097/1150
+f 1088/1280/1306 476/732/823 717/560/664 1086/1096/1149
+f 1105/1286/1312 1101/1285/1311 1260/1284/1310
+f 1101/1285/1311 1172/1095/1148 1163/1062/1115 1089/1287/1313
+f 930/1289/1315 1104/1288/1314 1164/1063/1116 1091/1066/1119
+f 931/1291/1318 1090/1290/1317 1102/1070/1123 926/1257/1316
+f 931/1291/1318 926/1257/1316 479/741/832 477/742/833
+f 1090/1290/1317 958/1067/1120 1102/1070/1123
+f 1090/1290/1317 930/1289/1315 1091/1066/1119 958/1067/1120
+f 932/1065/1118 1091/1066/1119 1164/1063/1116 899/1064/1117
+f 932/1065/1118 899/1064/1117 1165/1039/1096 1092/1036/1093
+f 955/1049/1106 1117/1052/1089 1005/1055/1102 1093/1056/1109
+f 955/1049/1106 1093/1056/1109 956/1057/1110 1108/1048/1105
+f 933/1027/1084 1107/1028/1085 954/1041/1098 896/1044/1101
+f 933/1027/1084 896/1044/1101 1005/1045/1102 1117/1032/1089
+f 953/1033/1090 1092/1036/1093 1165/1039/1096 1094/1040/1097
+f 953/1033/1090 1094/1040/1097 954/1041/1098 1107/1028/1085
+f 1104/1288/1314 1089/1287/1313 1163/1062/1115 1164/1063/1116
+f 1099/1112/1165 1171/1113/1166 1152/1103/1156 1013/1120/1173
+f 1099/1112/1165 1013/1120/1173 1167/1119/1172 1096/1111/1164
+f 934/1110/1163 1096/1111/1164 1167/1119/1172 1012/1114/1167
+f 934/1110/1163 1012/1114/1167 1168/1115/1168 1011/1292/1162
+f 1201/1105/1158 1111/1106/1159 1120/1127/1180 1015/1137/1187
+f 1201/1105/1158 1015/1137/1187 1169/994/1055 1097/1293/1319
+f 1045/1107/1160 1201/1105/1158 1097/1293/1319 1158/1294/1320
+f 1100/1108/1161 1011/1109/1162 1168/1131/1168 1014/1126/1179
+f 1100/1108/1161 1014/1126/1179 1120/1127/1180 1111/1106/1159
+f 935/1094/1147 1172/1095/1148 1170/1104/1157 1010/1102/1155
+f 935/1094/1147 1010/1102/1155 1152/1103/1156 1171/1113/1166
+f 1048/1298/1324 1202/1297/1323 1095/1296/1322 1129/1295/1321
+f 1202/1297/1323 1097/1293/1319 1169/994/1055 999/991/1052
+f 1202/1297/1323 999/991/1052 1166/990/1051 1095/1296/1322
+f 1129/1295/1321 1095/1296/1322 1203/1300/1326 1047/1299/1325
+f 1203/1300/1326 1095/1296/1322 1166/990/1051 998/987/1048
+f 1203/1300/1326 998/987/1048 727/441/553 770/760/850
+f 1047/1299/1325 1203/1300/1326 770/760/850 719/761/851
+f 1098/1282/1308 928/1281/1307 1170/1104/1157
+f 1042/1037/1094 1099/1112/1165 1096/1111/1164 1127/1042/1099
+f 1043/1043/1100 934/1110/1163 1011/1292/1162 1150/1046/1103
+f 1044/1053/1108 1100/1108/1161 1111/1106/1159 1128/1058/1111
+f 1046/1061/1114 935/1094/1147 1171/1113/1166 1063/1038/1095
+f 1158/1294/1320 1097/1293/1319 1202/1297/1323 1048/1298/1324
+f 1105/1286/1312 929/1283/1309 1172/1095/1148
+f 1219/1302/1327 1205/1253/1292 1296/1252/1292 1295/1301/1327
+f 1211/1264/1298 1219/1302/1327 1295/1301/1327 1294/1263/1298
+f 658/765/855 733/762/852 1223/1304/1329 1222/1303/1328
+f 658/765/855 1222/1303/1328 1224/1305/1330
+f 658/765/855 1224/1305/1330 1225/1306/1331
+f 658/765/855 1225/1306/1331 1226/1307/1332
+f 658/765/855 1226/1307/1332 1220/1308/1333
+f 656/772/862 1228/1310/1335 1227/1309/1334
+f 656/772/862 1227/1309/1334 1223/1304/1329 733/762/852
+f 656/772/862 1230/1312/1337 1229/1311/1336
+f 656/772/862 1229/1311/1336 1228/1310/1335
+f 656/772/862 1232/1314/1339 1231/1313/1338
+f 656/772/862 1231/1313/1338 1230/1312/1337
+f 656/772/862 788/777/867 1233/1315/1340
+f 656/772/862 1233/1315/1340 1234/1316/1341
+f 656/772/862 1234/1316/1341 1235/1317/1342
+f 656/772/862 1235/1317/1342 1232/1314/1339
+f 658/765/855 1221/1319/1344 1236/1318/1343
+f 1187/1321/1346 734/784/874 657/785/875 936/1320/1345
+f 1188/1323/1348 1187/1321/1346 936/1320/1345 944/1322/1347
+f 1189/1325/1350 1188/1323/1348 944/1322/1347 887/1324/1349
+f 1173/1327/1352 1189/1325/1350 887/1324/1349 1039/1326/1351
+f 882/1329/1354 1174/1328/1353 1173/1327/1352 1039/1326/1351
+f 940/999/1060 1190/1000/1061 1174/1328/1353 882/1329/1354
+f 1180/1331/1356 1175/1330/1355 957/1047/1104 898/1060/1113
+f 1179/1332/1357 1180/1331/1356 898/1060/1113 1049/980/1041
+f 886/978/1039 1176/1333/1358 1179/1332/1357 1049/980/1041
+f 941/975/1036 1177/1334/1359 1176/1333/1358 886/978/1039
+f 885/976/1037 1178/1335/1360 1177/1334/1359 941/975/1036
+f 885/976/1037 462/431/543 741/802/892 1178/1335/1360
+f 1178/1335/1360 741/802/892 744/803/893 1181/1336/1361
+f 1177/1334/1359 1178/1335/1360 1181/1336/1361 1182/1337/1362
+f 1176/1333/1358 1177/1334/1359 1182/1337/1362 1183/1338/1363
+f 1179/1332/1357 1176/1333/1358 1183/1338/1363 1184/1339/1364
+f 1184/1339/1364 1185/1340/1365 1180/1331/1356 1179/1332/1357
+f 1185/1340/1365 1186/1341/1366 1175/1330/1355 1180/1331/1356
+f 1181/1336/1361 744/803/893 734/784/874 1187/1321/1346
+f 1182/1337/1362 1181/1336/1361 1187/1321/1346 1188/1323/1348
+f 1183/1338/1363 1182/1337/1362 1188/1323/1348 1189/1325/1350
+f 1184/1339/1364 1183/1338/1363 1189/1325/1350 1173/1327/1352
+f 1173/1327/1352 1174/1328/1353 1185/1340/1365 1184/1339/1364
+f 1174/1328/1353 1190/1000/1061 1186/1341/1366 1185/1340/1365
+f 890/1008/1069 1190/1000/1061 1038/965/1028
+f 890/1008/1069 947/1003/1064 1186/1341/1366 1190/1000/1061
+f 1186/1341/1366 947/1003/1064 889/1004/1065 1175/1330/1355
+f 1175/1330/1355 889/1004/1065 1006/1005/1066
+f 1175/1330/1355 1006/1005/1066 897/1050/1107 957/1047/1104
+f 1199/1343/1368 1200/1342/1367 1045/1107/1160 1158/1294/1320
+f 1198/1344/1369 1199/1343/1368 1158/1294/1320 1048/1298/1324
+f 1196/1345/1370 1198/1344/1369 1048/1298/1324 1129/1295/1321
+f 1197/1346/1371 1196/1345/1370 1129/1295/1321 1047/1299/1325
+f 761/815/905 1197/1346/1371 1047/1299/1325 719/761/851
+f 756/430/542 1192/973/1034 1197/1346/1371 761/815/905
+f 1192/973/1034 1191/974/1035 1196/1345/1370 1197/1346/1371
+f 1191/974/1035 1193/977/1038 1198/1344/1369 1196/1345/1370
+f 1193/977/1038 1194/979/1040 1199/1343/1368 1198/1344/1369
+f 1194/979/1040 1195/1059/1112 1200/1342/1367 1199/1343/1368
+f 1200/1342/1367 956/1057/1110 1128/1058/1111 1045/1107/1160
+f 1195/1059/1112 1108/1048/1105 956/1057/1110 1200/1342/1367
+f 771/820/910 1204/1251/1372 943/985/1046 478/439/551
+f 1204/1251/1372 1205/1253/1373 1106/982/1043 943/985/1046
+f 1205/1253/1373 1219/1302/1374 942/981/1042 1106/982/1043
+f 1206/1256/1375 926/1257/1316 1102/1070/1123
+f 1207/1261/1376 1206/1256/1375 1102/1070/1123 927/1248/1289
+f 1208/1260/1377 1207/1261/1376 927/1248/1289 1082/1249/1290
+f 1218/1347/1378 1208/1260/1377 1082/1249/1290 1051/1024/1081
+f 1211/1264/1380 1209/1265/1379 1033/969/1030 1081/970/1031
+f 1209/1265/1379 1210/1267/1381 1103/955/1018 1033/969/1030
+f 1210/1267/1381 1212/1269/1382 1034/954/1017 1103/955/1018
+f 1219/1302/1374 1211/1264/1380 1081/970/1031 942/981/1042
+f 1212/1269/1382 1213/1271/1383 1083/956/1019 1034/954/1017
+f 1213/1271/1383 1214/1273/1384 1035/957/1020 1083/956/1019
+f 1214/1273/1384 1215/1275/1385 1084/960/1023 1035/957/1020
+f 1215/1275/1385 1216/1277/1386 1050/1021/1078 1084/960/1023
+f 1216/1277/1386 1217/1279/1387 1085/1022/1079 1050/1021/1078
+f 1217/1279/1387 1218/1347/1378 1051/1024/1081 1085/1022/1079
+f 1208/1260/1296 1218/1347/1388 1285/1348/1388 1284/1259/1296
+f 1218/1347/1388 1217/1279/1305 1286/1278/1305 1285/1348/1388
+f 1233/1349/1389 788/847/936 463/438/550 884/986/1047
+f 1220/1351/1391 1226/1350/1390 1039/1326/1351 887/1324/1349
+f 1221/1352/1392 1220/1351/1391 887/1324/1349 944/1322/1347
+f 1236/1353/1393 1221/1352/1392 944/1322/1347 936/1320/1345
+f 1224/1355/1395 1222/1354/1394 881/968/1029 940/999/1060
+f 1222/1354/1394 1223/1356/1396 996/967/1026 881/968/1029
+f 1223/1358/1396 1227/1357/1397 878/952/1015 939/949/1012
+f 1225/1359/1398 1224/1355/1395 940/999/1060 882/1329/1354
+f 1226/1350/1390 1225/1359/1398 882/1329/1354 1039/1326/1351
+f 1227/1357/1397 1228/1360/1399 997/953/1016 878/952/1015
+f 1228/1360/1399 1229/1361/1400 883/972/1033 997/953/1016
+f 1229/1361/1400 1230/1362/1401 1040/971/1032 883/972/1033
+f 1230/1362/1401 1231/1363/1402 1040/971/1032
+f 1231/1363/1402 1232/1364/1403 1040/971/1032
+f 1232/1364/1403 1235/1365/1404 1041/984/1045 1040/971/1032
+f 1234/1366/1405 1233/1349/1389 884/986/1047 1126/983/1044
+f 1235/1365/1404 1234/1366/1405 1126/983/1044 1041/984/1045
+f 806/852/941 1236/1353/1393 936/1320/1345 657/785/875
+f 880/961/1024 996/963/1026 1223/1358/1396 939/949/1012
+f 658/765/855 1220/1308/1333 1221/1319/1344
+f 658/765/855 1236/1318/1343 806/783/873
+f 807/856/945 808/853/942 1242/1368/1407 1241/1367/1406
+f 809/860/949 810/857/946 1257/1370/1409 1258/1369/1408
+f 811/864/953 812/861/950 1264/1372/1411 1263/1371/1410
+f 813/868/956 814/865/954 1259/1374/1412 1260/1373/1310
+f 1237/1378/1416 1238/1377/1415 1252/1376/1414 1251/1375/1413
+f 1238/1377/1415 1237/1378/1416 1240/1380/1418 1239/1379/1417
+f 1239/1379/1417 1240/1380/1418 1245/1382/1420 1246/1381/1419
+f 1241/1367/1406 1242/1368/1407 1244/1384/1422 1243/1383/1421
+f 1243/1383/1421 1244/1384/1422 1250/1386/1424 1249/1385/1423
+f 1246/1381/1419 1245/1382/1420 1247/1388/1426 1248/1387/1425
+f 1248/1387/1425 1247/1388/1426 1249/1385/1423 1250/1386/1424
+f 1251/1375/1413 1252/1376/1414 1254/1390/1428 1253/1389/1427
+f 1253/1389/1427 1254/1390/1428 1256/1392/1430 1255/1391/1429
+f 1255/1391/1429 1256/1392/1430 1258/1369/1408 1257/1370/1409
+f 1260/1373/1310 1259/1374/1412 1262/1394/1432 1261/1393/1431
+f 1261/1393/1431 1262/1394/1432 1275/1396/1434 1276/1395/1433
+f 1263/1371/1410 1264/1372/1411 1266/1398/1436 1265/1397/1435
+f 1265/1397/1435 1266/1398/1436 1268/1400/1438 1267/1399/1437
+f 1267/1399/1437 1268/1400/1438 1270/1402/1440 1269/1401/1439
+f 1269/1401/1439 1270/1402/1440 1272/1404/1442 1271/1403/1441
+f 1271/1403/1441 1272/1404/1442 1274/1406/1444 1273/1405/1443
+f 1273/1405/1443 1274/1406/1444 1280/1408/1446 1279/1407/1445
+f 1276/1395/1433 1275/1396/1434 1278/1410/1448 1277/1409/1447
+f 1277/1409/1447 1278/1410/1448 1279/1407/1445 1280/1408/1446
+f 928/1281/1307 1270/1412/1440 1268/1411/1438
+f 928/1281/1307 1268/1411/1438 1266/1413/1436 1088/1280/1306
+f 929/1283/1309 1277/1415/1447 1280/1414/1446
+f 929/1283/1309 1280/1414/1446 1274/1416/1444 1098/1282/1308
+f 1088/1280/1306 1266/1413/1436 1264/1417/1411
+f 1088/1280/1306 1264/1417/1411 812/912/950 476/732/823
+f 1244/1419/1422 1101/1285/1311 1089/1287/1313 1250/1418/1424
+f 930/1289/1315 1252/1421/1414 1238/1420/1415
+f 930/1289/1315 1238/1420/1415 1239/1422/1417 1104/1288/1314
+f 931/1291/1318 477/742/833 809/918/949 1258/1423/1408
+f 931/1291/1318 1258/1423/1408 1256/1424/1430 1090/1290/1317
+f 1090/1290/1317 1256/1424/1430 1254/1425/1428
+f 1090/1290/1317 1254/1425/1428 1252/1421/1414 930/1289/1315
+f 1260/1284/1310 1242/1426/1407 808/927/942 813/928/956
+f 1104/1288/1314 1239/1422/1417 1246/1427/1419
+f 1104/1288/1314 1246/1427/1419 1248/1428/1425 1089/1287/1313
+f 1098/1282/1308 1274/1416/1444 1272/1429/1442
+f 1098/1282/1308 1272/1429/1442 1270/1412/1440 928/1281/1307
+f 1089/1287/1313 1248/1428/1425 1250/1418/1424
+f 1105/1286/1312 1276/1430/1433 1277/1415/1447 929/1283/1309
+f 1105/1286/1312 1261/1431/1431 1276/1430/1433
+f 1260/1284/1310 1101/1285/1311 1244/1419/1422 1242/1426/1407
+f 1105/1286/1312 1260/1284/1310 1261/1431/1431
+f 841/863/952 811/864/953 1299/1433/1450 1298/1432/1449
+f 814/865/954 837/866/955 1301/1435/1452 1300/1434/1451
+f 837/866/955 840/887/975 1302/1436/1453 1301/1435/1452
+f 840/887/975 853/889/977 1303/1437/1454 1302/1436/1453
+f 843/892/980 841/863/952 1298/1432/1449 1304/1438/1455
+f 845/894/982 843/892/980 1304/1438/1455 1305/1439/1456
+f 847/896/984 845/894/982 1305/1439/1456 1306/1440/1457
+f 849/898/986 847/896/984 1306/1440/1457 1307/1441/1458
+f 851/900/988 849/898/986 1307/1441/1458 1308/1442/1459
+f 857/902/990 851/900/988 1308/1442/1459 1309/1443/1460
+f 853/889/977 856/903/991 1310/1444/1461 1303/1437/1454
+f 856/903/991 857/902/990 1309/1443/1460 1310/1444/1461
+f 811/864/953 1263/1371/1410 1311/1445/1462 1299/1433/1450
+f 1259/1374/1412 814/865/954 1300/1434/1451 1312/1446/1463
+f 1262/1394/1432 1259/1374/1412 1312/1446/1463 1313/1447/1464
+f 1275/1396/1434 1262/1394/1432 1313/1447/1464 1314/1448/1465
+f 1263/1371/1410 1265/1397/1435 1315/1449/1466 1311/1445/1462
+f 1265/1397/1435 1267/1399/1437 1316/1450/1467 1315/1449/1466
+f 1267/1399/1437 1269/1401/1439 1317/1451/1468 1316/1450/1467
+f 1269/1401/1439 1271/1403/1441 1318/1452/1469 1317/1451/1468
+f 1271/1403/1441 1273/1405/1443 1319/1453/1470 1318/1452/1469
+f 1273/1405/1443 1279/1407/1445 1320/1454/1471 1319/1453/1470
+f 1278/1410/1448 1275/1396/1434 1314/1448/1465 1321/1455/1472
+f 1279/1407/1445 1278/1410/1448 1321/1455/1472 1320/1454/1471
+f 1307/1441/1458 1322/1456/1473 1308/1442/1459
+f 1319/1453/1470 1320/1454/1471 1322/1456/1473
+f 1322/1456/1473 1320/1454/1471 1321/1455/1472
+f 1322/1456/1473 1321/1455/1472 1314/1448/1465
+f 1322/1456/1473 1314/1448/1465 1313/1447/1464
+f 1322/1456/1473 1313/1447/1464 1312/1446/1463
+f 1322/1456/1473 1312/1446/1463 1300/1434/1451
+f 1322/1456/1473 1300/1434/1451 1301/1435/1452
+f 1322/1456/1473 1301/1435/1452 1302/1436/1453
+f 1322/1456/1473 1302/1436/1453 1303/1437/1454
+f 1322/1456/1473 1303/1437/1454 1310/1444/1461
+f 1322/1456/1473 1310/1444/1461 1309/1443/1460
+f 1322/1456/1473 1309/1443/1460 1308/1442/1459
+f 1306/1440/1457 1322/1456/1473 1307/1441/1458
+f 1305/1439/1456 1322/1456/1473 1306/1440/1457
+f 1304/1438/1455 1322/1456/1473 1305/1439/1456
+f 1298/1432/1449 1322/1456/1473 1304/1438/1455
+f 1299/1433/1450 1322/1456/1473 1298/1432/1449
+f 1311/1445/1462 1322/1456/1473 1299/1433/1450
+f 1315/1449/1466 1322/1456/1473 1311/1445/1462
+f 1316/1450/1467 1322/1456/1473 1315/1449/1466
+f 1317/1451/1468 1322/1456/1473 1316/1450/1467
+f 1318/1452/1469 1322/1456/1473 1317/1451/1468
+f 1319/1453/1470 1322/1456/1473 1318/1452/1469
+f 1323/1459/1476 1336/1458/1475 1335/1457/1474
+f 1323/1459/1476 1253/1389/1427 1255/1391/1429 1336/1458/1475
+f 1323/1459/1476 1337/1460/1477 1251/1375/1413 1253/1389/1427
+f 1323/1459/1476 1335/1457/1478 1337/1460/1477
+f 1324/1462/1481 1339/1461/1480 1335/1457/1479
+f 1324/1462/1481 1257/1370/1409 810/857/946 1339/1461/1480
+f 1324/1462/1481 1336/1458/1475 1255/1391/1429 1257/1370/1409
+f 1324/1462/1481 1335/1457/1474 1336/1458/1475
+f 1325/1464/1484 1340/1463/1483 1335/1457/1482
+f 1325/1464/1484 1245/1382/1420 1240/1380/1418 1340/1463/1483
+f 1325/1464/1484 1338/1465/1485 1247/1388/1426 1245/1382/1420
+f 1325/1464/1484 1335/1457/1486 1338/1465/1485
+f 1326/1467/1489 1341/1466/1488 1335/1457/1487
+f 1326/1467/1489 1241/1367/1406 1243/1383/1421 1341/1466/1488
+f 1326/1467/1489 1342/1468/1490 807/856/945 1241/1367/1406
+f 1326/1467/1489 1335/1457/1491 1342/1468/1490
+f 1327/1469/1492 1337/1460/1477 1335/1457/1478
+f 1327/1469/1492 1237/1378/1416 1251/1375/1413 1337/1460/1477
+f 1327/1469/1492 1340/1463/1483 1240/1380/1418 1237/1378/1416
+f 1327/1469/1492 1335/1457/1482 1340/1463/1483
+f 1328/1470/1493 1338/1465/1485 1335/1457/1486
+f 1328/1470/1493 1249/1385/1423 1247/1388/1426 1338/1465/1485
+f 1328/1470/1493 1341/1466/1488 1243/1383/1421 1249/1385/1423
+f 1328/1470/1493 1335/1457/1487 1341/1466/1488
+f 1329/1472/1496 1335/1457/1495 1343/1471/1494
+f 1329/1472/1496 1344/1473/1498 1335/1457/1497
+f 1329/1472/1496 831/884/972 829/871/959 1344/1473/1498
+f 1329/1472/1496 1343/1471/1494 833/886/974 831/884/972
+f 1330/1474/1499 1335/1457/1479 1339/1461/1480
+f 1330/1474/1499 1343/1471/1494 1335/1457/1495
+f 1330/1474/1499 835/858/947 833/886/974 1343/1471/1494
+f 1330/1474/1499 1339/1461/1480 810/857/946 835/858/947
+f 1331/1476/1502 1335/1457/1501 1346/1475/1500
+f 1331/1476/1502 1345/1477/1504 1335/1457/1503
+f 1331/1476/1502 823/875/963 825/881/969 1345/1477/1504
+f 1331/1476/1502 1346/1475/1500 818/873/961 823/875/963
+f 1332/1479/1507 1335/1457/1506 1347/1478/1505
+f 1332/1479/1507 1342/1468/1490 1335/1457/1491
+f 1332/1479/1507 819/855/944 807/856/945 1342/1468/1490
+f 1332/1479/1507 1347/1478/1505 821/878/966 819/855/944
+f 1333/1480/1508 1335/1457/1497 1344/1473/1498
+f 1333/1480/1508 1346/1475/1500 1335/1457/1501
+f 1333/1480/1508 815/872/960 818/873/961 1346/1475/1500
+f 1333/1480/1508 1344/1473/1498 829/871/959 815/872/960
+f 1334/1481/1509 1335/1457/1503 1345/1477/1504
+f 1334/1481/1509 1347/1478/1505 1335/1457/1506
+f 1334/1481/1509 827/880/968 821/878/966 1347/1478/1505
+f 1334/1481/1509 1345/1477/1504 825/881/969 827/880/968
+f 651/733/824 639/743/834 722/518/622 732/556/660
+f 1101/1285/1311 1105/1286/1312 1172/1095/1148
+f 1368/1485/1510 1356/1484/1511 1357/1483/1511 1363/1482/1510
+f 1356/1484/1511 1372/1487/1512 1365/1486/1512 1357/1483/1511
+f 1348/1491/1513 1362/1490/1514 1369/1489/1514 1349/1488/1513
+f 1348/1491/1513 1349/1488/1513 1370/1493/1515 1364/1492/1515
+f 1350/1495/1516 1364/1492/1515 1370/1493/1515 1351/1494/1516
+f 1350/1495/1516 1351/1494/1516 1368/1485/1510 1363/1482/1510
+f 1352/1499/1517 1371/1498/1518 1366/1497/1518 1353/1496/1517
+f 1352/1499/1517 1353/1496/1517 1367/1501/1519 1373/1500/1519
+f 1354/1503/1520 1373/1500/1519 1367/1501/1519 1355/1502/1520
+f 1354/1503/1520 1355/1502/1520 1365/1486/1512 1372/1487/1512
+f 1359/1505/1521 1366/1497/1518 1371/1498/1518 1358/1504/1521
+f 1361/1507/1522 1369/1489/1514 1362/1490/1514 1360/1506/1522
+f 1390/1485/1524 1385/1482/1524 1383/1483/1523 1382/1484/1523
+f 1382/1484/1523 1383/1483/1523 1387/1486/1525 1394/1487/1525
+f 1374/1491/1527 1375/1488/1527 1391/1489/1526 1384/1490/1526
+f 1374/1491/1527 1386/1492/1528 1392/1493/1528 1375/1488/1527
+f 1376/1495/1529 1377/1494/1529 1392/1493/1528 1386/1492/1528
+f 1376/1495/1529 1385/1482/1524 1390/1485/1524 1377/1494/1529
+f 1378/1499/1531 1379/1496/1531 1388/1497/1530 1393/1498/1530
+f 1378/1499/1531 1395/1500/1532 1389/1501/1532 1379/1496/1531
+f 1380/1503/1533 1381/1502/1533 1389/1501/1532 1395/1500/1532
+f 1380/1503/1533 1394/1487/1525 1387/1486/1525 1381/1502/1533
+f 1359/1505/1521 1358/1504/1521 1393/1498/1530 1388/1497/1530
+f 1361/1507/1522 1360/1506/1522 1384/1490/1526 1391/1489/1526
+f 1396/1511/1537 1492/1510/1536 1725/1509/1535 1494/1508/1534
+f 1396/1511/1537 1497/1513/1539 1726/1512/1538 1492/1510/1536
+f 1396/1511/1537 1496/1515/1541 1685/1514/1540 1497/1513/1539
+f 1396/1511/1537 1494/1508/1534 1684/1516/1542 1496/1515/1541
+f 1397/1518/1544 1496/1515/1541 1684/1516/1542 1495/1517/1543
+f 1397/1518/1544 1499/1519/1545 1685/1514/1540 1496/1515/1541
+f 1397/1518/1544 1577/1521/1547 1707/1520/1546 1499/1519/1545
+f 1397/1518/1544 1495/1517/1543 1708/1522/1548 1577/1521/1547
+f 1398/1524/1550 1493/1523/1549 1726/1512/1538 1497/1513/1539
+f 1398/1524/1550 1574/1526/1552 1760/1525/1551 1493/1523/1549
+f 1398/1524/1550 1498/1528/1554 1706/1527/1553 1574/1526/1552
+f 1398/1524/1550 1497/1513/1539 1685/1514/1540 1498/1528/1554
+f 1399/1529/1555 1498/1528/1554 1685/1514/1540 1499/1519/1545
+f 1399/1529/1555 1575/1530/1556 1706/1527/1553 1498/1528/1554
+f 1399/1529/1555 1576/1532/1558 1724/1531/1557 1575/1530/1556
+f 1399/1529/1555 1499/1519/1545 1707/1520/1546 1576/1532/1558
+f 1400/1536/1560 1494/1535/1534 1725/1534/1535 1500/1533/1559
+f 1400/1536/1560 1503/1538/1561 1684/1537/1542 1494/1535/1534
+f 1400/1536/1560 1502/1540/1563 1686/1539/1562 1503/1538/1561
+f 1400/1536/1560 1500/1533/1559 1728/1541/1564 1502/1540/1563
+f 1401/1543/1566 1502/1540/1563 1728/1541/1564 1501/1542/1565
+f 1401/1543/1566 1505/1544/1567 1686/1539/1562 1502/1540/1563
+f 1401/1543/1566 1573/1546/1569 1705/1545/1568 1505/1544/1567
+f 1401/1543/1566 1501/1542/1565 1759/1547/1570 1573/1546/1569
+f 1402/1549/1571 1495/1548/1543 1684/1537/1542 1503/1538/1561
+f 1402/1549/1571 1578/1551/1572 1708/1550/1548 1495/1548/1543
+f 1402/1549/1571 1504/1553/1574 1709/1552/1573 1578/1551/1572
+f 1402/1549/1571 1503/1538/1561 1686/1539/1562 1504/1553/1574
+f 1403/1554/1575 1504/1553/1574 1686/1539/1562 1505/1544/1567
+f 1403/1554/1575 1579/1555/1576 1709/1552/1573 1504/1553/1574
+f 1403/1554/1575 1572/1557/1578 1723/1556/1577 1579/1555/1576
+f 1403/1554/1575 1505/1544/1567 1705/1545/1568 1572/1557/1578
+f 1404/1561/1582 1524/1560/1581 1687/1559/1580 1506/1558/1579
+f 1404/1561/1582 1509/1563/1584 1691/1562/1583 1524/1560/1581
+f 1404/1561/1582 1508/1565/1586 1692/1564/1585 1509/1563/1584
+f 1404/1561/1582 1506/1558/1579 1688/1566/1587 1508/1565/1586
+f 1405/1568/1589 1508/1565/1586 1688/1566/1587 1507/1567/1588
+f 1405/1568/1589 1511/1569/1590 1692/1564/1585 1508/1565/1586
+f 1405/1568/1589 1578/1551/1572 1709/1552/1573 1511/1569/1590
+f 1405/1568/1589 1507/1567/1588 1708/1550/1548 1578/1551/1572
+f 1406/1571/1592 1525/1570/1591 1691/1562/1583 1509/1563/1584
+f 1406/1571/1592 1582/1573/1594 1711/1572/1593 1525/1570/1591
+f 1406/1571/1592 1510/1575/1596 1712/1574/1595 1582/1573/1594
+f 1406/1571/1592 1509/1563/1584 1692/1564/1585 1510/1575/1596
+f 1407/1576/1597 1510/1575/1596 1692/1564/1585 1511/1569/1590
+f 1407/1576/1597 1583/1577/1598 1712/1574/1595 1510/1575/1596
+f 1407/1576/1597 1579/1555/1576 1723/1556/1577 1583/1577/1598
+f 1407/1576/1597 1511/1569/1590 1709/1552/1573 1579/1555/1576
+f 1408/1581/1600 1506/1580/1579 1687/1579/1580 1512/1578/1599
+f 1408/1581/1600 1515/1583/1601 1688/1582/1587 1506/1580/1579
+f 1408/1581/1600 1514/1585/1603 1693/1584/1602 1515/1583/1601
+f 1408/1581/1600 1512/1578/1599 1689/1586/1604 1514/1585/1603
+f 1409/1588/1606 1514/1585/1603 1689/1586/1604 1513/1587/1605
+f 1409/1588/1606 1517/1589/1607 1693/1584/1602 1514/1585/1603
+f 1409/1588/1606 1585/1591/1609 1713/1590/1608 1517/1589/1607
+f 1409/1588/1606 1513/1587/1605 1714/1592/1610 1585/1591/1609
+f 1410/1594/1611 1507/1593/1588 1688/1582/1587 1515/1583/1601
+f 1410/1594/1611 1577/1521/1547 1708/1522/1548 1507/1593/1588
+f 1410/1594/1611 1516/1595/1612 1707/1520/1546 1577/1521/1547
+f 1410/1594/1611 1515/1583/1601 1693/1584/1602 1516/1595/1612
+f 1411/1596/1613 1516/1595/1612 1693/1584/1602 1517/1589/1607
+f 1411/1596/1613 1576/1532/1558 1707/1520/1546 1516/1595/1612
+f 1411/1596/1613 1584/1597/1614 1724/1531/1557 1576/1532/1558
+f 1411/1596/1613 1517/1589/1607 1713/1590/1608 1584/1597/1614
+f 1412/1599/1616 1512/1578/1599 1687/1579/1580 1518/1598/1615
+f 1412/1599/1616 1521/1600/1617 1689/1586/1604 1512/1578/1599
+f 1412/1599/1616 1520/1602/1619 1694/1601/1618 1521/1600/1617
+f 1412/1599/1616 1518/1598/1615 1690/1603/1620 1520/1602/1619
+f 1413/1605/1622 1520/1602/1619 1690/1603/1620 1519/1604/1621
+f 1413/1605/1622 1523/1606/1623 1694/1601/1618 1520/1602/1619
+f 1413/1605/1622 1589/1608/1625 1716/1607/1624 1523/1606/1623
+f 1413/1605/1622 1519/1604/1621 1717/1609/1626 1589/1608/1625
+f 1414/1610/1627 1513/1587/1605 1689/1586/1604 1521/1600/1617
+f 1414/1610/1627 1586/1611/1628 1714/1592/1610 1513/1587/1605
+f 1414/1610/1627 1522/1613/1630 1715/1612/1629 1586/1611/1628
+f 1414/1610/1627 1521/1600/1617 1694/1601/1618 1522/1613/1630
+f 1415/1614/1631 1522/1613/1630 1694/1601/1618 1523/1606/1623
+f 1415/1614/1631 1587/1615/1632 1715/1612/1629 1522/1613/1630
+f 1415/1614/1631 1588/1617/1634 1722/1616/1633 1587/1615/1632
+f 1415/1614/1631 1523/1606/1623 1716/1607/1624 1588/1617/1634
+f 1416/1619/1635 1518/1618/1615 1687/1559/1580 1524/1560/1581
+f 1416/1619/1635 1527/1621/1636 1690/1620/1620 1518/1618/1615
+f 1416/1619/1635 1526/1623/1638 1695/1622/1637 1527/1621/1636
+f 1416/1619/1635 1524/1560/1581 1691/1562/1583 1526/1623/1638
+f 1417/1624/1639 1526/1623/1638 1691/1562/1583 1525/1570/1591
+f 1417/1624/1639 1529/1625/1640 1695/1622/1637 1526/1623/1638
+f 1417/1624/1639 1581/1627/1642 1710/1626/1641 1529/1625/1640
+f 1417/1624/1639 1525/1570/1591 1711/1572/1593 1581/1627/1642
+f 1418/1629/1643 1519/1628/1621 1690/1620/1620 1527/1621/1636
+f 1418/1629/1643 1590/1631/1644 1717/1630/1626 1519/1628/1621
+f 1418/1629/1643 1528/1633/1646 1718/1632/1645 1590/1631/1644
+f 1418/1629/1643 1527/1621/1636 1695/1622/1637 1528/1633/1646
+f 1419/1634/1647 1528/1633/1646 1695/1622/1637 1529/1625/1640
+f 1419/1634/1647 1591/1635/1648 1718/1632/1645 1528/1633/1646
+f 1419/1634/1647 1580/1637/1650 1721/1636/1649 1591/1635/1648
+f 1419/1634/1647 1529/1625/1640 1710/1626/1641 1580/1637/1650
+f 1420/1641/1654 1542/1640/1653 1740/1639/1652 1530/1638/1651
+f 1420/1641/1654 1533/1643/1656 1743/1642/1655 1542/1640/1653
+f 1420/1641/1654 1532/1645/1658 1697/1644/1657 1533/1643/1656
+f 1420/1641/1654 1530/1638/1651 1696/1646/1659 1532/1645/1658
+f 1421/1648/1661 1532/1645/1658 1696/1646/1659 1531/1647/1660
+f 1421/1648/1661 1535/1649/1662 1697/1644/1657 1532/1645/1658
+f 1421/1648/1661 1590/1631/1644 1718/1632/1645 1535/1649/1662
+f 1421/1648/1661 1531/1647/1660 1717/1630/1626 1590/1631/1644
+f 1422/1651/1664 1543/1650/1663 1743/1642/1655 1533/1643/1656
+f 1422/1651/1664 1592/1653/1666 1774/1652/1665 1543/1650/1663
+f 1422/1651/1664 1534/1655/1668 1719/1654/1667 1592/1653/1666
+f 1422/1651/1664 1533/1643/1656 1697/1644/1657 1534/1655/1668
+f 1423/1656/1669 1534/1655/1668 1697/1644/1657 1535/1649/1662
+f 1423/1656/1669 1593/1657/1670 1719/1654/1667 1534/1655/1668
+f 1423/1656/1669 1591/1635/1648 1721/1636/1649 1593/1657/1670
+f 1423/1656/1669 1535/1649/1662 1718/1632/1645 1591/1635/1648
+f 1424/1661/1672 1530/1660/1651 1740/1659/1652 1536/1658/1671
+f 1424/1661/1672 1539/1663/1673 1696/1662/1659 1530/1660/1651
+f 1424/1661/1672 1538/1665/1675 1698/1664/1674 1539/1663/1673
+f 1424/1661/1672 1536/1658/1671 1742/1666/1676 1538/1665/1675
+f 1425/1668/1678 1538/1665/1675 1742/1666/1676 1537/1667/1677
+f 1425/1668/1678 1541/1669/1679 1698/1664/1674 1538/1665/1675
+f 1425/1668/1678 1595/1671/1681 1720/1670/1680 1541/1669/1679
+f 1425/1668/1678 1537/1667/1677 1777/1672/1682 1595/1671/1681
+f 1426/1674/1683 1531/1673/1660 1696/1662/1659 1539/1663/1673
+f 1426/1674/1683 1589/1608/1625 1717/1609/1626 1531/1673/1660
+f 1426/1674/1683 1540/1675/1684 1716/1607/1624 1589/1608/1625
+f 1426/1674/1683 1539/1663/1673 1698/1664/1674 1540/1675/1684
+f 1427/1676/1685 1540/1675/1684 1698/1664/1674 1541/1669/1679
+f 1427/1676/1685 1588/1617/1634 1716/1607/1624 1540/1675/1684
+f 1427/1676/1685 1594/1677/1686 1722/1616/1633 1588/1617/1634
+f 1427/1676/1685 1541/1669/1679 1720/1670/1680 1594/1677/1686
+f 1428/1681/1690 1544/1680/1689 1746/1679/1688 1546/1678/1687
+f 1428/1681/1690 1549/1683/1692 1747/1682/1691 1544/1680/1689
+f 1428/1681/1690 1548/1685/1694 1700/1684/1693 1549/1683/1692
+f 1428/1681/1690 1546/1678/1687 1699/1686/1695 1548/1685/1694
+f 1429/1688/1697 1548/1685/1694 1699/1686/1695 1547/1687/1696
+f 1429/1688/1697 1551/1689/1698 1700/1684/1693 1548/1685/1694
+f 1429/1688/1697 1582/1573/1594 1712/1574/1595 1551/1689/1698
+f 1429/1688/1697 1547/1687/1696 1711/1572/1593 1582/1573/1594
+f 1430/1691/1700 1545/1690/1699 1747/1682/1691 1549/1683/1692
+f 1430/1691/1700 1573/1546/1569 1759/1547/1570 1545/1690/1699
+f 1430/1691/1700 1550/1692/1701 1705/1545/1568 1573/1546/1569
+f 1430/1691/1700 1549/1683/1692 1700/1684/1693 1550/1692/1701
+f 1431/1693/1702 1550/1692/1701 1700/1684/1693 1551/1689/1698
+f 1431/1693/1702 1572/1557/1578 1705/1545/1568 1550/1692/1701
+f 1431/1693/1702 1583/1577/1598 1723/1556/1577 1572/1557/1578
+f 1431/1693/1702 1551/1689/1698 1712/1574/1595 1583/1577/1598
+f 1432/1695/1704 1546/1678/1687 1746/1679/1688 1552/1694/1703
+f 1432/1695/1704 1555/1696/1705 1699/1686/1695 1546/1678/1687
+f 1432/1695/1704 1554/1698/1707 1701/1697/1706 1555/1696/1705
+f 1432/1695/1704 1552/1694/1703 1749/1699/1708 1554/1698/1707
+f 1433/1701/1710 1554/1698/1707 1749/1699/1708 1553/1700/1709
+f 1433/1701/1710 1557/1702/1711 1701/1697/1706 1554/1698/1707
+f 1433/1701/1710 1592/1653/1666 1719/1654/1667 1557/1702/1711
+f 1433/1701/1710 1553/1700/1709 1774/1652/1665 1592/1653/1666
+f 1434/1703/1712 1547/1687/1696 1699/1686/1695 1555/1696/1705
+f 1434/1703/1712 1581/1627/1642 1711/1572/1593 1547/1687/1696
+f 1434/1703/1712 1556/1704/1713 1710/1626/1641 1581/1627/1642
+f 1434/1703/1712 1555/1696/1705 1701/1697/1706 1556/1704/1713
+f 1435/1705/1714 1556/1704/1713 1701/1697/1706 1557/1702/1711
+f 1435/1705/1714 1580/1637/1650 1710/1626/1641 1556/1704/1713
+f 1435/1705/1714 1593/1657/1670 1721/1636/1649 1580/1637/1650
+f 1435/1705/1714 1557/1702/1711 1719/1654/1667 1593/1657/1670
+f 1436/1709/1718 1566/1708/1717 1752/1707/1716 1558/1706/1715
+f 1436/1709/1718 1561/1711/1720 1702/1710/1719 1566/1708/1717
+f 1436/1709/1718 1560/1713/1722 1703/1712/1721 1561/1711/1720
+f 1436/1709/1718 1558/1706/1715 1753/1714/1723 1560/1713/1722
+f 1437/1716/1725 1560/1713/1722 1753/1714/1723 1559/1715/1724
+f 1437/1716/1725 1563/1717/1726 1703/1712/1721 1560/1713/1722
+f 1437/1716/1725 1574/1526/1552 1706/1527/1553 1563/1717/1726
+f 1437/1716/1725 1559/1715/1724 1760/1525/1551 1574/1526/1552
+f 1438/1719/1728 1567/1718/1727 1702/1710/1719 1561/1711/1720
+f 1438/1719/1728 1585/1591/1609 1714/1592/1610 1567/1718/1727
+f 1438/1719/1728 1562/1720/1729 1713/1590/1608 1585/1591/1609
+f 1438/1719/1728 1561/1711/1720 1703/1712/1721 1562/1720/1729
+f 1439/1721/1730 1562/1720/1729 1703/1712/1721 1563/1717/1726
+f 1439/1721/1730 1584/1597/1614 1713/1590/1608 1562/1720/1729
+f 1439/1721/1730 1575/1530/1556 1724/1531/1557 1584/1597/1614
+f 1439/1721/1730 1563/1717/1726 1706/1527/1553 1575/1530/1556
+f 1440/1723/1732 1564/1722/1731 1752/1707/1716 1566/1708/1717
+f 1440/1723/1732 1569/1725/1734 1754/1724/1733 1564/1722/1731
+f 1440/1723/1732 1568/1727/1736 1704/1726/1735 1569/1725/1734
+f 1440/1723/1732 1566/1708/1717 1702/1710/1719 1568/1727/1736
+f 1441/1728/1737 1568/1727/1736 1702/1710/1719 1567/1718/1727
+f 1441/1728/1737 1571/1729/1738 1704/1726/1735 1568/1727/1736
+f 1441/1728/1737 1586/1611/1628 1715/1612/1629 1571/1729/1738
+f 1441/1728/1737 1567/1718/1727 1714/1592/1610 1586/1611/1628
+f 1442/1731/1740 1565/1730/1739 1754/1724/1733 1569/1725/1734
+f 1442/1731/1740 1595/1671/1681 1777/1672/1682 1565/1730/1739
+f 1442/1731/1740 1570/1732/1741 1720/1670/1680 1595/1671/1681
+f 1442/1731/1740 1569/1725/1734 1704/1726/1735 1570/1732/1741
+f 1443/1733/1742 1570/1732/1741 1704/1726/1735 1571/1729/1738
+f 1443/1733/1742 1594/1677/1686 1720/1670/1680 1570/1732/1741
+f 1443/1733/1742 1587/1615/1632 1722/1616/1633 1594/1677/1686
+f 1443/1733/1742 1571/1729/1738 1715/1612/1629 1587/1615/1632
+f 1444/1735/1744 1596/1734/1743 1725/1509/1535 1492/1510/1536
+f 1444/1735/1744 1598/1737/1746 1727/1736/1745 1596/1734/1743
+f 1444/1735/1744 1599/1739/1748 1729/1738/1747 1598/1737/1746
+f 1444/1735/1744 1492/1510/1536 1726/1512/1538 1599/1739/1748
+f 1445/1741/1750 1597/1740/1749 1727/1736/1745 1598/1737/1746
+f 1445/1741/1750 1665/1743/1752 1763/1742/1751 1597/1740/1749
+f 1445/1741/1750 1601/1745/1754 1762/1744/1753 1665/1743/1752
+f 1445/1741/1750 1598/1737/1746 1729/1738/1747 1601/1745/1754
+f 1446/1746/1755 1599/1739/1748 1726/1512/1538 1493/1523/1549
+f 1446/1746/1755 1600/1747/1756 1729/1738/1747 1599/1739/1748
+f 1446/1746/1755 1662/1749/1758 1761/1748/1757 1600/1747/1756
+f 1446/1746/1755 1493/1523/1549 1760/1525/1551 1662/1749/1758
+f 1447/1750/1759 1601/1745/1754 1729/1738/1747 1600/1747/1756
+f 1447/1750/1759 1664/1751/1760 1762/1744/1753 1601/1745/1754
+f 1447/1750/1759 1663/1753/1762 1781/1752/1761 1664/1751/1760
+f 1447/1750/1759 1600/1747/1756 1761/1748/1757 1663/1753/1762
+f 1448/1755/1763 1500/1533/1559 1725/1534/1535 1596/1754/1743
+f 1448/1755/1763 1602/1756/1764 1728/1541/1564 1500/1533/1559
+f 1448/1755/1763 1603/1758/1766 1730/1757/1765 1602/1756/1764
+f 1448/1755/1763 1596/1754/1743 1727/1759/1745 1603/1758/1766
+f 1449/1760/1767 1501/1542/1565 1728/1541/1564 1602/1756/1764
+f 1449/1760/1767 1661/1761/1768 1759/1547/1570 1501/1542/1565
+f 1449/1760/1767 1605/1763/1770 1758/1762/1769 1661/1761/1768
+f 1449/1760/1767 1602/1756/1764 1730/1757/1765 1605/1763/1770
+f 1450/1765/1771 1603/1758/1766 1727/1759/1745 1597/1764/1749
+f 1450/1765/1771 1604/1766/1772 1730/1757/1765 1603/1758/1766
+f 1450/1765/1771 1666/1768/1774 1764/1767/1773 1604/1766/1772
+f 1450/1765/1771 1597/1764/1749 1763/1769/1751 1666/1768/1774
+f 1451/1770/1775 1605/1763/1770 1730/1757/1765 1604/1766/1772
+f 1451/1770/1775 1660/1771/1776 1758/1762/1769 1605/1763/1770
+f 1451/1770/1775 1667/1773/1778 1780/1772/1777 1660/1771/1776
+f 1451/1770/1775 1604/1766/1772 1764/1767/1773 1667/1773/1778
+f 1452/1777/1782 1606/1776/1781 1731/1775/1780 1624/1774/1779
+f 1452/1777/1782 1608/1779/1784 1732/1778/1783 1606/1776/1781
+f 1452/1777/1782 1609/1781/1786 1736/1780/1785 1608/1779/1784
+f 1452/1777/1782 1624/1774/1779 1735/1782/1787 1609/1781/1786
+f 1453/1784/1789 1607/1783/1788 1732/1778/1783 1608/1779/1784
+f 1453/1784/1789 1666/1768/1774 1763/1769/1751 1607/1783/1788
+f 1453/1784/1789 1611/1785/1790 1764/1767/1773 1666/1768/1774
+f 1453/1784/1789 1608/1779/1784 1736/1780/1785 1611/1785/1790
+f 1454/1787/1792 1609/1781/1786 1735/1782/1787 1625/1786/1791
+f 1454/1787/1792 1610/1788/1793 1736/1780/1785 1609/1781/1786
+f 1454/1787/1792 1670/1790/1795 1767/1789/1794 1610/1788/1793
+f 1454/1787/1792 1625/1786/1791 1766/1791/1796 1670/1790/1795
+f 1455/1792/1797 1611/1785/1790 1736/1780/1785 1610/1788/1793
+f 1455/1792/1797 1667/1773/1778 1764/1767/1773 1611/1785/1790
+f 1455/1792/1797 1671/1793/1798 1780/1772/1777 1667/1773/1778
+f 1455/1792/1797 1610/1788/1793 1767/1789/1794 1671/1793/1798
+f 1456/1797/1800 1612/1796/1799 1731/1795/1780 1606/1794/1781
+f 1456/1797/1800 1614/1799/1802 1733/1798/1801 1612/1796/1799
+f 1456/1797/1800 1615/1801/1804 1737/1800/1803 1614/1799/1802
+f 1456/1797/1800 1606/1794/1781 1732/1802/1783 1615/1801/1804
+f 1457/1804/1806 1613/1803/1805 1733/1798/1801 1614/1799/1802
+f 1457/1804/1806 1673/1806/1808 1769/1805/1807 1613/1803/1805
+f 1457/1804/1806 1617/1808/1810 1768/1807/1809 1673/1806/1808
+f 1457/1804/1806 1614/1799/1802 1737/1800/1803 1617/1808/1810
+f 1458/1810/1811 1615/1801/1804 1732/1802/1783 1607/1809/1788
+f 1458/1810/1811 1616/1811/1812 1737/1800/1803 1615/1801/1804
+f 1458/1810/1811 1665/1743/1752 1762/1744/1753 1616/1811/1812
+f 1458/1810/1811 1607/1809/1788 1763/1742/1751 1665/1743/1752
+f 1459/1812/1813 1617/1808/1810 1737/1800/1803 1616/1811/1812
+f 1459/1812/1813 1672/1813/1814 1768/1807/1809 1617/1808/1810
+f 1459/1812/1813 1664/1751/1760 1781/1752/1761 1672/1813/1814
+f 1459/1812/1813 1616/1811/1812 1762/1744/1753 1664/1751/1760
+f 1460/1815/1816 1618/1814/1815 1731/1795/1780 1612/1796/1799
+f 1460/1815/1816 1620/1817/1818 1734/1816/1817 1618/1814/1815
+f 1460/1815/1816 1621/1819/1820 1738/1818/1819 1620/1817/1818
+f 1460/1815/1816 1612/1796/1799 1733/1798/1801 1621/1819/1820
+f 1461/1821/1822 1619/1820/1821 1734/1816/1817 1620/1817/1818
+f 1461/1821/1822 1677/1823/1824 1772/1822/1823 1619/1820/1821
+f 1461/1821/1822 1623/1825/1826 1771/1824/1825 1677/1823/1824
+f 1461/1821/1822 1620/1817/1818 1738/1818/1819 1623/1825/1826
+f 1462/1826/1827 1621/1819/1820 1733/1798/1801 1613/1803/1805
+f 1462/1826/1827 1622/1827/1828 1738/1818/1819 1621/1819/1820
+f 1462/1826/1827 1674/1829/1830 1770/1828/1829 1622/1827/1828
+f 1462/1826/1827 1613/1803/1805 1769/1805/1807 1674/1829/1830
+f 1463/1830/1831 1623/1825/1826 1738/1818/1819 1622/1827/1828
+f 1463/1830/1831 1676/1831/1832 1771/1824/1825 1623/1825/1826
+f 1463/1830/1831 1675/1833/1834 1779/1832/1833 1676/1831/1832
+f 1463/1830/1831 1622/1827/1828 1770/1828/1829 1675/1833/1834
+f 1464/1835/1835 1624/1774/1779 1731/1775/1780 1618/1834/1815
+f 1464/1835/1835 1626/1836/1836 1735/1782/1787 1624/1774/1779
+f 1464/1835/1835 1627/1838/1838 1739/1837/1837 1626/1836/1836
+f 1464/1835/1835 1618/1834/1815 1734/1839/1817 1627/1838/1838
+f 1465/1840/1839 1625/1786/1791 1735/1782/1787 1626/1836/1836
+f 1465/1840/1839 1669/1841/1840 1766/1791/1796 1625/1786/1791
+f 1465/1840/1839 1629/1843/1842 1765/1842/1841 1669/1841/1840
+f 1465/1840/1839 1626/1836/1836 1739/1837/1837 1629/1843/1842
+f 1466/1845/1843 1627/1838/1838 1734/1839/1817 1619/1844/1821
+f 1466/1845/1843 1628/1846/1844 1739/1837/1837 1627/1838/1838
+f 1466/1845/1843 1678/1848/1846 1773/1847/1845 1628/1846/1844
+f 1466/1845/1843 1619/1844/1821 1772/1849/1823 1678/1848/1846
+f 1467/1850/1847 1629/1843/1842 1739/1837/1837 1628/1846/1844
+f 1467/1850/1847 1668/1851/1848 1765/1842/1841 1629/1843/1842
+f 1467/1850/1847 1679/1853/1850 1778/1852/1849 1668/1851/1848
+f 1467/1850/1847 1628/1846/1844 1773/1847/1845 1679/1853/1850
+f 1468/1855/1852 1630/1854/1851 1740/1639/1652 1542/1640/1653
+f 1468/1855/1852 1632/1857/1854 1741/1856/1853 1630/1854/1851
+f 1468/1855/1852 1633/1859/1856 1744/1858/1855 1632/1857/1854
+f 1468/1855/1852 1542/1640/1653 1743/1642/1655 1633/1859/1856
+f 1469/1861/1858 1631/1860/1857 1741/1856/1853 1632/1857/1854
+f 1469/1861/1858 1678/1848/1846 1772/1849/1823 1631/1860/1857
+f 1469/1861/1858 1635/1862/1859 1773/1847/1845 1678/1848/1846
+f 1469/1861/1858 1632/1857/1854 1744/1858/1855 1635/1862/1859
+f 1470/1863/1860 1633/1859/1856 1743/1642/1655 1543/1650/1663
+f 1470/1863/1860 1634/1864/1861 1744/1858/1855 1633/1859/1856
+f 1470/1863/1860 1680/1866/1863 1775/1865/1862 1634/1864/1861
+f 1470/1863/1860 1543/1650/1663 1774/1652/1665 1680/1866/1863
+f 1471/1867/1864 1635/1862/1859 1744/1858/1855 1634/1864/1861
+f 1471/1867/1864 1679/1853/1850 1773/1847/1845 1635/1862/1859
+f 1471/1867/1864 1681/1868/1865 1778/1852/1849 1679/1853/1850
+f 1471/1867/1864 1634/1864/1861 1775/1865/1862 1681/1868/1865
+f 1472/1870/1866 1536/1658/1671 1740/1659/1652 1630/1869/1851
+f 1472/1870/1866 1636/1871/1867 1742/1666/1676 1536/1658/1671
+f 1472/1870/1866 1637/1873/1869 1745/1872/1868 1636/1871/1867
+f 1472/1870/1866 1630/1869/1851 1741/1874/1853 1637/1873/1869
+f 1473/1875/1870 1537/1667/1677 1742/1666/1676 1636/1871/1867
+f 1473/1875/1870 1683/1876/1871 1777/1672/1682 1537/1667/1677
+f 1473/1875/1870 1639/1878/1873 1776/1877/1872 1683/1876/1871
+f 1473/1875/1870 1636/1871/1867 1745/1872/1868 1639/1878/1873
+f 1474/1880/1874 1637/1873/1869 1741/1874/1853 1631/1879/1857
+f 1474/1880/1874 1638/1881/1875 1745/1872/1868 1637/1873/1869
+f 1474/1880/1874 1677/1823/1824 1771/1824/1825 1638/1881/1875
+f 1474/1880/1874 1631/1879/1857 1772/1822/1823 1677/1823/1824
+f 1475/1882/1876 1639/1878/1873 1745/1872/1868 1638/1881/1875
+f 1475/1882/1876 1682/1883/1877 1776/1877/1872 1639/1878/1873
+f 1475/1882/1876 1676/1831/1832 1779/1832/1833 1682/1883/1877
+f 1475/1882/1876 1638/1881/1875 1771/1824/1825 1676/1831/1832
+f 1476/1885/1879 1640/1884/1878 1746/1679/1688 1544/1680/1689
+f 1476/1885/1879 1642/1887/1881 1748/1886/1880 1640/1884/1878
+f 1476/1885/1879 1643/1889/1883 1750/1888/1882 1642/1887/1881
+f 1476/1885/1879 1544/1680/1689 1747/1682/1691 1643/1889/1883
+f 1477/1891/1885 1641/1890/1884 1748/1886/1880 1642/1887/1881
+f 1477/1891/1885 1670/1790/1795 1766/1791/1796 1641/1890/1884
+f 1477/1891/1885 1645/1892/1886 1767/1789/1794 1670/1790/1795
+f 1477/1891/1885 1642/1887/1881 1750/1888/1882 1645/1892/1886
+f 1478/1893/1887 1643/1889/1883 1747/1682/1691 1545/1690/1699
+f 1478/1893/1887 1644/1894/1888 1750/1888/1882 1643/1889/1883
+f 1478/1893/1887 1661/1761/1768 1758/1762/1769 1644/1894/1888
+f 1478/1893/1887 1545/1690/1699 1759/1547/1570 1661/1761/1768
+f 1479/1895/1889 1645/1892/1886 1750/1888/1882 1644/1894/1888
+f 1479/1895/1889 1671/1793/1798 1767/1789/1794 1645/1892/1886
+f 1479/1895/1889 1660/1771/1776 1780/1772/1777 1671/1793/1798
+f 1479/1895/1889 1644/1894/1888 1758/1762/1769 1660/1771/1776
+f 1480/1896/1890 1552/1694/1703 1746/1679/1688 1640/1884/1878
+f 1480/1896/1890 1646/1897/1891 1749/1699/1708 1552/1694/1703
+f 1480/1896/1890 1647/1899/1893 1751/1898/1892 1646/1897/1891
+f 1480/1896/1890 1640/1884/1878 1748/1886/1880 1647/1899/1893
+f 1481/1900/1894 1553/1700/1709 1749/1699/1708 1646/1897/1891
+f 1481/1900/1894 1680/1866/1863 1774/1652/1665 1553/1700/1709
+f 1481/1900/1894 1649/1901/1895 1775/1865/1862 1680/1866/1863
+f 1481/1900/1894 1646/1897/1891 1751/1898/1892 1649/1901/1895
+f 1482/1902/1896 1647/1899/1893 1748/1886/1880 1641/1890/1884
+f 1482/1902/1896 1648/1903/1897 1751/1898/1892 1647/1899/1893
+f 1482/1902/1896 1669/1841/1840 1765/1842/1841 1648/1903/1897
+f 1482/1902/1896 1641/1890/1884 1766/1791/1796 1669/1841/1840
+f 1483/1904/1898 1649/1901/1895 1751/1898/1892 1648/1903/1897
+f 1483/1904/1898 1681/1868/1865 1775/1865/1862 1649/1901/1895
+f 1483/1904/1898 1668/1851/1848 1778/1852/1849 1681/1868/1865
+f 1483/1904/1898 1648/1903/1897 1765/1842/1841 1668/1851/1848
+f 1484/1906/1900 1558/1706/1715 1752/1707/1716 1654/1905/1899
+f 1484/1906/1900 1650/1907/1901 1753/1714/1723 1558/1706/1715
+f 1484/1906/1900 1651/1909/1903 1756/1908/1902 1650/1907/1901
+f 1484/1906/1900 1654/1905/1899 1755/1910/1904 1651/1909/1903
+f 1485/1911/1905 1559/1715/1724 1753/1714/1723 1650/1907/1901
+f 1485/1911/1905 1662/1749/1758 1760/1525/1551 1559/1715/1724
+f 1485/1911/1905 1653/1912/1906 1761/1748/1757 1662/1749/1758
+f 1485/1911/1905 1650/1907/1901 1756/1908/1902 1653/1912/1906
+f 1486/1914/1908 1651/1909/1903 1755/1910/1904 1655/1913/1907
+f 1486/1914/1908 1652/1915/1909 1756/1908/1902 1651/1909/1903
+f 1486/1914/1908 1673/1806/1808 1768/1807/1809 1652/1915/1909
+f 1486/1914/1908 1655/1913/1907 1769/1805/1807 1673/1806/1808
+f 1487/1916/1910 1653/1912/1906 1756/1908/1902 1652/1915/1909
+f 1487/1916/1910 1663/1753/1762 1761/1748/1757 1653/1912/1906
+f 1487/1916/1910 1672/1813/1814 1781/1752/1761 1663/1753/1762
+f 1487/1916/1910 1652/1915/1909 1768/1807/1809 1672/1813/1814
+f 1488/1917/1911 1654/1905/1899 1752/1707/1716 1564/1722/1731
+f 1488/1917/1911 1656/1918/1912 1755/1910/1904 1654/1905/1899
+f 1488/1917/1911 1657/1920/1914 1757/1919/1913 1656/1918/1912
+f 1488/1917/1911 1564/1722/1731 1754/1724/1733 1657/1920/1914
+f 1489/1921/1915 1655/1913/1907 1755/1910/1904 1656/1918/1912
+f 1489/1921/1915 1674/1829/1830 1769/1805/1807 1655/1913/1907
+f 1489/1921/1915 1659/1922/1916 1770/1828/1829 1674/1829/1830
+f 1489/1921/1915 1656/1918/1912 1757/1919/1913 1659/1922/1916
+f 1490/1923/1917 1657/1920/1914 1754/1724/1733 1565/1730/1739
+f 1490/1923/1917 1658/1924/1918 1757/1919/1913 1657/1920/1914
+f 1490/1923/1917 1683/1876/1871 1776/1877/1872 1658/1924/1918
+f 1490/1923/1917 1565/1730/1739 1777/1672/1682 1683/1876/1871
+f 1491/1925/1919 1659/1922/1916 1757/1919/1913 1658/1924/1918
+f 1491/1925/1919 1675/1833/1834 1770/1828/1829 1659/1922/1916
+f 1491/1925/1919 1682/1883/1877 1779/1832/1833 1675/1833/1834
+f 1491/1925/1919 1658/1924/1918 1776/1877/1872 1682/1883/1877
diff --git a/samples/ndk-hellovrbeta/src/main/assets/Controller6DOFDiffuse.png b/samples/ndk-hellovrbeta/src/main/assets/Controller6DOFDiffuse.png
index a1711c5..8d1c8c2 100644
--- a/samples/ndk-hellovrbeta/src/main/assets/Controller6DOFDiffuse.png
+++ b/samples/ndk-hellovrbeta/src/main/assets/Controller6DOFDiffuse.png
Binary files differ
diff --git a/samples/ndk-hellovrbeta/src/main/assets/Laser.png b/samples/ndk-hellovrbeta/src/main/assets/Laser.png
index 530772f..c3e5f0d 100644
--- a/samples/ndk-hellovrbeta/src/main/assets/Laser.png
+++ b/samples/ndk-hellovrbeta/src/main/assets/Laser.png
Binary files differ
diff --git a/samples/ndk-hellovrbeta/src/main/java/com/google/vr/ndk/samples/hellovrbeta/HelloVrBetaActivity.java b/samples/ndk-hellovrbeta/src/main/java/com/google/vr/ndk/samples/hellovrbeta/HelloVrBetaActivity.java
index 9a99436..a8a9099 100644
--- a/samples/ndk-hellovrbeta/src/main/java/com/google/vr/ndk/samples/hellovrbeta/HelloVrBetaActivity.java
+++ b/samples/ndk-hellovrbeta/src/main/java/com/google/vr/ndk/samples/hellovrbeta/HelloVrBetaActivity.java
@@ -210,8 +210,6 @@
private native long nativeOnDrawFrame(long nativeApp);
- private native void nativeOnTriggerEvent(long nativeApp);
-
private native void nativeOnPause(long nativeApp);
private native void nativeOnResume(long nativeApp);
diff --git a/samples/ndk-hellovrbeta/src/main/jni/controllers.cc b/samples/ndk-hellovrbeta/src/main/jni/controllers.cc
index 320530a..d84216e 100644
--- a/samples/ndk-hellovrbeta/src/main/jni/controllers.cc
+++ b/samples/ndk-hellovrbeta/src/main/jni/controllers.cc
@@ -26,10 +26,20 @@
// https://developers.google.com/vr/distribute/daydream/design-requirements#UX-C1
const gvr::Mat4f kLaserRotation =
GetAxisAngleRotationMatrix({1.0f, 0.0f, 0.0f}, -.262f);
+
const gvr::Mat4f k6dofLaserTransform =
MatrixMul(GetTranslationMatrix({0.0f, -0.007f, -0.12f}), kLaserRotation);
+constexpr gvr::Rectf k6dofBatteryUVRect({0.1079f, 0.1914f, 0.5391f, 0.5601f});
+constexpr gvr::Vec2f k6dofBatteryChargeOffset({0.0f, -0.4072f});
+constexpr gvr::Vec2f k6dofBatteryCriticalOffset({0.0f, -0.3862f});
+
const gvr::Mat4f k3dofLaserTransform =
MatrixMul(GetTranslationMatrix({0.0f, -0.007f, -0.055f}), kLaserRotation);
+constexpr gvr::Rectf k3dofBatteryUVRect({0.06641f, 0.2539f, 0.2304f, 0.25f});
+constexpr gvr::Vec2f k3dofBatteryChargeOffset({0.0f, -0.1797f});
+constexpr gvr::Vec2f k3dofBatteryCriticalOffset({0.0f, -0.2207f});
+
+constexpr float kBatteryCriticalPercentage = 0.25f;
} // unnamed namespace
@@ -98,6 +108,11 @@
} else {
laser_transform_ = MatrixMul(transform_, k6dofLaserTransform);
}
+
+ // Calculate the battery charge.
+ float level = static_cast<float>(state_.GetBatteryLevel());
+ battery_charge_ =
+ level / static_cast<float>(GVR_CONTROLLER_BATTERY_LEVEL_FULL);
}
Controllers::Controllers(gvr::GvrApi* gvr_api)
@@ -109,10 +124,10 @@
void Controllers::Initialize(JNIEnv* env, jobject java_asset_mgr,
AAssetManager* asset_mgr) {
- shader_.Link();
+ controller_shader_.Link();
- GLuint position_attrib = shader_.GetPositionAttribute();
- GLuint uv_attrib = shader_.GetUVAttribute();
+ GLuint position_attrib = controller_shader_.GetPositionAttribute();
+ GLuint uv_attrib = controller_shader_.GetUVAttribute();
HELLOVRBETA_CHECK(controller_6dof_mesh_.Initialize(
asset_mgr, "Controller6DOF.obj", position_attrib, uv_attrib));
@@ -122,6 +137,12 @@
asset_mgr, "Controller3DOF.obj", position_attrib, uv_attrib));
HELLOVRBETA_CHECK(controller_3dof_texture_.Initialize(
env, java_asset_mgr, "Controller3DOFDiffuse.png"));
+
+ laser_shader_.Link();
+
+ position_attrib = laser_shader_.GetPositionAttribute();
+ uv_attrib = laser_shader_.GetUVAttribute();
+
HELLOVRBETA_CHECK(laser_mesh_.Initialize(asset_mgr, "Laser.obj",
position_attrib, uv_attrib));
HELLOVRBETA_CHECK(
@@ -189,10 +210,33 @@
}
}
+void Controllers::UpdateBatteryUniforms(const Controller& controller) const {
+ // UV Rectangle in the texture that surrounds the battery indicator.
+ gvr::Rectf uv_rect = {};
+ // UV offset to move the UV rectangle to either the charge or critical icons.
+ gvr::Vec2f offset = {};
+ float charge = controller.GetBatteryCharge();
+
+ // If the battery level is zero, it's unknown.
+ if (controller.GetType() == GVR_BETA_CONTROLLER_CONFIGURATION_6DOF) {
+ uv_rect = k6dofBatteryUVRect;
+ offset = charge < kBatteryCriticalPercentage ? k6dofBatteryCriticalOffset
+ : k6dofBatteryChargeOffset;
+ } else {
+ uv_rect = k3dofBatteryUVRect;
+ offset = charge < kBatteryCriticalPercentage ? k3dofBatteryCriticalOffset
+ : k3dofBatteryChargeOffset;
+ }
+
+ if (charge > 0.0) {
+ uv_rect.right = Lerp(uv_rect.left, uv_rect.right, charge);
+ }
+ controller_shader_.SetBatteryOffset(offset);
+ controller_shader_.SetBatteryUVRect(uv_rect);
+}
+
void Controllers::Draw(const gvr::Mat4f view[2],
const gvr::Mat4f view_projection[2]) const {
- shader_.Use();
-
for (const auto& controller : controllers_) {
// Don't draw controllers that are out of tracking FOV.
if (controller.IsOutOfFov()) {
@@ -201,9 +245,11 @@
const gvr::Mat4f& model_matrix = controller.GetTransform();
- shader_.SetModelViewProjection(model_matrix, view_projection);
+ controller_shader_.Use();
+ UpdateBatteryUniforms(controller);
+ controller_shader_.SetModelViewProjection(model_matrix, view_projection);
// Show that tracking has failed by setting making it transparent.
- shader_.SetAlpha(controller.IsTracking() ? 1.0f : 0.25f);
+ controller_shader_.SetAlpha(controller.IsTracking() ? 1.0f : 0.25f);
if (controller.GetType() == GVR_BETA_CONTROLLER_CONFIGURATION_6DOF) {
controller_6dof_texture_.Bind();
@@ -230,7 +276,8 @@
laser_matrix, GetAxisAngleRotationMatrix({0.0f, 0.0f, 1.0f}, -angle));
// Transform the laser using left eye, Ideally this should be per eye.
- shader_.SetModelViewProjection(laser_model, view_projection);
+ laser_shader_.Use();
+ laser_shader_.SetModelViewProjection(laser_model, view_projection);
// Use premultiplied alpha.
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
@@ -257,6 +304,12 @@
}
}
+void Controllers::SetControllerForLaser(int index) {
+ for (int i = 0; i < static_cast<int>(controllers_.size()); ++i) {
+ controllers_[i].SetIsLaserShown(index == i);
+ }
+}
+
void Controllers::SetOnClickDown(std::function<void(int index)> on_click_down) {
on_click_down_ = std::move(on_click_down);
}
diff --git a/samples/ndk-hellovrbeta/src/main/jni/controllers.h b/samples/ndk-hellovrbeta/src/main/jni/controllers.h
index 721e5b9..fa1caa2 100644
--- a/samples/ndk-hellovrbeta/src/main/jni/controllers.h
+++ b/samples/ndk-hellovrbeta/src/main/jni/controllers.h
@@ -55,6 +55,9 @@
bool IsTracking() const { return is_tracking_; }
bool IsOutOfFov() const { return is_out_of_fov_; }
bool IsLaserShown() const { return IsTracking() && show_laser_; }
+ void SetIsLaserShown(bool show_laser) { show_laser_ = show_laser; }
+
+ float GetBatteryCharge() const { return battery_charge_; }
private:
void UpdateTrackingStatus();
@@ -68,6 +71,7 @@
bool show_laser_;
bool is_tracking_;
bool is_out_of_fov_;
+ float battery_charge_;
};
/**
@@ -91,6 +95,8 @@
const std::function<void(int, const gvr::Vec3f& origin,
const gvr::Vec3f& direction)>& callback);
+ void SetControllerForLaser(int index);
+
void SetOnClickDown(std::function<void(int)> on_click);
void SetOnClickUp(std::function<void(int)> on_click);
void SetOnTriggerDown(std::function<void(int)> on_trigger);
@@ -103,9 +109,12 @@
Controller& GetController(int index) { return controllers_[index]; }
private:
+ void UpdateBatteryUniforms(const Controller& controller) const;
+
std::unique_ptr<gvr::ControllerApi> gvr_controller_api_;
- ControllerShaderProgram shader_;
+ ControllerShaderProgram controller_shader_;
+ TexturedShaderProgram laser_shader_;
TexturedMesh controller_6dof_mesh_;
Texture controller_6dof_texture_;
TexturedMesh controller_3dof_mesh_;
diff --git a/samples/ndk-hellovrbeta/src/main/jni/hello_vr_beta_app.cc b/samples/ndk-hellovrbeta/src/main/jni/hello_vr_beta_app.cc
index 7a8466b..9fff19b 100644
--- a/samples/ndk-hellovrbeta/src/main/jni/hello_vr_beta_app.cc
+++ b/samples/ndk-hellovrbeta/src/main/jni/hello_vr_beta_app.cc
@@ -226,6 +226,9 @@
void HelloVrBetaApp::OnTrigger(int controller_index) {
if (!target_held_ && controller_index == controller_on_target_index_) {
GenerateNewTargetPosition();
+ } else {
+ // The last controller that had a trigger pressed shows the laser.
+ controllers_.SetControllerForLaser(controller_index);
}
}
diff --git a/samples/ndk-hellovrbeta/src/main/jni/shader_program.cc b/samples/ndk-hellovrbeta/src/main/jni/shader_program.cc
index 5118e44..122b484 100644
--- a/samples/ndk-hellovrbeta/src/main/jni/shader_program.cc
+++ b/samples/ndk-hellovrbeta/src/main/jni/shader_program.cc
@@ -26,7 +26,7 @@
// Simple shaders to render .obj files without any lighting.
constexpr const char* kTexturedMeshVertexShader =
// The following shader is for multiview rendering.
- R"glsl(#version 300 es
+ R"glsl(#version 320 es
#extension GL_OVR_multiview2 : enable
layout(num_views=2) in;
@@ -43,7 +43,7 @@
})glsl";
constexpr const char* kTexturedMeshFragmentShader =
- R"glsl(#version 300 es
+ R"glsl(#version 320 es
precision mediump float;
in vec2 v_UV;
@@ -57,18 +57,32 @@
})glsl";
constexpr const char* kTexturedMeshAlphaFragmentShader =
- R"glsl(#version 300 es
+ R"glsl(#version 320 es
precision mediump float;
in vec2 v_UV;
out vec4 FragColor;
- uniform float a_Alpha;
uniform sampler2D u_Texture;
+ uniform float a_Alpha;
+ uniform vec4 a_BatteryUVRect;
+ uniform vec2 a_BatteryOffset;
+
+ // Returns true if point is inside box.
+ // Expects rect as xmin, ymin, xmax, ymax.
+ bool inRect(vec2 pt, vec4 rect) {
+ vec2 result = step(rect.xy, pt) - (vec2(1.0, 1.0) - step(pt, rect.zw));
+ return result.x * result.y > 0.5;
+ }
void main() {
- // The y coordinate of this sample's textures is reversed compared to
- // what OpenGL expects, so we invert the y coordinate.
- FragColor = texture(u_Texture, vec2(v_UV.x, 1.0 - v_UV.y));
+ // Explicitly choose a mip level to work around incorrect mip level at
+ // boundary of rectangle.
+ vec2 texture_coord = fwidth(v_UV) * vec2(textureSize(u_Texture, 0));
+ float mip_level = log2(max((texture_coord.x + texture_coord.y)*0.5, 1.0));
+ // If the uv is in the battery section, offset to the battery indicator.
+ FragColor = inRect(v_UV, a_BatteryUVRect) ?
+ textureLod(u_Texture, v_UV + a_BatteryOffset, mip_level) :
+ textureLod(u_Texture, v_UV, mip_level);
FragColor.a = FragColor.a * a_Alpha;
})glsl";
@@ -146,6 +160,8 @@
kTexturedMeshAlphaFragmentShader);
mode_view_projection_ = glGetUniformLocation(program_, "u_MVP");
alpha_ = glGetUniformLocation(program_, "a_Alpha");
+ battery_uv_rect_ = glGetUniformLocation(program_, "a_BatteryUVRect");
+ battery_offset_ = glGetUniformLocation(program_, "a_BatteryOffset");
SetAlpha(1.0f);
}
@@ -153,4 +169,12 @@
glUniform1f(alpha_, alpha);
}
+void ControllerShaderProgram::SetBatteryUVRect(const gvr::Rectf& uv) const {
+ glUniform4f(battery_uv_rect_, uv.left, uv.bottom, uv.right, uv.top);
+}
+
+void ControllerShaderProgram::SetBatteryOffset(const gvr::Vec2f& offset) const {
+ glUniform2f(battery_offset_, offset.x, offset.y);
+}
+
} // namespace ndk_hello_vr_beta
diff --git a/samples/ndk-hellovrbeta/src/main/jni/shader_program.h b/samples/ndk-hellovrbeta/src/main/jni/shader_program.h
index d050f1d..1ad0d2e 100644
--- a/samples/ndk-hellovrbeta/src/main/jni/shader_program.h
+++ b/samples/ndk-hellovrbeta/src/main/jni/shader_program.h
@@ -55,9 +55,13 @@
void Link();
void SetAlpha(float alpha) const;
+ void SetBatteryUVRect(const gvr::Rectf& uv) const;
+ void SetBatteryOffset(const gvr::Vec2f& offset) const;
protected:
GLuint alpha_;
+ GLuint battery_uv_rect_;
+ GLuint battery_offset_;
};
} // namespace ndk_hello_vr_beta
diff --git a/samples/ndk-hellovrbeta/src/main/jni/util.h b/samples/ndk-hellovrbeta/src/main/jni/util.h
index 3800943..3b68525 100644
--- a/samples/ndk-hellovrbeta/src/main/jni/util.h
+++ b/samples/ndk-hellovrbeta/src/main/jni/util.h
@@ -55,6 +55,11 @@
return {l.x * scale, l.y * scale, l.z * scale};
}
+template <typename T>
+T Lerp(const T& a, const T& b, float t) {
+ return a + (b - a) * t;
+}
+
// Flattens a pair of mat4's into an array of 32 floats, useful when feeding
// uniform values to OpenGL for multiview.
std::array<float, 32> MatrixPairToGLArray(const gvr::Mat4f matrix[]);
diff --git a/samples/sdk-controllerclient/build.gradle b/samples/sdk-controllerclient/build.gradle
index 14e03cf..7389303 100644
--- a/samples/sdk-controllerclient/build.gradle
+++ b/samples/sdk-controllerclient/build.gradle
@@ -35,6 +35,5 @@
}
dependencies {
- compile 'com.google.vr:sdk-base:1.180.0'
- compile 'com.google.vr:sdk-controller:1.180.0'
+ implementation 'com.google.vr:sdk-base:1.190.0'
}
diff --git a/samples/sdk-controllerclient/src/main/AndroidManifest.xml b/samples/sdk-controllerclient/src/main/AndroidManifest.xml
index 37702c4..c4ddc03 100644
--- a/samples/sdk-controllerclient/src/main/AndroidManifest.xml
+++ b/samples/sdk-controllerclient/src/main/AndroidManifest.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.vr.sdk.samples.controllerclient"
- android:versionCode="180905036"
- android:versionName="1.180.0">
+ android:versionCode="181016016"
+ android:versionName="1.190.0">
<uses-sdk android:minSdkVersion="24" android:targetSdkVersion="24" />
<uses-feature android:glEsVersion="0x00030002" android:required="true" />
diff --git a/samples/sdk-hellovr/build.gradle b/samples/sdk-hellovr/build.gradle
index a9ec1ce..dfb7853 100644
--- a/samples/sdk-hellovr/build.gradle
+++ b/samples/sdk-hellovr/build.gradle
@@ -35,8 +35,7 @@
}
dependencies {
- compile 'com.google.vr:sdk-audio:1.180.0'
- compile 'com.google.vr:sdk-base:1.180.0'
+ implementation 'com.google.vr:sdk-base:1.190.0'
// Obj - a simple Wavefront OBJ file loader
// https://github.com/javagl/Obj
diff --git a/samples/sdk-hellovr/src/main/AndroidManifest.xml b/samples/sdk-hellovr/src/main/AndroidManifest.xml
index 1ba4f29..64e71e6 100644
--- a/samples/sdk-hellovr/src/main/AndroidManifest.xml
+++ b/samples/sdk-hellovr/src/main/AndroidManifest.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.vr.sdk.samples.hellovr"
- android:versionCode="180905036"
- android:versionName="1.180.0">
+ android:versionCode="181016016"
+ android:versionName="1.190.0">
<!-- The GVR SDK requires API 19+ and OpenGL ES 2+. -->
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="24" />
diff --git a/samples/sdk-simplepanowidget/build.gradle b/samples/sdk-simplepanowidget/build.gradle
deleted file mode 100644
index eb6ebd5..0000000
--- a/samples/sdk-simplepanowidget/build.gradle
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2017 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-apply plugin: 'com.android.application'
-
-android {
- compileSdkVersion 26
-
- defaultConfig {
- minSdkVersion 19
- targetSdkVersion 22
- versionCode 1
- versionName "1.0"
- }
-
- buildTypes {
- release {
- minifyEnabled true
- proguardFiles.add(file('../../proguard-gvr.txt'))
- }
-
- }
-}
-
-dependencies {
- compile 'com.google.vr:sdk-panowidget:1.180.0'
-}
diff --git a/samples/sdk-simplepanowidget/src/main/AndroidManifest.xml b/samples/sdk-simplepanowidget/src/main/AndroidManifest.xml
deleted file mode 100644
index 1e1b970..0000000
--- a/samples/sdk-simplepanowidget/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.google.vr.sdk.samples.simplepanowidget"
- android:versionCode="180905036"
- android:versionName="1.180.0">
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="22" />
- <uses-feature android:glEsVersion="0x00020000" android:required="true" />
-
- <!--
- The app has largeHeap enabled. Since 2k stereo images (2048px wide, 1024px
- high, 2 images, 4 bytes per pixel) only use 16M of RAM, this option isn't
- required for most cases. However, applications that open larger images or
- handle multiple panoramas might run out of memory in the default
- configuration.
- -->
- <application android:label="SimpleVrPanoramaActivity"
- android:largeHeap="true"
- android:theme="@android:style/Theme.Holo.Light">
- <!-- This demo is singleTask since it makes launching via custom adb intents easier. -->
- <activity android:name=".SimpleVrPanoramaActivity"
- android:launchMode="singleTask">
- <intent-filter>
- <!-- Primary intent when launching from the home screen -->
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- <category android:name="com.google.intent.category.CARDBOARD" />
- </intent-filter>
- </activity>
- </application>
-
- <!-- These permissions are used by Google VR SDK to get the best Google VR headset profiles. !-->
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
-</manifest>
diff --git a/samples/sdk-simplepanowidget/src/main/assets/andes.jpg b/samples/sdk-simplepanowidget/src/main/assets/andes.jpg
deleted file mode 100644
index 5a0f0dc..0000000
--- a/samples/sdk-simplepanowidget/src/main/assets/andes.jpg
+++ /dev/null
Binary files differ
diff --git a/samples/sdk-simplepanowidget/src/main/java/com/google/vr/sdk/samples/simplepanowidget/SimpleVrPanoramaActivity.java b/samples/sdk-simplepanowidget/src/main/java/com/google/vr/sdk/samples/simplepanowidget/SimpleVrPanoramaActivity.java
deleted file mode 100644
index 2506ccd..0000000
--- a/samples/sdk-simplepanowidget/src/main/java/com/google/vr/sdk/samples/simplepanowidget/SimpleVrPanoramaActivity.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright 2017 Google Inc. All Rights Reserved.
-
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.vr.sdk.samples.simplepanowidget;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.content.res.AssetManager;
-import android.graphics.BitmapFactory;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.text.Html;
-import android.text.method.LinkMovementMethod;
-import android.util.Log;
-import android.util.Pair;
-import android.widget.TextView;
-import android.widget.Toast;
-import com.google.vr.sdk.widgets.pano.VrPanoramaEventListener;
-import com.google.vr.sdk.widgets.pano.VrPanoramaView;
-import com.google.vr.sdk.widgets.pano.VrPanoramaView.Options;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * A basic PanoWidget Activity to load panorama images from disk. It will load a test image by
- * default. It can also load an arbitrary image from disk using:
- * adb shell am start -a "android.intent.action.VIEW" \
- * -n "com.google.vr.sdk.samples.simplepanowidget/.SimpleVrPanoramaActivity" \
- * -d "/sdcard/FILENAME.JPG"
- *
- * To load stereo images, "--ei inputType 2" can be used to pass in an integer extra which will set
- * VrPanoramaView.Options.inputType.
- */
-public class SimpleVrPanoramaActivity extends Activity {
- private static final String TAG = SimpleVrPanoramaActivity.class.getSimpleName();
- /** Actual panorama widget. **/
- private VrPanoramaView panoWidgetView;
- /**
- * Arbitrary variable to track load status. In this example, this variable should only be accessed
- * on the UI thread. In a real app, this variable would be code that performs some UI actions when
- * the panorama is fully loaded.
- */
- public boolean loadImageSuccessful;
- /** Tracks the file to be loaded across the lifetime of this app. **/
- private Uri fileUri;
- /** Configuration information for the panorama. **/
- private Options panoOptions = new Options();
- private ImageLoaderTask backgroundImageLoaderTask;
-
- /**
- * Called when the app is launched via the app icon or an intent using the adb command above. This
- * initializes the app and loads the image to render.
- */
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main_layout);
-
- // Make the source link clickable.
- TextView sourceText = (TextView) findViewById(R.id.source);
- sourceText.setText(Html.fromHtml(getString(R.string.source)));
- sourceText.setMovementMethod(LinkMovementMethod.getInstance());
-
- panoWidgetView = (VrPanoramaView) findViewById(R.id.pano_view);
- panoWidgetView.setEventListener(new ActivityEventListener());
-
- // Initial launch of the app or an Activity recreation due to rotation.
- handleIntent(getIntent());
- }
-
- /**
- * Called when the Activity is already running and it's given a new intent.
- */
- @Override
- protected void onNewIntent(Intent intent) {
- Log.i(TAG, this.hashCode() + ".onNewIntent()");
- // Save the intent. This allows the getIntent() call in onCreate() to use this new Intent during
- // future invocations.
- setIntent(intent);
- // Load the new image.
- handleIntent(intent);
- }
-
- /**
- * Load custom images based on the Intent or load the default image. See the Javadoc for this
- * class for information on generating a custom intent via adb.
- */
- private void handleIntent(Intent intent) {
- // Determine if the Intent contains a file to load.
- if (Intent.ACTION_VIEW.equals(intent.getAction())) {
- Log.i(TAG, "ACTION_VIEW Intent recieved");
-
- fileUri = intent.getData();
- if (fileUri == null) {
- Log.w(TAG, "No data uri specified. Use \"-d /path/filename\".");
- } else {
- Log.i(TAG, "Using file " + fileUri.toString());
- }
-
- panoOptions.inputType = intent.getIntExtra("inputType", Options.TYPE_MONO);
- Log.i(TAG, "Options.inputType = " + panoOptions.inputType);
- } else {
- Log.i(TAG, "Intent is not ACTION_VIEW. Using default pano image.");
- fileUri = null;
- panoOptions.inputType = Options.TYPE_MONO;
- }
-
- // Load the bitmap in a background thread to avoid blocking the UI thread. This operation can
- // take 100s of milliseconds.
- if (backgroundImageLoaderTask != null) {
- // Cancel any task from a previous intent sent to this activity.
- backgroundImageLoaderTask.cancel(true);
- }
- backgroundImageLoaderTask = new ImageLoaderTask();
- backgroundImageLoaderTask.execute(Pair.create(fileUri, panoOptions));
- }
-
- @Override
- protected void onPause() {
- panoWidgetView.pauseRendering();
- super.onPause();
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- panoWidgetView.resumeRendering();
- }
-
- @Override
- protected void onDestroy() {
- // Destroy the widget and free memory.
- panoWidgetView.shutdown();
-
- // The background task has a 5 second timeout so it can potentially stay alive for 5 seconds
- // after the activity is destroyed unless it is explicitly cancelled.
- if (backgroundImageLoaderTask != null) {
- backgroundImageLoaderTask.cancel(true);
- }
- super.onDestroy();
- }
-
- /**
- * Helper class to manage threading.
- */
- class ImageLoaderTask extends AsyncTask<Pair<Uri, Options>, Void, Boolean> {
-
- /**
- * Reads the bitmap from disk in the background and waits until it's loaded by pano widget.
- */
- @Override
- protected Boolean doInBackground(Pair<Uri, Options>... fileInformation) {
- Options panoOptions = null; // It's safe to use null VrPanoramaView.Options.
- InputStream istr = null;
- if (fileInformation == null || fileInformation.length < 1
- || fileInformation[0] == null || fileInformation[0].first == null) {
- AssetManager assetManager = getAssets();
- try {
- istr = assetManager.open("andes.jpg");
- panoOptions = new Options();
- panoOptions.inputType = Options.TYPE_STEREO_OVER_UNDER;
- } catch (IOException e) {
- Log.e(TAG, "Could not decode default bitmap: " + e);
- return false;
- }
- } else {
- try {
- istr = new FileInputStream(new File(fileInformation[0].first.getPath()));
- panoOptions = fileInformation[0].second;
- } catch (IOException e) {
- Log.e(TAG, "Could not load file: " + e);
- return false;
- }
- }
-
- panoWidgetView.loadImageFromBitmap(BitmapFactory.decodeStream(istr), panoOptions);
- try {
- istr.close();
- } catch (IOException e) {
- Log.e(TAG, "Could not close input stream: " + e);
- }
-
- return true;
- }
- }
-
- /**
- * Listen to the important events from widget.
- */
- private class ActivityEventListener extends VrPanoramaEventListener {
- /**
- * Called by pano widget on the UI thread when it's done loading the image.
- */
- @Override
- public void onLoadSuccess() {
- loadImageSuccessful = true;
- }
-
- /**
- * Called by pano widget on the UI thread on any asynchronous error.
- */
- @Override
- public void onLoadError(String errorMessage) {
- loadImageSuccessful = false;
- Toast.makeText(
- SimpleVrPanoramaActivity.this, "Error loading pano: " + errorMessage, Toast.LENGTH_LONG)
- .show();
- Log.e(TAG, "Error loading pano: " + errorMessage);
- }
- }
-}
diff --git a/samples/sdk-simplepanowidget/src/main/res/layout/main_layout.xml b/samples/sdk-simplepanowidget/src/main/res/layout/main_layout.xml
deleted file mode 100644
index 22b8011..0000000
--- a/samples/sdk-simplepanowidget/src/main/res/layout/main_layout.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@android:color/white">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:padding="10dip"
- android:id="@+id/main_layout"
- android:orientation="vertical" >
-
- <TextView
- style="@style/ContentText"
- android:id="@+id/title"
- android:textSize="@dimen/title_text_size"
- android:textStyle="bold"
- android:textColor="@color/textDark"
- android:text="@string/title" />
-
- <TextView
- style="@style/ContentText"
- android:id="@+id/subtitle"
- android:textColor="@color/textLight"
- android:textSize="@dimen/caption_text_size"
- android:text="@string/subtitle" />
-
- <TextView
- style="@style/ContentText"
- android:id="@+id/paragraph1"
- android:textColor="@color/textDark"
- android:textSize="@dimen/paragragh_text_size"
- android:text="@string/paragraph1" />
-
- <com.google.vr.sdk.widgets.pano.VrPanoramaView
- android:id="@+id/pano_view"
- android:layout_margin="5dip"
- android:layout_width="match_parent"
- android:scrollbars="@null"
- android:layout_height="250dip"/>
-
- <TextView
- style="@style/ContentText"
- android:id="@+id/pano_view_caption"
- android:textColor="@color/textLight"
- android:textSize="12dip"
- android:text="@string/image_caption" />
-
- <TextView
- style="@style/ContentText"
- android:id="@+id/paragraph2"
- android:textColor="@color/textDark"
- android:textSize="@dimen/paragragh_text_size"
- android:text="@string/paragraph2" />
-
- <TextView
- android:id="@+id/source"
- style="@style/ContentText"
- android:textColor="@color/textDark"
- android:textSize="@dimen/paragragh_text_size"/>
- </LinearLayout>
-</ScrollView>
diff --git a/samples/sdk-simplepanowidget/src/main/res/values/colors.xml b/samples/sdk-simplepanowidget/src/main/res/values/colors.xml
deleted file mode 100644
index 3fcce68..0000000
--- a/samples/sdk-simplepanowidget/src/main/res/values/colors.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<resources>
- <color name="textDark">#222</color>
- <color name="textLight">#555</color>
-</resources>
diff --git a/samples/sdk-simplepanowidget/src/main/res/values/dimens.xml b/samples/sdk-simplepanowidget/src/main/res/values/dimens.xml
deleted file mode 100644
index bc946cb..0000000
--- a/samples/sdk-simplepanowidget/src/main/res/values/dimens.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <dimen name="title_text_size">24dip</dimen>
- <dimen name="caption_text_size">12dip</dimen>
- <dimen name="paragragh_text_size">15dip</dimen>
-</resources>
\ No newline at end of file
diff --git a/samples/sdk-simplepanowidget/src/main/res/values/strings.xml b/samples/sdk-simplepanowidget/src/main/res/values/strings.xml
deleted file mode 100644
index 6943e1b..0000000
--- a/samples/sdk-simplepanowidget/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<resources>
- <string name="title">Machu Picchu\nWorld Heritage Site</string>
- <string name="subtitle">The world-famous citadel of the Andes</string>
- <string name="paragraph1">Machu Picchu is an Incan citadel set high in the Andes Mountains in
- Peru, above the Urubamba River valley.</string>
-
- <string name="image_caption">A 360 panoramic view of Machu Picchu</string>
-
- <string name="paragraph2">It is situated on a mountain ridge above the Sacred Valley which is 80
- kilometres (50 mi) northwest of Cuzco and through which the Urubamba River flows.
- Most archaeologists believe that Machu Picchu was built as an estate for the Inca emperor
- Pachacuti (1438–1472). Often mistakenly referred to as the Lost City of the Incas,
- it is the most familiar icon of Inca civilization.
-
-\n\nThe Incas built the estate around 1450, but abandoned it a century later at the time of the
- Spanish Conquest. Although known locally, it was not known to the Spanish during the colonial
- period and remained unknown to the outside world before being brought to international attention
- in 1911 by the American historian Hiram Bingham. Most of the outlying buildings have been
- reconstructed in order to give tourists a better idea of what the structures originally
- looked like. By 1976, 30% of Machu Picchu had been restored; restoration continues today.
-
-\n\nMachu Picchu was declared a Peruvian Historical Sanctuary in 1981 and a UNESCO World Heritage
- Site in 1983. In 2007, Machu Picchu was voted one of the New Seven Wonders of the World in a
- worldwide Internet poll.
- </string>
-
- <string name="source">Source <a href="https://en.wikipedia.org/wiki/Machu_Picchu">Wikipedia</a></string>
-</resources>
diff --git a/samples/sdk-simplepanowidget/src/main/res/values/styles.xml b/samples/sdk-simplepanowidget/src/main/res/values/styles.xml
deleted file mode 100644
index a9205c8..0000000
--- a/samples/sdk-simplepanowidget/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android">
- <style name="ContentText">
- <item name="android:layout_width">wrap_content</item>
- <item name="android:layout_height">wrap_content</item>
- <item name="android:layout_margin">5dip</item>
- </style>
-</resources>
\ No newline at end of file
diff --git a/samples/sdk-simplevideowidget/build.gradle b/samples/sdk-simplevideowidget/build.gradle
deleted file mode 100644
index edbb934..0000000
--- a/samples/sdk-simplevideowidget/build.gradle
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2017 Google Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-apply plugin: 'com.android.application'
-
-android {
- compileSdkVersion 26
-
- defaultConfig {
- minSdkVersion 19
- targetSdkVersion 22
- versionCode 1
- versionName "1.0"
- }
-
- buildTypes {
- release {
- minifyEnabled true
- proguardFiles.add(file('../../proguard-gvr.txt'))
- }
-
- }
-}
-
-dependencies {
- compile 'com.google.vr:sdk-videowidget:1.180.0'
-}
diff --git a/samples/sdk-simplevideowidget/src/main/AndroidManifest.xml b/samples/sdk-simplevideowidget/src/main/AndroidManifest.xml
deleted file mode 100644
index 9665766..0000000
--- a/samples/sdk-simplevideowidget/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.google.vr.sdk.samples.simplevideowidget"
- android:versionCode="180905036"
- android:versionName="1.180.0">
-
- <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="22" />
- <uses-feature android:glEsVersion="0x00020000" android:required="true" />
-
- <!-- The app has largeHeap enabled which is required for loading large files. -->
- <application android:label="SimpleVrVideoActivity"
- android:largeHeap="true"
- android:theme="@android:style/Theme.Holo.Light">
- <!-- This demo is singleTask since it makes launching via custom adb intents easier. -->
- <activity android:name=".SimpleVrVideoActivity"
- android:launchMode="singleTask">
- <intent-filter>
- <!-- Primary intent when launching from the home screen -->
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- <category android:name="com.google.intent.category.CARDBOARD" />
- </intent-filter>
- </activity>
- </application>
-
- <!-- These permissions are used by Google VR SDK to get the best Google VR headset profiles. !-->
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
-</manifest>
diff --git a/samples/sdk-simplevideowidget/src/main/assets/README.md b/samples/sdk-simplevideowidget/src/main/assets/README.md
deleted file mode 100644
index 2a441ed..0000000
--- a/samples/sdk-simplevideowidget/src/main/assets/README.md
+++ /dev/null
@@ -1,16 +0,0 @@
-These videos are encoded in various formats supported by **VrVideoView**. See
-the javadoc for **sdk-simplevideowidget**'s **SimpleVrVideoActivity** class for
-information on how to view these videos.
-
-* **congo.mp4** is the default video used by **sdk-simplevideowidget**. It is an
-equirectangular projection with **top-bottom** stereo.
-
-* **sphericalv2.mp4** is a [Spherical Format](https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md)
-video with **top-bottom** stereo.
-
-* **hls/iceland0.ts** and **iceland.m3u8** are part of an [HLS](https://en.wikipedia.org/wiki/HTTP_Live_Streaming)
-video using equirectangular projection with **top-bottom** stereo.
-
-* **dash/congo_dash.mpd** and other **dash/congo_XXX** files are part of a
-[DASH](https://en.wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP)
-video. The video uses equirectangular projection with **top-bottom** stereo.
diff --git a/samples/sdk-simplevideowidget/src/main/assets/congo.mp4 b/samples/sdk-simplevideowidget/src/main/assets/congo.mp4
deleted file mode 100644
index 7ef7d45..0000000
--- a/samples/sdk-simplevideowidget/src/main/assets/congo.mp4
+++ /dev/null
Binary files differ
diff --git a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_audio_segment_1.m4s b/samples/sdk-simplevideowidget/src/main/assets/dash/congo_audio_segment_1.m4s
deleted file mode 100644
index e041498..0000000
--- a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_audio_segment_1.m4s
+++ /dev/null
Binary files differ
diff --git a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_audio_segment_2.m4s b/samples/sdk-simplevideowidget/src/main/assets/dash/congo_audio_segment_2.m4s
deleted file mode 100644
index b98dadd..0000000
--- a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_audio_segment_2.m4s
+++ /dev/null
Binary files differ
diff --git a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_audio_segment_3.m4s b/samples/sdk-simplevideowidget/src/main/assets/dash/congo_audio_segment_3.m4s
deleted file mode 100644
index f6718b6..0000000
--- a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_audio_segment_3.m4s
+++ /dev/null
Binary files differ
diff --git a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_audio_segment_init.mp4 b/samples/sdk-simplevideowidget/src/main/assets/dash/congo_audio_segment_init.mp4
deleted file mode 100644
index 34af4fa..0000000
--- a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_audio_segment_init.mp4
+++ /dev/null
Binary files differ
diff --git a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_dash.mpd b/samples/sdk-simplevideowidget/src/main/assets/dash/congo_dash.mpd
deleted file mode 100644
index 5c56794..0000000
--- a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_dash.mpd
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!-- MPD file Generated with GPAC version 0.6.1-rev14-g8eb0297-master at 2017-01-31T19:09:56.548Z-->
-<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500S" type="static" mediaPresentationDuration="PT0H0M12.500S" maxSegmentDuration="PT0H0M4.000S" profiles="urn:mpeg:dash:profile:full:2011">
- <ProgramInformation moreInformationURL="http://gpac.sourceforge.net">
- <Title>output_dash.mpd generated by GPAC</Title>
- </ProgramInformation>
-
- <Period duration="PT0H0M12.500S">
- <AdaptationSet segmentAlignment="true" maxWidth="1920" maxHeight="1084" maxFrameRate="24" par="1920:1084" lang="und">
- <Representation id="1" mimeType="video/mp4" codecs="avc3.42c028" width="1920" height="1084" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="1737091">
- <SegmentList timescale="24000" duration="96000">
- <Initialization sourceURL="congo_video_segment_init.mp4"/>
- <SegmentURL media="congo_video_segment_1.m4s"/>
- <SegmentURL media="congo_video_segment_2.m4s"/>
- <SegmentURL media="congo_video_segment_3.m4s"/>
- <SegmentURL media="congo_video_segment_4.m4s"/>
- </SegmentList>
- </Representation>
- </AdaptationSet>
- <AdaptationSet segmentAlignment="true" lang="eng">
- <Representation id="1" mimeType="audio/mp4" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1" bandwidth="177900">
- <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
- <SegmentList timescale="48000" duration="192000">
- <Initialization sourceURL="congo_audio_segment_init.mp4"/>
- <SegmentURL media="congo_audio_segment_1.m4s"/>
- <SegmentURL media="congo_audio_segment_2.m4s"/>
- <SegmentURL media="congo_audio_segment_3.m4s"/>
- </SegmentList>
- </Representation>
- </AdaptationSet>
- </Period>
-</MPD>
\ No newline at end of file
diff --git a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_video_segment_1.m4s b/samples/sdk-simplevideowidget/src/main/assets/dash/congo_video_segment_1.m4s
deleted file mode 100644
index 56226a0..0000000
--- a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_video_segment_1.m4s
+++ /dev/null
Binary files differ
diff --git a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_video_segment_2.m4s b/samples/sdk-simplevideowidget/src/main/assets/dash/congo_video_segment_2.m4s
deleted file mode 100644
index a202f7f..0000000
--- a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_video_segment_2.m4s
+++ /dev/null
Binary files differ
diff --git a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_video_segment_3.m4s b/samples/sdk-simplevideowidget/src/main/assets/dash/congo_video_segment_3.m4s
deleted file mode 100644
index 374bc96..0000000
--- a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_video_segment_3.m4s
+++ /dev/null
Binary files differ
diff --git a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_video_segment_4.m4s b/samples/sdk-simplevideowidget/src/main/assets/dash/congo_video_segment_4.m4s
deleted file mode 100644
index 8e04928..0000000
--- a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_video_segment_4.m4s
+++ /dev/null
Binary files differ
diff --git a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_video_segment_init.mp4 b/samples/sdk-simplevideowidget/src/main/assets/dash/congo_video_segment_init.mp4
deleted file mode 100644
index cdb0c34..0000000
--- a/samples/sdk-simplevideowidget/src/main/assets/dash/congo_video_segment_init.mp4
+++ /dev/null
Binary files differ
diff --git a/samples/sdk-simplevideowidget/src/main/assets/hls/iceland.m3u8 b/samples/sdk-simplevideowidget/src/main/assets/hls/iceland.m3u8
deleted file mode 100644
index 17ef800..0000000
--- a/samples/sdk-simplevideowidget/src/main/assets/hls/iceland.m3u8
+++ /dev/null
@@ -1,7 +0,0 @@
-#EXTM3U
-#EXT-X-VERSION:3
-#EXT-X-TARGETDURATION:3
-#EXT-X-MEDIA-SEQUENCE:0
-#EXTINF:2.969633,
-iceland0.ts
-#EXT-X-ENDLIST
diff --git a/samples/sdk-simplevideowidget/src/main/assets/hls/iceland0.ts b/samples/sdk-simplevideowidget/src/main/assets/hls/iceland0.ts
deleted file mode 100644
index 01ac7cc..0000000
--- a/samples/sdk-simplevideowidget/src/main/assets/hls/iceland0.ts
+++ /dev/null
Binary files differ
diff --git a/samples/sdk-simplevideowidget/src/main/assets/sphericalv2.mp4 b/samples/sdk-simplevideowidget/src/main/assets/sphericalv2.mp4
deleted file mode 100644
index 602228e..0000000
--- a/samples/sdk-simplevideowidget/src/main/assets/sphericalv2.mp4
+++ /dev/null
Binary files differ
diff --git a/samples/sdk-simplevideowidget/src/main/java/com/google/vr/sdk/samples/simplevideowidget/SimpleVrVideoActivity.java b/samples/sdk-simplevideowidget/src/main/java/com/google/vr/sdk/samples/simplevideowidget/SimpleVrVideoActivity.java
deleted file mode 100644
index 05f7716..0000000
--- a/samples/sdk-simplevideowidget/src/main/java/com/google/vr/sdk/samples/simplevideowidget/SimpleVrVideoActivity.java
+++ /dev/null
@@ -1,401 +0,0 @@
-/*
- * Copyright 2017 Google Inc. All Rights Reserved.
-
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.vr.sdk.samples.simplevideowidget;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.text.Html;
-import android.text.method.LinkMovementMethod;
-import android.util.Log;
-import android.util.Pair;
-import android.view.View;
-import android.widget.ImageButton;
-import android.widget.SeekBar;
-import android.widget.TextView;
-import android.widget.Toast;
-import com.google.vr.sdk.widgets.video.VrVideoEventListener;
-import com.google.vr.sdk.widgets.video.VrVideoView;
-import com.google.vr.sdk.widgets.video.VrVideoView.Options;
-import java.io.IOException;
-
-/**
- * A test activity that renders a 360 video using {@link VrVideoView}.
- * It loads the congo video from app's assets by default. User can use it to load any video files
- * using adb shell commands such as:
- *
- * <p>Video from asset folder
- * adb shell am start -a android.intent.action.VIEW \
- * -n com.google.vr.sdk.samples.simplevideowidget/.SimpleVrVideoActivity \
- * -d "file:///android_asset/congo.mp4"
- *
- * <p>Video located on the phone's SD card.
- * adb shell am start -a android.intent.action.VIEW \
- * -n com.google.vr.sdk.samples.simplevideowidget/.SimpleVrVideoActivity \
- * -d /sdcard/FILENAME.MP4
- *
- * <p>Video hosted on a website:
- * adb shell am start -a android.intent.action.VIEW \
- * -n com.google.vr.sdk.samples.simplevideowidget/.SimpleVrVideoActivity \
- * -d "https://EXAMPLE.COM/FILENAME.MP4"
- *
- * <p>To load HLS files add "--ei inputFormat 2" to pass in an integer extra which will set
- * VrVideoView.Options.inputFormat to FORMAT_HLS. e.g.
- * adb shell am start -a android.intent.action.VIEW \
- * -n com.google.vr.sdk.samples.simplevideowidget/.SimpleVrVideoActivity \
- * -d "file:///android_asset/hls/iceland.m3u8" \
- * --ei inputFormat 2 --ei inputType 2
- *
- * <p>To load MPEG-DASH files add "--ei inputFormat 3" to pass in an integer extra which will set
- * VrVideoView.Options.inputFormat to FORMAT_DASH. e.g.
- * adb shell am start -a android.intent.action.VIEW \
- * -n com.google.vr.sdk.samples.simplevideowidget/.SimpleVrVideoActivity \
- * -d "file:///android_asset/dash/congo_dash.mpd" \
- * --ei inputFormat 3 --ei inputType 2
- *
- * <p>To specify that the video is of type stereo over under (has images for left and right eyes),
- * add "--ei inputType 2" to pass in an integer extra which will set VrVideoView.Options.inputType
- * to TYPE_STEREO_OVER_UNDER. This can be combined with other extras, e.g:
- * adb shell am start -a android.intent.action.VIEW \
- * -n com.google.vr.sdk.samples.simplevideowidget/.SimpleVrVideoActivity \
- * -d "https://EXAMPLE.COM/FILENAME.MP4" \
- * --ei inputType 2
- */
-public class SimpleVrVideoActivity extends Activity {
- private static final String TAG = SimpleVrVideoActivity.class.getSimpleName();
-
- /**
- * Preserve the video's state when rotating the phone.
- */
- private static final String STATE_IS_PAUSED = "isPaused";
- private static final String STATE_PROGRESS_TIME = "progressTime";
- /**
- * The video duration doesn't need to be preserved, but it is saved in this example. This allows
- * the seekBar to be configured during {@link #onRestoreInstanceState(Bundle)} rather than waiting
- * for the video to be reloaded and analyzed. This avoid UI jank.
- */
- private static final String STATE_VIDEO_DURATION = "videoDuration";
-
- /**
- * Arbitrary constants and variable to track load status. In this example, this variable should
- * only be accessed on the UI thread. In a real app, this variable would be code that performs
- * some UI actions when the video is fully loaded.
- */
- public static final int LOAD_VIDEO_STATUS_UNKNOWN = 0;
- public static final int LOAD_VIDEO_STATUS_SUCCESS = 1;
- public static final int LOAD_VIDEO_STATUS_ERROR = 2;
-
- private int loadVideoStatus = LOAD_VIDEO_STATUS_UNKNOWN;
-
- /** Tracks the file to be loaded across the lifetime of this app. **/
- private Uri fileUri;
-
- /** Configuration information for the video. **/
- private Options videoOptions = new Options();
-
- private VideoLoaderTask backgroundVideoLoaderTask;
-
- /**
- * The video view and its custom UI elements.
- */
- protected VrVideoView videoWidgetView;
-
- /**
- * Seeking UI & progress indicator. The seekBar's progress value represents milliseconds in the
- * video.
- */
- private SeekBar seekBar;
- private TextView statusText;
-
- private ImageButton volumeToggle;
- private boolean isMuted;
-
- /**
- * By default, the video will start playing as soon as it is loaded. This can be changed by using
- * {@link VrVideoView#pauseVideo()} after loading the video.
- */
- private boolean isPaused = false;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main_layout);
-
- seekBar = (SeekBar) findViewById(R.id.seek_bar);
- seekBar.setOnSeekBarChangeListener(new SeekBarListener());
- statusText = (TextView) findViewById(R.id.status_text);
-
- // Make the source link clickable.
- TextView sourceText = (TextView) findViewById(R.id.source);
- sourceText.setText(Html.fromHtml(getString(R.string.source)));
- sourceText.setMovementMethod(LinkMovementMethod.getInstance());
-
- // Bind input and output objects for the view.
- videoWidgetView = (VrVideoView) findViewById(R.id.video_view);
- videoWidgetView.setEventListener(new ActivityEventListener());
-
- volumeToggle = (ImageButton) findViewById(R.id.volume_toggle);
- volumeToggle.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- setIsMuted(!isMuted);
- }
- });
-
- loadVideoStatus = LOAD_VIDEO_STATUS_UNKNOWN;
-
- // Initial launch of the app or an Activity recreation due to rotation.
- handleIntent(getIntent());
- }
-
- /**
- * Called when the Activity is already running and it's given a new intent.
- */
- @Override
- protected void onNewIntent(Intent intent) {
- Log.i(TAG, this.hashCode() + ".onNewIntent()");
- // Save the intent. This allows the getIntent() call in onCreate() to use this new Intent during
- // future invocations.
- setIntent(intent);
- // Load the new video.
- handleIntent(intent);
- }
-
- public int getLoadVideoStatus() {
- return loadVideoStatus;
- }
-
- private void setIsMuted(boolean isMuted) {
- this.isMuted = isMuted;
- volumeToggle.setImageResource(isMuted ? R.drawable.volume_off : R.drawable.volume_on);
- videoWidgetView.setVolume(isMuted ? 0.0f : 1.0f);
- }
-
- public boolean isMuted() {
- return isMuted;
- }
-
- /**
- * Load custom videos based on the Intent or load the default video. See the Javadoc for this
- * class for information on generating a custom intent via adb.
- */
- private void handleIntent(Intent intent) {
- // Determine if the Intent contains a file to load.
- if (Intent.ACTION_VIEW.equals(intent.getAction())) {
- Log.i(TAG, "ACTION_VIEW Intent received");
-
- fileUri = intent.getData();
- if (fileUri == null) {
- Log.w(TAG, "No data uri specified. Use \"-d /path/filename\".");
- } else {
- Log.i(TAG, "Using file " + fileUri.toString());
- }
-
- videoOptions.inputFormat = intent.getIntExtra("inputFormat", Options.FORMAT_DEFAULT);
- videoOptions.inputType = intent.getIntExtra("inputType", Options.TYPE_MONO);
- } else {
- Log.i(TAG, "Intent is not ACTION_VIEW. Using the default video.");
- fileUri = null;
- }
-
- // Load the bitmap in a background thread to avoid blocking the UI thread. This operation can
- // take 100s of milliseconds.
- if (backgroundVideoLoaderTask != null) {
- // Cancel any task from a previous intent sent to this activity.
- backgroundVideoLoaderTask.cancel(true);
- }
- backgroundVideoLoaderTask = new VideoLoaderTask();
- backgroundVideoLoaderTask.execute(Pair.create(fileUri, videoOptions));
- }
-
- @Override
- public void onSaveInstanceState(Bundle savedInstanceState) {
- savedInstanceState.putLong(STATE_PROGRESS_TIME, videoWidgetView.getCurrentPosition());
- savedInstanceState.putLong(STATE_VIDEO_DURATION, videoWidgetView.getDuration());
- savedInstanceState.putBoolean(STATE_IS_PAUSED, isPaused);
- super.onSaveInstanceState(savedInstanceState);
- }
-
- @Override
- public void onRestoreInstanceState(Bundle savedInstanceState) {
- super.onRestoreInstanceState(savedInstanceState);
-
- long progressTime = savedInstanceState.getLong(STATE_PROGRESS_TIME);
- videoWidgetView.seekTo(progressTime);
- seekBar.setMax((int) savedInstanceState.getLong(STATE_VIDEO_DURATION));
- seekBar.setProgress((int) progressTime);
-
- isPaused = savedInstanceState.getBoolean(STATE_IS_PAUSED);
- if (isPaused) {
- videoWidgetView.pauseVideo();
- }
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- // Prevent the view from rendering continuously when in the background.
- videoWidgetView.pauseRendering();
- // If the video is playing when onPause() is called, the default behavior will be to pause
- // the video and keep it paused when onResume() is called.
- isPaused = true;
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- // Resume the 3D rendering.
- videoWidgetView.resumeRendering();
- // Update the text to account for the paused video in onPause().
- updateStatusText();
- }
-
- @Override
- protected void onDestroy() {
- // Destroy the widget and free memory.
- videoWidgetView.shutdown();
- super.onDestroy();
- }
-
- private void togglePause() {
- if (isPaused) {
- videoWidgetView.playVideo();
- } else {
- videoWidgetView.pauseVideo();
- }
- isPaused = !isPaused;
- updateStatusText();
- }
-
- private void updateStatusText() {
- StringBuilder status = new StringBuilder();
- status.append(isPaused ? "Paused: " : "Playing: ");
- status.append(String.format("%.2f", videoWidgetView.getCurrentPosition() / 1000f));
- status.append(" / ");
- status.append(videoWidgetView.getDuration() / 1000f);
- status.append(" seconds.");
- statusText.setText(status.toString());
- }
-
- /**
- * When the user manipulates the seek bar, update the video position.
- */
- private class SeekBarListener implements SeekBar.OnSeekBarChangeListener {
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
- if (fromUser) {
- videoWidgetView.seekTo(progress);
- updateStatusText();
- } // else this was from the ActivityEventHandler.onNewFrame()'s seekBar.setProgress update.
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) { }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) { }
- }
-
- /**
- * Listen to the important events from widget.
- */
- private class ActivityEventListener extends VrVideoEventListener {
- /**
- * Called by video widget on the UI thread when it's done loading the video.
- */
- @Override
- public void onLoadSuccess() {
- Log.i(TAG, "Successfully loaded video " + videoWidgetView.getDuration());
- loadVideoStatus = LOAD_VIDEO_STATUS_SUCCESS;
- seekBar.setMax((int) videoWidgetView.getDuration());
- updateStatusText();
- }
-
- /**
- * Called by video widget on the UI thread on any asynchronous error.
- */
- @Override
- public void onLoadError(String errorMessage) {
- // An error here is normally due to being unable to decode the video format.
- loadVideoStatus = LOAD_VIDEO_STATUS_ERROR;
- Toast.makeText(
- SimpleVrVideoActivity.this, "Error loading video: " + errorMessage, Toast.LENGTH_LONG)
- .show();
- Log.e(TAG, "Error loading video: " + errorMessage);
- }
-
- @Override
- public void onClick() {
- togglePause();
- }
-
- /**
- * Update the UI every frame.
- */
- @Override
- public void onNewFrame() {
- updateStatusText();
- seekBar.setProgress((int) videoWidgetView.getCurrentPosition());
- }
-
- /**
- * Make the video play in a loop. This method could also be used to move to the next video in
- * a playlist.
- */
- @Override
- public void onCompletion() {
- videoWidgetView.seekTo(0);
- }
- }
-
- /**
- * Helper class to manage threading.
- */
- class VideoLoaderTask extends AsyncTask<Pair<Uri, Options>, Void, Boolean> {
- @Override
- protected Boolean doInBackground(Pair<Uri, Options>... fileInformation) {
- try {
- if (fileInformation == null || fileInformation.length < 1
- || fileInformation[0] == null || fileInformation[0].first == null) {
- // No intent was specified, so we default to playing the local stereo-over-under video.
- Options options = new Options();
- options.inputType = Options.TYPE_STEREO_OVER_UNDER;
- videoWidgetView.loadVideoFromAsset("congo.mp4", options);
- } else {
- videoWidgetView.loadVideo(fileInformation[0].first, fileInformation[0].second);
- }
- } catch (IOException e) {
- // An error here is normally due to being unable to locate the file.
- loadVideoStatus = LOAD_VIDEO_STATUS_ERROR;
- // Since this is a background thread, we need to switch to the main thread to show a toast.
- videoWidgetView.post(new Runnable() {
- @Override
- public void run() {
- Toast
- .makeText(SimpleVrVideoActivity.this, "Error opening file. ", Toast.LENGTH_LONG)
- .show();
- }
- });
- Log.e(TAG, "Could not open video: " + e);
- }
-
- return true;
- }
- }
-}
diff --git a/samples/sdk-simplevideowidget/src/main/res/drawable-hdpi/volume_off.png b/samples/sdk-simplevideowidget/src/main/res/drawable-hdpi/volume_off.png
deleted file mode 100644
index a069709..0000000
--- a/samples/sdk-simplevideowidget/src/main/res/drawable-hdpi/volume_off.png
+++ /dev/null
Binary files differ
diff --git a/samples/sdk-simplevideowidget/src/main/res/drawable-hdpi/volume_on.png b/samples/sdk-simplevideowidget/src/main/res/drawable-hdpi/volume_on.png
deleted file mode 100644
index 49eb8fc..0000000
--- a/samples/sdk-simplevideowidget/src/main/res/drawable-hdpi/volume_on.png
+++ /dev/null
Binary files differ
diff --git a/samples/sdk-simplevideowidget/src/main/res/layout/main_layout.xml b/samples/sdk-simplevideowidget/src/main/res/layout/main_layout.xml
deleted file mode 100644
index 6c57182..0000000
--- a/samples/sdk-simplevideowidget/src/main/res/layout/main_layout.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@android:color/white">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@+id/main_layout"
- android:padding="10dip"
- android:orientation="vertical" >
-
- <TextView
- android:id="@+id/title"
- style="@style/ContentText"
- android:textSize="@dimen/title_text_size"
- android:textStyle="bold"
- android:textColor="@color/textDark"
- android:text="@string/title" />
-
- <TextView
- android:id="@+id/subtitle"
- style="@style/ContentText"
- android:textColor="@color/textLight"
- android:textSize="@dimen/caption_text_size"
- android:text="@string/subtitle" />
-
- <TextView
- android:id="@+id/paragraph1"
- style="@style/ContentText"
- android:textColor="@color/textDark"
- android:textSize="@dimen/paragragh_text_size"
- android:text="@string/paragraph1" />
-
- <com.google.vr.sdk.widgets.video.VrVideoView
- android:id="@+id/video_view"
- android:layout_width="match_parent"
- android:scrollbars="@null"
- android:layout_height="250dip"/>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal" >
- <!-- Seeking UI & progress indicator.-->
- <SeekBar
- android:id="@+id/seek_bar"
- style="?android:attr/progressBarStyleHorizontal"
- android:layout_height="32dp"
- android:layout_weight="8"
- android:layout_width="0dp"/>
- <ImageButton
- android:background="@android:color/transparent"
- android:id="@+id/volume_toggle"
- android:paddingTop="4dp"
- android:paddingStart="0dp"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:src="@drawable/volume_on"/>
- </LinearLayout>
- <TextView
- android:id="@+id/status_text"
- android:text="Loading Video..."
- android:layout_centerInParent="true"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:textSize="@dimen/caption_text_size"
- android:paddingStart="32dp"
- android:paddingEnd="32dp"/>
-
- <TextView
- android:id="@+id/paragraph2"
- style="@style/ContentText"
- android:textColor="@color/textDark"
- android:textSize="@dimen/paragragh_text_size"
- android:text="@string/paragraph2" />
-
- <TextView
- android:id="@+id/source"
- style="@style/ContentText"
- android:textColor="@color/textDark"
- android:textSize="@dimen/paragragh_text_size"/>
- </LinearLayout>
-</ScrollView>
diff --git a/samples/sdk-simplevideowidget/src/main/res/values/colors.xml b/samples/sdk-simplevideowidget/src/main/res/values/colors.xml
deleted file mode 100644
index 3fcce68..0000000
--- a/samples/sdk-simplevideowidget/src/main/res/values/colors.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<resources>
- <color name="textDark">#222</color>
- <color name="textLight">#555</color>
-</resources>
diff --git a/samples/sdk-simplevideowidget/src/main/res/values/dimens.xml b/samples/sdk-simplevideowidget/src/main/res/values/dimens.xml
deleted file mode 100644
index adf7bc1..0000000
--- a/samples/sdk-simplevideowidget/src/main/res/values/dimens.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <dimen name="title_text_size">24dip</dimen>
- <dimen name="caption_text_size">12dip</dimen>
- <dimen name="paragragh_text_size">15dip</dimen>
-</resources>
diff --git a/samples/sdk-simplevideowidget/src/main/res/values/strings.xml b/samples/sdk-simplevideowidget/src/main/res/values/strings.xml
deleted file mode 100644
index deb08a6..0000000
--- a/samples/sdk-simplevideowidget/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<resources>
- <string name="title">Gorillas</string>
- <string name="subtitle">The great apes from Central Africa</string>
- <string name="paragraph1">Gorillas are ground-dwelling, predominantly
- herbivorous apes that inhabit the forests of central Africa.
-
-\n\nThe 360 video below shows gorillas in the Congo rainforest.
- </string>
-
- <string name="paragraph2">The eponymous genus Gorilla is divided into two
- species: the eastern gorillas and the western gorillas, and either four or
- five subspecies. They are the largest living primates by physical size.
-
-\n\nThe DNA of gorillas is highly similar to that of humans, from 95–99%
- depending on what is counted, and they are the next closest living relatives
- to humans after the chimpanzees and bonobos.
-
-\n\nGorillas\' natural habitats cover tropical or subtropical forests in Africa.
- Although their range covers a small percentage of Africa, gorillas cover a
- wide range of elevations. The mountain gorilla inhabits the Albertine Rift
- montane cloud forests of the Virunga Volcanoes, ranging in altitude
- from 2,200–4,300 metres (7,200–14,100 ft). Lowland gorillas live in dense
- forests and lowland swamps and marshes as low as sea level, with western
- lowland gorillas living in Central West African countries and eastern lowland
- gorillas living in the Democratic Republic of the Congo near its border with Rwanda
- </string>
-
- <string name="source">Source <a href="https://en.wikipedia.org/wiki/Gorilla">Wikipedia</a></string>
-</resources>
diff --git a/samples/sdk-simplevideowidget/src/main/res/values/styles.xml b/samples/sdk-simplevideowidget/src/main/res/values/styles.xml
deleted file mode 100644
index 4d65fe2..0000000
--- a/samples/sdk-simplevideowidget/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android">
- <style name="ContentText">
- <item name="android:layout_width">wrap_content</item>
- <item name="android:layout_height">wrap_content</item>
- <item name="android:layout_margin">5dip</item>
- </style>
-</resources>
diff --git a/samples/sdk-video360/build.gradle b/samples/sdk-video360/build.gradle
index 4fb9dc7..1e1ddd9 100644
--- a/samples/sdk-video360/build.gradle
+++ b/samples/sdk-video360/build.gradle
@@ -35,7 +35,6 @@
}
dependencies {
- compile 'com.android.support:appcompat-v7:26.1.0'
- compile 'com.google.vr:sdk-base:1.180.0'
- compile 'com.google.vr:sdk-controller:1.180.0'
+ implementation 'com.android.support:appcompat-v7:26.1.0'
+ implementation 'com.google.vr:sdk-base:1.190.0'
}
diff --git a/samples/sdk-video360/src/main/AndroidManifest.xml b/samples/sdk-video360/src/main/AndroidManifest.xml
index 4c2997a..78cdf81 100644
--- a/samples/sdk-video360/src/main/AndroidManifest.xml
+++ b/samples/sdk-video360/src/main/AndroidManifest.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.vr.sdk.samples.video360"
- android:versionCode="180905036"
- android:versionName="1.180.0">
+ android:versionCode="181016016"
+ android:versionName="1.190.0">
<!-- The VR app is Daydream-only since it uses the controller. -->
<uses-sdk android:minSdkVersion="24" android:targetSdkVersion="24"/>
diff --git a/samples/sdk-video360/src/main/java/com/google/vr/sdk/samples/video360/VrVideoActivity.java b/samples/sdk-video360/src/main/java/com/google/vr/sdk/samples/video360/VrVideoActivity.java
index 1d7878e..64b6dba 100644
--- a/samples/sdk-video360/src/main/java/com/google/vr/sdk/samples/video360/VrVideoActivity.java
+++ b/samples/sdk-video360/src/main/java/com/google/vr/sdk/samples/video360/VrVideoActivity.java
@@ -298,7 +298,7 @@
renderer.scene.setControllerOrientation(controller.orientation);
- if (!touchpadDown && controller.clickButtonState) {
+ if (!touchpadDown && (controller.clickButtonState || controller.triggerButtonState)) {
renderer.scene.handleClick();
}
@@ -306,7 +306,7 @@
renderer.scene.toggleUi();
}
- touchpadDown = controller.clickButtonState;
+ touchpadDown = controller.clickButtonState || controller.triggerButtonState;
appButtonDown = controller.appButtonState;
}
}
diff --git a/samples/sdk-videoplayer/build.gradle b/samples/sdk-videoplayer/build.gradle
index 1bf2fed..7395ceb 100644
--- a/samples/sdk-videoplayer/build.gradle
+++ b/samples/sdk-videoplayer/build.gradle
@@ -35,9 +35,9 @@
}
dependencies {
- compile 'com.google.android.exoplayer:exoplayer:2.6.1'
- compile 'com.google.android.exoplayer:extension-gvr:2.6.1'
+ implementation 'com.google.android.exoplayer:exoplayer:2.6.1'
+ implementation 'com.google.android.exoplayer:extension-gvr:2.6.1'
- compile 'com.google.vr:sdk-base:1.180.0'
- compile 'com.google.vr:sdk-common:1.180.0'
+ implementation 'com.google.vr:sdk-audio:1.190.0'
+ implementation 'com.google.vr:sdk-base:1.190.0'
}
diff --git a/samples/sdk-videoplayer/src/main/AndroidManifest.xml b/samples/sdk-videoplayer/src/main/AndroidManifest.xml
index 8ceb316..713d7ca 100644
--- a/samples/sdk-videoplayer/src/main/AndroidManifest.xml
+++ b/samples/sdk-videoplayer/src/main/AndroidManifest.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.vr.sdk.samples.videoplayer"
- android:versionCode="180905036"
- android:versionName="1.180.0">
+ android:versionCode="181016016"
+ android:versionName="1.190.0">
<!-- The video API works on Daydream-ready devices with Asynchronous
Reprojection on Android N+ and OpenGL ES 3+ -->
diff --git a/settings.gradle b/settings.gradle
index f8e960e..355f446 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -4,8 +4,6 @@
// Explicitly load all the SDK samples using their full path.
include ':samples:sdk-controllerclient'
include ':samples:sdk-hellovr'
-include ':samples:sdk-simplepanowidget'
-include ':samples:sdk-simplevideowidget'
include ':samples:sdk-video360'
include ':samples:sdk-videoplayer'