From 193263a07b2183618a36a63a600f4be3f079a052 Mon Sep 17 00:00:00 2001 From: Mauricio Vives Date: Thu, 13 Jun 2024 11:52:48 -0400 Subject: [PATCH] Basic support for ray tracing with Metal on macOS Update externals build script to build Slang locally Fix Mac Build (#180) Simplify Aurora MacOS Build (#181) Script fixes Code fixes Doc updates Fix clang regression Clean up script Support interactive display in Plasma on macOS (#184) Restores Slang shader files and fixes HgiRenderer (#187) Vulkan backend fixes (#188) Resize window within macbook's screen Fix Windows tests Switch to public USD Add sample model --- .gitignore | 3 + Applications/Assets/CornellBoxMetal.mtl | 72 + Applications/Assets/CornellBoxMetal.obj | 14564 ++++++++++++++++ Applications/Plasma/AppDelegate.h | 8 + Applications/Plasma/AppDelegate.m | 22 + Applications/Plasma/CMakeLists.txt | 122 +- Applications/Plasma/Libraries.cpp | 7 +- Applications/Plasma/Main.storyboard | 719 + Applications/Plasma/PerformanceMonitor.h | 2 +- Applications/Plasma/Plasma.cpp | 196 +- Applications/Plasma/Plasma.h | 61 +- Applications/Plasma/PlasmaView.h | 10 + Applications/Plasma/PlasmaView.mm | 21 + Applications/Plasma/PlasmaViewController.h | 10 + Applications/Plasma/PlasmaViewController.mm | 124 + Applications/Plasma/Renderer.h | 11 + Applications/Plasma/Renderer.mm | 134 + Applications/Plasma/ShaderTypes.h | 10 + Applications/Plasma/Shaders.metal | 39 + Applications/Plasma/info.plist.in | 45 + Applications/Plasma/pch.h | 14 +- CMakeLists.txt | 22 +- Doc/Build.md | 40 +- Libraries/Aurora/API/Aurora/Aurora.h | 2 + Libraries/Aurora/CMakeLists.txt | 32 +- Libraries/Aurora/Source/AssetManager.cpp | 2 +- Libraries/Aurora/Source/GeometryBase.cpp | 78 + Libraries/Aurora/Source/GeometryBase.h | 17 +- Libraries/Aurora/Source/HGI/HGIGeometry.cpp | 17 +- Libraries/Aurora/Source/HGI/HGIGeometry.h | 3 +- Libraries/Aurora/Source/HGI/HGILight.h | 2 +- Libraries/Aurora/Source/HGI/HGIMaterial.cpp | 2 +- Libraries/Aurora/Source/HGI/HGIRenderer.cpp | 55 +- Libraries/Aurora/Source/HGI/HGIScene.cpp | 278 +- Libraries/Aurora/Source/HGI/HGIScene.h | 10 +- .../Source/HGI/MetalShaders/header.metal | 133 + .../Source/HGI/MetalShaders/ray_gen.metal | 336 + .../Source/HGI/Shaders/Accumulation.glsl | 14 +- .../Source/HGI/Shaders/InstanceData.glsl | 22 +- .../Source/HGI/Shaders/PostProcessing.glsl | 29 +- Libraries/Aurora/Source/MaterialBase.cpp | 2 +- Libraries/Aurora/Source/MaterialBase.h | 2 +- .../Aurora/Source/MaterialDefinition.cpp | 2 +- Libraries/Aurora/Source/MaterialShader.cpp | 6 +- Libraries/Aurora/Source/MaterialShader.h | 6 +- .../Source/MaterialX/BSDFCodeGenerator.cpp | 24 +- .../Source/MaterialX/MaterialGenerator.cpp | 14 +- Libraries/Aurora/Source/RendererBase.cpp | 7 +- Libraries/Aurora/Source/RendererBase.h | 29 +- Libraries/Aurora/Source/SceneBase.cpp | 2 +- .../Source/Shaders/DefaultMaterial.slang | 13 +- .../DefaultMaterialUniformBuffer.slang | 114 +- .../Aurora/Source/Shaders/Geometry.slang | 2 + .../Shaders/GlobalBufferAccessors.slang | 55 +- .../Source/Shaders/GlobalPipelineState.slang | 21 +- .../Aurora/Source/Shaders/GroundPlane.slang | 2 - .../Shaders/InstancePipelineState.slang | 18 +- .../Source/Shaders/MainEntryPoints.slang | 22 +- .../Source/Shaders/PathTracingCommon.slang | 4 + Libraries/Aurora/Source/Transpiler.cpp | 19 +- Libraries/Aurora/Source/Transpiler.h | 7 +- Libraries/Aurora/Source/UniformBuffer.cpp | 1 + .../Foundation/API/Aurora/Foundation/Log.h | 5 +- .../Foundation/API/Aurora/Foundation/Timer.h | 4 +- .../API/Aurora/Foundation/Utilities.h | 6 + Libraries/HdAurora/HdAuroraImageCache.cpp | 4 +- README.md | 22 +- Scripts/Patches/USD.patch | 98 - Scripts/apple_utils.py | 219 + Scripts/cmake/modules/FindSlang.cmake | 8 +- Scripts/cmake/modules/FindTBB.cmake | 19 + Scripts/cmake/modules/Findpxr.cmake | 51 +- Scripts/cmake/toolbox.cmake | 22 +- Scripts/installExternals.py | 291 +- Scripts/installExternalsFunctions.py | 61 +- Scripts/minifyShadersFolder.py | 145 +- .../Assets/Textures/pretville_street_24k.exr | 3 - Tests/Aurora/CMakeLists.txt | 13 +- Tests/Aurora/Tests/TestImage.cpp | 22 +- Tests/Aurora/Tests/TestLight.cpp | 6 + Tests/Aurora/Tests/TestMaterial.cpp | 51 +- Tests/Aurora/Tests/TestPaths.cpp | 4 + Tests/Aurora/Tests/TestRenderer.cpp | 68 +- Tests/AuroraInternals/CMakeLists.txt | 3 + .../Common/TestMaterialGenerator.cpp | 6 + Tests/CMakeLists.txt | 8 + Tests/Foundation/CMakeLists.txt | 3 + Tests/HdAurora/CMakeLists.txt | 10 + Tests/HdAurora/Tests/TestStability.cpp | 19 - Tests/Helpers/AuroraTestHelpers.cpp | 2 +- 90 files changed, 18134 insertions(+), 699 deletions(-) create mode 100644 Applications/Assets/CornellBoxMetal.mtl create mode 100644 Applications/Assets/CornellBoxMetal.obj create mode 100644 Applications/Plasma/AppDelegate.h create mode 100644 Applications/Plasma/AppDelegate.m create mode 100644 Applications/Plasma/Main.storyboard create mode 100644 Applications/Plasma/PlasmaView.h create mode 100644 Applications/Plasma/PlasmaView.mm create mode 100644 Applications/Plasma/PlasmaViewController.h create mode 100644 Applications/Plasma/PlasmaViewController.mm create mode 100644 Applications/Plasma/Renderer.h create mode 100644 Applications/Plasma/Renderer.mm create mode 100644 Applications/Plasma/ShaderTypes.h create mode 100644 Applications/Plasma/Shaders.metal create mode 100644 Applications/Plasma/info.plist.in create mode 100644 Libraries/Aurora/Source/HGI/MetalShaders/header.metal create mode 100644 Libraries/Aurora/Source/HGI/MetalShaders/ray_gen.metal delete mode 100644 Scripts/Patches/USD.patch create mode 100644 Scripts/apple_utils.py delete mode 100644 Tests/Assets/Textures/pretville_street_24k.exr diff --git a/.gitignore b/.gitignore index 0aee38b..fbb8dc4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ # Ignore build directories. +build/ Build/ Build.*/ _build/ @@ -8,6 +9,8 @@ _externals/ # Ignore script generated files Scripts/cmake/externalsConfig.cmake __pycache__ +.DS_Store +.venv # Ignore IDE cache folders .vs/ diff --git a/Applications/Assets/CornellBoxMetal.mtl b/Applications/Assets/CornellBoxMetal.mtl new file mode 100644 index 0000000..711ab46 --- /dev/null +++ b/Applications/Assets/CornellBoxMetal.mtl @@ -0,0 +1,72 @@ +# Blender 4.2.0 MTL File: 'None' +# www.blender.org + +newmtl backWall.002 +Ns 10.000005 +Ka 1.000000 1.000000 1.000000 +Kd 0.725000 0.710000 0.680000 +Ks 0.000000 0.000000 0.000000 +Ke 0.000000 0.000000 0.000000 +Ni 1.000000 +d 1.000000 +illum 1 + +newmtl ceiling.002 +Ns 10.000005 +Ka 1.000000 1.000000 1.000000 +Kd 0.725000 0.710000 0.680000 +Ks 0.000000 0.000000 0.000000 +Ke 0.000000 0.000000 0.000000 +Ni 1.000000 +d 1.000000 +illum 1 + +newmtl floor.002 +Ns 10.000005 +Ka 1.000000 1.000000 1.000000 +Kd 0.725000 0.710000 0.680000 +Ks 0.000000 0.000000 0.000000 +Ke 0.000000 0.000000 0.000000 +Ni 1.000000 +d 1.000000 +illum 1 + +newmtl leftWall.002 +Ns 10.000005 +Ka 1.000000 1.000000 1.000000 +Kd 0.630000 0.065000 0.050000 +Ks 0.000000 0.000000 0.000000 +Ke 0.000000 0.000000 0.000000 +Ni 1.500000 +d 1.000000 +illum 1 + +newmtl light.002 +Ns 10.000005 +Ka 1.000000 1.000000 1.000000 +Kd 0.780000 0.780000 0.780000 +Ks 0.000000 0.000000 0.000000 +Ke 0.000000 0.000000 0.000000 +Ni 1.000000 +d 1.000000 +illum 1 + +newmtl rightWall.002 +Ns 10.000005 +Ka 1.000000 1.000000 1.000000 +Kd 0.140000 0.450000 0.091000 +Ks 0.000000 0.000000 0.000000 +Ke 0.000000 0.000000 0.000000 +Ni 1.500000 +d 1.000000 +illum 1 + +newmtl shortBox.002 +Ns 10.000005 +Ka 1.000000 1.000000 1.000000 +Kd 0.725000 0.710000 0.680000 +Ks 0.000000 0.000000 0.000000 +Ke 0.000000 0.000000 0.000000 +Ni 1.000000 +d 1.000000 +illum 1 diff --git a/Applications/Assets/CornellBoxMetal.obj b/Applications/Assets/CornellBoxMetal.obj new file mode 100644 index 0000000..0c658ff --- /dev/null +++ b/Applications/Assets/CornellBoxMetal.obj @@ -0,0 +1,14564 @@ +# Blender 4.2.0 +# www.blender.org +mtllib CornellBoxMetal.mtl +o CornellBox +v -1.010000 0.000000 0.990000 +v 1.000000 0.000000 0.990000 +v 1.000000 -0.000000 -1.040000 +v -0.990000 -0.000000 -1.040000 +v -1.020000 1.990000 0.990000 +v -1.020000 1.990000 -1.040000 +v 1.000000 1.990000 -1.040000 +v 1.000000 1.990000 0.990000 +v -0.990000 -0.000000 -1.040000 +v 1.000000 -0.000000 -1.040000 +v 1.000000 1.990000 -1.040000 +v -1.020000 1.990000 -1.040000 +v 1.000000 -0.000000 -1.040000 +v 1.000000 0.000000 0.990000 +v 1.000000 1.990000 0.990000 +v 1.000000 1.990000 -1.040000 +v -1.010000 0.000000 0.990000 +v -0.990000 -0.000000 -1.040000 +v -1.020000 1.990000 -1.040000 +v -1.020000 1.990000 0.990000 +v -0.240000 1.980000 0.160000 +v -0.240000 1.980000 -0.220000 +v 0.230000 1.980000 -0.220000 +v 0.230000 1.980000 0.160000 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -1.0000 -0.0000 -0.0000 +vn 0.9999 0.0100 0.0049 +s 0 +g CornellBox_floor.002 +usemtl floor.002 +f 1//1 2//1 3//1 4//1 +g CornellBox_ceiling.002 +usemtl ceiling.002 +f 5//2 6//2 7//2 8//2 +g CornellBox_backWall.002 +usemtl backWall.002 +f 9//3 10//3 11//3 12//3 +g CornellBox_rightWall.002 +usemtl rightWall.002 +f 13//4 14//4 15//4 16//4 +g CornellBox_leftWall.002 +usemtl leftWall.002 +f 17//5 18//5 19//5 20//5 +g CornellBox_light.002 +usemtl light.002 +f 21//2 22//2 23//2 24//2 +o Cube +v -0.090032 0.000000 0.150303 +v -0.090032 0.600000 0.150303 +v -0.439748 0.000000 0.637847 +v -0.439748 0.600000 0.637847 +v -0.577575 0.000000 -0.199413 +v -0.577575 0.600000 -0.199413 +v -0.927292 0.000000 0.288130 +v -0.927292 0.600000 0.288130 +vn 0.8126 -0.0000 0.5829 +vn -0.5829 -0.0000 0.8126 +vn -0.8126 -0.0000 -0.5829 +vn 0.5829 -0.0000 -0.8126 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.375000 0.000000 +vt 0.625000 0.000000 +vt 0.625000 0.250000 +vt 0.375000 0.250000 +vt 0.625000 0.500000 +vt 0.375000 0.500000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 1.000000 +vt 0.375000 1.000000 +vt 0.125000 0.500000 +vt 0.125000 0.750000 +vt 0.875000 0.500000 +vt 0.875000 0.750000 +s 0 +f 25/1/6 26/2/6 28/3/6 27/4/6 +f 27/4/7 28/3/7 32/5/7 31/6/7 +f 31/6/8 32/5/8 30/7/8 29/8/8 +f 29/8/9 30/7/9 26/9/9 25/10/9 +f 27/11/10 31/6/10 29/8/10 25/12/10 +f 32/5/11 28/13/11 26/14/11 30/7/11 +o Sphere +v 0.428903 0.549441 -0.609806 +v 0.428903 0.466671 -0.692576 +v 0.428903 0.358527 -0.737371 +v 0.428903 0.300000 -0.743135 +v 0.428903 0.241473 -0.737371 +v 0.428903 0.133329 -0.692576 +v 0.440321 0.594236 -0.500538 +v 0.451301 0.577164 -0.555734 +v 0.461419 0.549441 -0.606604 +v 0.470288 0.512132 -0.651191 +v 0.477567 0.466671 -0.687783 +v 0.482975 0.414805 -0.714974 +v 0.486306 0.358527 -0.731717 +v 0.487430 0.300000 -0.737371 +v 0.486306 0.241473 -0.731717 +v 0.482975 0.185195 -0.714974 +v 0.477567 0.133329 -0.687783 +v 0.470288 0.087868 -0.651191 +v 0.461419 0.050559 -0.606604 +v 0.451301 0.022836 -0.555734 +v 0.440321 0.005764 -0.500538 +v 0.451301 0.594236 -0.497207 +v 0.472837 0.577164 -0.549201 +v 0.492685 0.549441 -0.597119 +v 0.510083 0.512132 -0.639120 +v 0.524360 0.466671 -0.673589 +v 0.534969 0.414805 -0.699201 +v 0.541502 0.358527 -0.714974 +v 0.543708 0.300000 -0.720299 +v 0.541502 0.241473 -0.714974 +v 0.534969 0.185195 -0.699201 +v 0.524360 0.133329 -0.673589 +v 0.510083 0.087868 -0.639120 +v 0.492685 0.050559 -0.597119 +v 0.472837 0.022836 -0.549201 +v 0.451301 0.005764 -0.497207 +v 0.461419 0.594236 -0.491799 +v 0.492685 0.577164 -0.538592 +v 0.521501 0.549441 -0.581717 +v 0.546757 0.512132 -0.619517 +v 0.567485 0.466671 -0.650538 +v 0.582887 0.414805 -0.673589 +v 0.592372 0.358527 -0.687783 +v 0.595574 0.300000 -0.692576 +v 0.592372 0.241473 -0.687783 +v 0.582887 0.185195 -0.673589 +v 0.567485 0.133329 -0.650538 +v 0.546757 0.087868 -0.619517 +v 0.521501 0.050559 -0.581717 +v 0.492685 0.022836 -0.538592 +v 0.461419 0.005764 -0.491799 +v 0.470288 0.594236 -0.484520 +v 0.510083 0.577164 -0.524315 +v 0.546757 0.549441 -0.560990 +v 0.578903 0.512132 -0.593135 +v 0.605285 0.466671 -0.619517 +v 0.624888 0.414805 -0.639120 +v 0.636959 0.358527 -0.651191 +v 0.641035 0.300000 -0.655267 +v 0.636959 0.241473 -0.651191 +v 0.624888 0.185195 -0.639120 +v 0.605285 0.133329 -0.619517 +v 0.578903 0.087868 -0.593135 +v 0.546757 0.050559 -0.560990 +v 0.510083 0.022836 -0.524315 +v 0.470288 0.005764 -0.484520 +v 0.477567 0.594236 -0.475651 +v 0.524360 0.577164 -0.506918 +v 0.567485 0.549441 -0.535733 +v 0.605285 0.512132 -0.560990 +v 0.636306 0.466671 -0.581717 +v 0.659356 0.414805 -0.597119 +v 0.673551 0.358527 -0.606604 +v 0.678344 0.300000 -0.609806 +v 0.673551 0.241473 -0.606604 +v 0.659356 0.185195 -0.597119 +v 0.636306 0.133329 -0.581717 +v 0.605285 0.087868 -0.560990 +v 0.567485 0.050559 -0.535733 +v 0.524360 0.022836 -0.506918 +v 0.477567 0.005764 -0.475651 +v 0.428903 0.600000 -0.443135 +v 0.482975 0.594236 -0.465533 +v 0.534969 0.577164 -0.487069 +v 0.582887 0.549441 -0.506918 +v 0.624888 0.512132 -0.524315 +v 0.659356 0.466671 -0.538592 +v 0.684969 0.414805 -0.549201 +v 0.700741 0.358527 -0.555734 +v 0.706067 0.300000 -0.557940 +v 0.700741 0.241473 -0.555734 +v 0.684969 0.185195 -0.549201 +v 0.659356 0.133329 -0.538592 +v 0.624888 0.087868 -0.524315 +v 0.582887 0.050559 -0.506918 +v 0.534969 0.022836 -0.487069 +v 0.482975 0.005764 -0.465533 +v 0.486306 0.594236 -0.454553 +v 0.541502 0.577164 -0.465533 +v 0.592372 0.549441 -0.475651 +v 0.636959 0.512132 -0.484520 +v 0.673551 0.466671 -0.491799 +v 0.700741 0.414805 -0.497207 +v 0.717485 0.358527 -0.500538 +v 0.723139 0.300000 -0.501662 +v 0.717485 0.241473 -0.500538 +v 0.700741 0.185195 -0.497207 +v 0.673551 0.133329 -0.491799 +v 0.636959 0.087868 -0.484520 +v 0.592372 0.050559 -0.475651 +v 0.541502 0.022836 -0.465533 +v 0.486306 0.005764 -0.454553 +v 0.487430 0.594236 -0.443135 +v 0.543708 0.577164 -0.443135 +v 0.595574 0.549441 -0.443135 +v 0.641035 0.512132 -0.443135 +v 0.678344 0.466671 -0.443135 +v 0.706067 0.414805 -0.443135 +v 0.723139 0.358527 -0.443135 +v 0.728903 0.300000 -0.443135 +v 0.723139 0.241473 -0.443135 +v 0.706067 0.185195 -0.443135 +v 0.678344 0.133329 -0.443135 +v 0.641035 0.087868 -0.443135 +v 0.595574 0.050559 -0.443135 +v 0.543708 0.022836 -0.443135 +v 0.487430 0.005764 -0.443135 +v 0.486306 0.594236 -0.431717 +v 0.541502 0.577164 -0.420738 +v 0.592372 0.549441 -0.410619 +v 0.636959 0.512132 -0.401750 +v 0.673551 0.466671 -0.394472 +v 0.700741 0.414805 -0.389063 +v 0.717485 0.358527 -0.385733 +v 0.723139 0.300000 -0.384608 +v 0.717485 0.241473 -0.385733 +v 0.700741 0.185195 -0.389063 +v 0.673551 0.133329 -0.394472 +v 0.636959 0.087868 -0.401750 +v 0.592372 0.050559 -0.410619 +v 0.541502 0.022836 -0.420738 +v 0.486306 0.005764 -0.431717 +v 0.482975 0.594236 -0.420738 +v 0.534969 0.577164 -0.399201 +v 0.582887 0.549441 -0.379353 +v 0.624888 0.512132 -0.361956 +v 0.659356 0.466671 -0.347678 +v 0.684969 0.414805 -0.337069 +v 0.700741 0.358527 -0.330536 +v 0.706067 0.300000 -0.328330 +v 0.700741 0.241473 -0.330536 +v 0.684969 0.185195 -0.337069 +v 0.659356 0.133329 -0.347678 +v 0.624888 0.087868 -0.361956 +v 0.582887 0.050559 -0.379353 +v 0.534969 0.022836 -0.399201 +v 0.482975 0.005764 -0.420738 +v 0.477567 0.594236 -0.410619 +v 0.524360 0.577164 -0.379353 +v 0.567485 0.549441 -0.350538 +v 0.605285 0.512132 -0.325281 +v 0.636306 0.466671 -0.304553 +v 0.659356 0.414805 -0.289151 +v 0.673551 0.358527 -0.279667 +v 0.678344 0.300000 -0.276464 +v 0.673551 0.241473 -0.279667 +v 0.659356 0.185195 -0.289151 +v 0.636306 0.133329 -0.304553 +v 0.605285 0.087868 -0.325281 +v 0.567485 0.050559 -0.350538 +v 0.524360 0.022836 -0.379353 +v 0.477567 0.005764 -0.410619 +v 0.470288 0.594236 -0.401750 +v 0.510083 0.577164 -0.361956 +v 0.546757 0.549441 -0.325281 +v 0.578903 0.512132 -0.293135 +v 0.605284 0.466671 -0.266754 +v 0.624888 0.414805 -0.247151 +v 0.636959 0.358527 -0.235079 +v 0.641035 0.300000 -0.231003 +v 0.636959 0.241473 -0.235079 +v 0.624888 0.185195 -0.247151 +v 0.605284 0.133329 -0.266754 +v 0.578903 0.087868 -0.293135 +v 0.546757 0.050559 -0.325281 +v 0.510083 0.022836 -0.361956 +v 0.470288 0.005764 -0.401750 +v 0.461419 0.594236 -0.394472 +v 0.492685 0.577164 -0.347678 +v 0.521501 0.549441 -0.304553 +v 0.546757 0.512132 -0.266754 +v 0.567485 0.466671 -0.235733 +v 0.582887 0.414805 -0.212682 +v 0.592372 0.358527 -0.198487 +v 0.595574 0.300000 -0.193695 +v 0.592372 0.241473 -0.198487 +v 0.582887 0.185195 -0.212682 +v 0.567485 0.133329 -0.235733 +v 0.546757 0.087868 -0.266754 +v 0.521501 0.050559 -0.304553 +v 0.492685 0.022836 -0.347678 +v 0.461419 0.005764 -0.394472 +v 0.451301 0.594236 -0.389063 +v 0.472837 0.577164 -0.337069 +v 0.492685 0.549441 -0.289151 +v 0.510083 0.512132 -0.247151 +v 0.524360 0.466671 -0.212682 +v 0.534969 0.414805 -0.187069 +v 0.541502 0.358527 -0.171297 +v 0.543708 0.300000 -0.165972 +v 0.541502 0.241473 -0.171297 +v 0.534969 0.185195 -0.187069 +v 0.524360 0.133329 -0.212682 +v 0.510083 0.087868 -0.247151 +v 0.492685 0.050559 -0.289151 +v 0.472837 0.022836 -0.337069 +v 0.451301 0.005764 -0.389063 +v 0.440321 0.594236 -0.385733 +v 0.451301 0.577164 -0.330536 +v 0.461419 0.549441 -0.279667 +v 0.470288 0.512132 -0.235079 +v 0.477567 0.466671 -0.198487 +v 0.482975 0.414805 -0.171297 +v 0.486306 0.358527 -0.154553 +v 0.487430 0.300000 -0.148900 +v 0.486306 0.241473 -0.154553 +v 0.482975 0.185195 -0.171297 +v 0.477567 0.133329 -0.198487 +v 0.470288 0.087868 -0.235079 +v 0.461419 0.050559 -0.279667 +v 0.451301 0.022836 -0.330536 +v 0.440321 0.005764 -0.385733 +v 0.428903 0.594236 -0.384608 +v 0.428903 0.577164 -0.328330 +v 0.428903 0.549441 -0.276464 +v 0.428903 0.512132 -0.231003 +v 0.428903 0.466671 -0.193695 +v 0.428903 0.414805 -0.165972 +v 0.428903 0.358527 -0.148900 +v 0.428903 0.300000 -0.143136 +v 0.428903 0.241473 -0.148900 +v 0.428903 0.185195 -0.165972 +v 0.428903 0.133329 -0.193695 +v 0.428903 0.087868 -0.231003 +v 0.428903 0.050559 -0.276464 +v 0.428903 0.022836 -0.328330 +v 0.428903 0.005764 -0.384608 +v 0.417485 0.594236 -0.385733 +v 0.406506 0.577164 -0.330536 +v 0.396387 0.549441 -0.279667 +v 0.387518 0.512132 -0.235079 +v 0.380240 0.466671 -0.198487 +v 0.374831 0.414805 -0.171297 +v 0.371501 0.358527 -0.154554 +v 0.370376 0.300000 -0.148900 +v 0.371501 0.241473 -0.154554 +v 0.374831 0.185195 -0.171297 +v 0.380240 0.133329 -0.198487 +v 0.387518 0.087868 -0.235079 +v 0.396387 0.050559 -0.279667 +v 0.406506 0.022836 -0.330536 +v 0.417485 0.005764 -0.385733 +v 0.406506 0.594236 -0.389063 +v 0.384969 0.577164 -0.337069 +v 0.365121 0.549441 -0.289151 +v 0.347724 0.512132 -0.247151 +v 0.333446 0.466671 -0.212682 +v 0.322837 0.414805 -0.187069 +v 0.316304 0.358527 -0.171297 +v 0.314098 0.300000 -0.165972 +v 0.316304 0.241473 -0.171297 +v 0.322837 0.185195 -0.187069 +v 0.333446 0.133329 -0.212682 +v 0.347724 0.087868 -0.247151 +v 0.365121 0.050559 -0.289151 +v 0.384969 0.022836 -0.337069 +v 0.406506 0.005764 -0.389063 +v 0.396387 0.594236 -0.394472 +v 0.365121 0.577164 -0.347678 +v 0.336306 0.549441 -0.304554 +v 0.311049 0.512132 -0.266754 +v 0.290321 0.466671 -0.235733 +v 0.274919 0.414805 -0.212682 +v 0.265435 0.358527 -0.198487 +v 0.262232 0.300000 -0.193695 +v 0.265435 0.241473 -0.198487 +v 0.274919 0.185195 -0.212682 +v 0.290321 0.133329 -0.235733 +v 0.311049 0.087868 -0.266754 +v 0.336306 0.050559 -0.304554 +v 0.365121 0.022836 -0.347678 +v 0.396387 0.005764 -0.394472 +v 0.387518 0.594236 -0.401750 +v 0.347724 0.577164 -0.361956 +v 0.311049 0.549441 -0.325281 +v 0.278903 0.512132 -0.293135 +v 0.252522 0.466671 -0.266754 +v 0.232919 0.414805 -0.247151 +v 0.220847 0.358527 -0.235079 +v 0.216771 0.300000 -0.231004 +v 0.220847 0.241473 -0.235079 +v 0.232919 0.185195 -0.247151 +v 0.252522 0.133329 -0.266754 +v 0.278903 0.087868 -0.293135 +v 0.311049 0.050559 -0.325281 +v 0.347724 0.022836 -0.361956 +v 0.387518 0.005764 -0.401750 +v 0.428903 0.000000 -0.443135 +v 0.380240 0.594236 -0.410619 +v 0.333446 0.577164 -0.379353 +v 0.290321 0.549441 -0.350538 +v 0.252522 0.512132 -0.325281 +v 0.221501 0.466671 -0.304554 +v 0.198450 0.414805 -0.289151 +v 0.184255 0.358527 -0.279667 +v 0.179462 0.300000 -0.276464 +v 0.184255 0.241473 -0.279667 +v 0.198450 0.185195 -0.289151 +v 0.221501 0.133329 -0.304554 +v 0.252522 0.087868 -0.325281 +v 0.290321 0.050559 -0.350538 +v 0.333446 0.022836 -0.379353 +v 0.380240 0.005764 -0.410619 +v 0.374831 0.594236 -0.420738 +v 0.322837 0.577164 -0.399201 +v 0.274919 0.549441 -0.379353 +v 0.232919 0.512132 -0.361956 +v 0.198450 0.466671 -0.347679 +v 0.172837 0.414805 -0.337069 +v 0.157065 0.358527 -0.330536 +v 0.151740 0.300000 -0.328331 +v 0.157065 0.241473 -0.330536 +v 0.172837 0.185195 -0.337069 +v 0.198450 0.133329 -0.347679 +v 0.232919 0.087868 -0.361956 +v 0.274919 0.050559 -0.379353 +v 0.322837 0.022836 -0.399201 +v 0.374831 0.005764 -0.420738 +v 0.371501 0.594236 -0.431717 +v 0.316304 0.577164 -0.420738 +v 0.265435 0.549441 -0.410619 +v 0.220847 0.512132 -0.401750 +v 0.184255 0.466671 -0.394472 +v 0.157065 0.414805 -0.389063 +v 0.140321 0.358527 -0.385733 +v 0.134668 0.300000 -0.384608 +v 0.140321 0.241473 -0.385733 +v 0.157065 0.185195 -0.389063 +v 0.184255 0.133329 -0.394472 +v 0.220847 0.087868 -0.401750 +v 0.265435 0.050559 -0.410619 +v 0.316304 0.022836 -0.420738 +v 0.371501 0.005764 -0.431717 +v 0.370376 0.594236 -0.443135 +v 0.314098 0.577164 -0.443135 +v 0.262232 0.549441 -0.443135 +v 0.216771 0.512132 -0.443135 +v 0.179462 0.466671 -0.443135 +v 0.151739 0.414805 -0.443135 +v 0.134668 0.358527 -0.443135 +v 0.128903 0.300000 -0.443135 +v 0.134668 0.241473 -0.443135 +v 0.151739 0.185195 -0.443135 +v 0.179462 0.133329 -0.443135 +v 0.216771 0.087868 -0.443135 +v 0.262232 0.050559 -0.443135 +v 0.314098 0.022836 -0.443135 +v 0.370376 0.005764 -0.443135 +v 0.371501 0.594236 -0.454553 +v 0.316304 0.577164 -0.465533 +v 0.265435 0.549441 -0.475651 +v 0.220847 0.512132 -0.484520 +v 0.184255 0.466671 -0.491799 +v 0.157065 0.414805 -0.497207 +v 0.140321 0.358527 -0.500538 +v 0.134668 0.300000 -0.501662 +v 0.140321 0.241473 -0.500538 +v 0.157065 0.185195 -0.497207 +v 0.184255 0.133329 -0.491799 +v 0.220847 0.087868 -0.484520 +v 0.265435 0.050559 -0.475651 +v 0.316304 0.022836 -0.465533 +v 0.371501 0.005764 -0.454553 +v 0.374831 0.594236 -0.465533 +v 0.322837 0.577164 -0.487069 +v 0.274919 0.549441 -0.506918 +v 0.232919 0.512132 -0.524315 +v 0.198450 0.466671 -0.538592 +v 0.172837 0.414805 -0.549201 +v 0.157065 0.358527 -0.555734 +v 0.151740 0.300000 -0.557940 +v 0.157065 0.241473 -0.555734 +v 0.172837 0.185195 -0.549201 +v 0.198450 0.133329 -0.538592 +v 0.232919 0.087868 -0.524315 +v 0.274919 0.050559 -0.506918 +v 0.322837 0.022836 -0.487069 +v 0.374831 0.005764 -0.465533 +v 0.380240 0.594236 -0.475651 +v 0.333446 0.577164 -0.506918 +v 0.290321 0.549441 -0.535733 +v 0.252522 0.512132 -0.560990 +v 0.221501 0.466671 -0.581717 +v 0.198450 0.414805 -0.597119 +v 0.184255 0.358527 -0.606604 +v 0.179463 0.300000 -0.609806 +v 0.184255 0.241473 -0.606604 +v 0.198450 0.185195 -0.597119 +v 0.221501 0.133329 -0.581717 +v 0.252522 0.087868 -0.560990 +v 0.290321 0.050559 -0.535733 +v 0.333446 0.022836 -0.506918 +v 0.380240 0.005764 -0.475651 +v 0.387518 0.594236 -0.484520 +v 0.347724 0.577164 -0.524315 +v 0.311049 0.549441 -0.560989 +v 0.278903 0.512132 -0.593135 +v 0.252522 0.466671 -0.619517 +v 0.232919 0.414805 -0.639120 +v 0.220847 0.358527 -0.651191 +v 0.216771 0.300000 -0.655267 +v 0.220847 0.241473 -0.651191 +v 0.232919 0.185195 -0.639120 +v 0.252522 0.133329 -0.619517 +v 0.278903 0.087868 -0.593135 +v 0.311049 0.050559 -0.560989 +v 0.347724 0.022836 -0.524315 +v 0.387518 0.005764 -0.484520 +v 0.396387 0.594236 -0.491799 +v 0.365121 0.577164 -0.538592 +v 0.336306 0.549441 -0.581717 +v 0.311049 0.512132 -0.619517 +v 0.290321 0.466671 -0.650538 +v 0.274919 0.414805 -0.673589 +v 0.265435 0.358527 -0.687783 +v 0.262232 0.300000 -0.692576 +v 0.265435 0.241473 -0.687783 +v 0.274919 0.185195 -0.673589 +v 0.290321 0.133329 -0.650538 +v 0.311049 0.087868 -0.619517 +v 0.336306 0.050559 -0.581717 +v 0.365121 0.022836 -0.538592 +v 0.396387 0.005764 -0.491799 +v 0.406506 0.594236 -0.497207 +v 0.384969 0.577164 -0.549201 +v 0.365121 0.549441 -0.597119 +v 0.347724 0.512132 -0.639120 +v 0.333446 0.466671 -0.673589 +v 0.322837 0.414805 -0.699201 +v 0.316304 0.358527 -0.714973 +v 0.314098 0.300000 -0.720299 +v 0.316304 0.241473 -0.714973 +v 0.322837 0.185195 -0.699201 +v 0.333446 0.133329 -0.673589 +v 0.347724 0.087868 -0.639120 +v 0.365121 0.050559 -0.597119 +v 0.384969 0.022836 -0.549201 +v 0.406506 0.005764 -0.497207 +v 0.417485 0.594236 -0.500538 +v 0.406506 0.577164 -0.555734 +v 0.396387 0.549441 -0.606604 +v 0.387518 0.512132 -0.651191 +v 0.380240 0.466671 -0.687783 +v 0.374831 0.414805 -0.714973 +v 0.371501 0.358527 -0.731717 +v 0.370376 0.300000 -0.737371 +v 0.371501 0.241473 -0.731717 +v 0.374831 0.185195 -0.714973 +v 0.380240 0.133329 -0.687783 +v 0.387518 0.087868 -0.651191 +v 0.396387 0.050559 -0.606604 +v 0.406506 0.022836 -0.555734 +v 0.417485 0.005764 -0.500538 +v 0.428903 0.594236 -0.501662 +v 0.428903 0.577164 -0.557940 +v 0.428903 0.512132 -0.655267 +v 0.428903 0.414805 -0.720299 +v 0.428903 0.185195 -0.720299 +v 0.428903 0.087868 -0.655267 +v 0.428903 0.050559 -0.609806 +v 0.428903 0.022836 -0.557940 +v 0.428903 0.005764 -0.501662 +vn -0.0000 0.8286 -0.5598 +vn -0.0000 0.5528 -0.8333 +vn -0.0000 0.1939 -0.9810 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 -0.1939 -0.9810 +vn -0.0000 -0.5528 -0.8333 +vn 0.0392 0.9796 -0.1971 +vn 0.0757 0.9217 -0.3804 +vn 0.1092 0.8286 -0.5490 +vn 0.1385 0.7041 -0.6965 +vn 0.1626 0.5528 -0.8173 +vn 0.1804 0.3805 -0.9070 +vn 0.1914 0.1939 -0.9622 +vn 0.1951 -0.0000 -0.9808 +vn 0.1914 -0.1939 -0.9622 +vn 0.1804 -0.3805 -0.9070 +vn 0.1626 -0.5528 -0.8173 +vn 0.1385 -0.7041 -0.6965 +vn 0.1092 -0.8286 -0.5490 +vn 0.0757 -0.9217 -0.3804 +vn 0.0392 -0.9796 -0.1971 +vn 0.0769 0.9796 -0.1857 +vn 0.1484 0.9217 -0.3584 +vn 0.2142 0.8286 -0.5172 +vn 0.2718 0.7041 -0.6561 +vn 0.3189 0.5528 -0.7699 +vn 0.3539 0.3805 -0.8544 +vn 0.3754 0.1939 -0.9063 +vn 0.3827 -0.0000 -0.9239 +vn 0.3754 -0.1939 -0.9063 +vn 0.3539 -0.3805 -0.8544 +vn 0.3189 -0.5528 -0.7699 +vn 0.2718 -0.7041 -0.6561 +vn 0.2142 -0.8286 -0.5172 +vn 0.1484 -0.9217 -0.3584 +vn 0.0769 -0.9796 -0.1857 +vn 0.1117 0.9796 -0.1671 +vn 0.2155 0.9217 -0.3225 +vn 0.3110 0.8286 -0.4654 +vn 0.3945 0.7041 -0.5905 +vn 0.4630 0.5528 -0.6929 +vn 0.5138 0.3805 -0.7689 +vn 0.5450 0.1939 -0.8157 +vn 0.5556 -0.0000 -0.8315 +vn 0.5450 -0.1939 -0.8157 +vn 0.5138 -0.3805 -0.7689 +vn 0.4630 -0.5528 -0.6929 +vn 0.3945 -0.7041 -0.5905 +vn 0.3110 -0.8286 -0.4654 +vn 0.2155 -0.9217 -0.3225 +vn 0.1117 -0.9796 -0.1671 +vn 0.1421 0.9796 -0.1421 +vn 0.2743 0.9217 -0.2743 +vn 0.3958 0.8286 -0.3958 +vn 0.5021 0.7041 -0.5021 +vn 0.5893 0.5528 -0.5893 +vn 0.6539 0.3805 -0.6539 +vn 0.6937 0.1939 -0.6937 +vn 0.7071 -0.0000 -0.7071 +vn 0.6937 -0.1939 -0.6937 +vn 0.6539 -0.3805 -0.6539 +vn 0.5893 -0.5528 -0.5893 +vn 0.5021 -0.7041 -0.5021 +vn 0.3958 -0.8286 -0.3958 +vn 0.2743 -0.9217 -0.2743 +vn 0.1421 -0.9796 -0.1421 +vn 0.1671 0.9796 -0.1117 +vn 0.3225 0.9217 -0.2155 +vn 0.4654 0.8286 -0.3110 +vn 0.5905 0.7041 -0.3945 +vn 0.6929 0.5528 -0.4630 +vn 0.7689 0.3805 -0.5138 +vn 0.8157 0.1939 -0.5450 +vn 0.8315 -0.0000 -0.5556 +vn 0.8157 -0.1939 -0.5450 +vn 0.7689 -0.3805 -0.5138 +vn 0.6929 -0.5528 -0.4630 +vn 0.5905 -0.7041 -0.3945 +vn 0.4654 -0.8286 -0.3110 +vn 0.3225 -0.9217 -0.2155 +vn 0.1671 -0.9796 -0.1117 +vn -0.0000 1.0000 -0.0000 +vn 0.1857 0.9796 -0.0769 +vn 0.3584 0.9217 -0.1484 +vn 0.5172 0.8286 -0.2142 +vn 0.6561 0.7041 -0.2718 +vn 0.7699 0.5528 -0.3189 +vn 0.8544 0.3805 -0.3539 +vn 0.9063 0.1939 -0.3754 +vn 0.9239 -0.0000 -0.3827 +vn 0.9063 -0.1939 -0.3754 +vn 0.8544 -0.3805 -0.3539 +vn 0.7699 -0.5528 -0.3189 +vn 0.6561 -0.7041 -0.2718 +vn 0.5172 -0.8286 -0.2142 +vn 0.3584 -0.9217 -0.1484 +vn 0.1857 -0.9796 -0.0769 +vn 0.1971 0.9796 -0.0392 +vn 0.3804 0.9217 -0.0757 +vn 0.5490 0.8286 -0.1092 +vn 0.6965 0.7041 -0.1385 +vn 0.8173 0.5528 -0.1626 +vn 0.9070 0.3805 -0.1804 +vn 0.9622 0.1939 -0.1914 +vn 0.9808 -0.0000 -0.1951 +vn 0.9622 -0.1939 -0.1914 +vn 0.9070 -0.3805 -0.1804 +vn 0.8173 -0.5528 -0.1626 +vn 0.6965 -0.7041 -0.1385 +vn 0.5490 -0.8286 -0.1092 +vn 0.3804 -0.9217 -0.0757 +vn 0.1971 -0.9796 -0.0392 +vn 0.2010 0.9796 -0.0000 +vn 0.3879 0.9217 -0.0000 +vn 0.5598 0.8286 -0.0000 +vn 0.7101 0.7041 -0.0000 +vn 0.8333 0.5528 -0.0000 +vn 0.9248 0.3805 -0.0000 +vn 0.9810 0.1939 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn 0.9810 -0.1939 -0.0000 +vn 0.9248 -0.3805 -0.0000 +vn 0.8333 -0.5528 -0.0000 +vn 0.7101 -0.7041 -0.0000 +vn 0.5598 -0.8286 -0.0000 +vn 0.3879 -0.9217 -0.0000 +vn 0.2010 -0.9796 -0.0000 +vn 0.1971 0.9796 0.0392 +vn 0.3804 0.9217 0.0757 +vn 0.5490 0.8286 0.1092 +vn 0.6965 0.7041 0.1385 +vn 0.8173 0.5528 0.1626 +vn 0.9070 0.3805 0.1804 +vn 0.9622 0.1939 0.1914 +vn 0.9808 -0.0000 0.1951 +vn 0.9622 -0.1939 0.1914 +vn 0.9070 -0.3805 0.1804 +vn 0.8173 -0.5528 0.1626 +vn 0.6965 -0.7041 0.1385 +vn 0.5490 -0.8286 0.1092 +vn 0.3804 -0.9217 0.0757 +vn 0.1971 -0.9796 0.0392 +vn 0.1857 0.9796 0.0769 +vn 0.3584 0.9217 0.1484 +vn 0.5172 0.8286 0.2142 +vn 0.6561 0.7041 0.2718 +vn 0.7699 0.5528 0.3189 +vn 0.8544 0.3805 0.3539 +vn 0.9063 0.1939 0.3754 +vn 0.9239 -0.0000 0.3827 +vn 0.9063 -0.1939 0.3754 +vn 0.8544 -0.3805 0.3539 +vn 0.7699 -0.5528 0.3189 +vn 0.6561 -0.7041 0.2718 +vn 0.5172 -0.8286 0.2142 +vn 0.3584 -0.9217 0.1484 +vn 0.1857 -0.9796 0.0769 +vn 0.1671 0.9796 0.1117 +vn 0.3225 0.9217 0.2155 +vn 0.4654 0.8286 0.3110 +vn 0.5905 0.7041 0.3945 +vn 0.6929 0.5528 0.4630 +vn 0.7689 0.3805 0.5138 +vn 0.8157 0.1939 0.5450 +vn 0.8315 -0.0000 0.5556 +vn 0.8157 -0.1939 0.5450 +vn 0.7689 -0.3805 0.5138 +vn 0.6929 -0.5528 0.4630 +vn 0.5905 -0.7041 0.3945 +vn 0.4654 -0.8286 0.3110 +vn 0.3225 -0.9217 0.2155 +vn 0.1671 -0.9796 0.1117 +vn 0.1421 0.9796 0.1421 +vn 0.2743 0.9217 0.2743 +vn 0.3958 0.8286 0.3958 +vn 0.5021 0.7041 0.5021 +vn 0.5893 0.5528 0.5893 +vn 0.6539 0.3805 0.6539 +vn 0.6937 0.1939 0.6937 +vn 0.7071 -0.0000 0.7071 +vn 0.6937 -0.1939 0.6937 +vn 0.6539 -0.3805 0.6539 +vn 0.5893 -0.5528 0.5893 +vn 0.5021 -0.7041 0.5021 +vn 0.3958 -0.8286 0.3958 +vn 0.2743 -0.9217 0.2743 +vn 0.1421 -0.9796 0.1421 +vn 0.1117 0.9796 0.1671 +vn 0.2155 0.9217 0.3225 +vn 0.3110 0.8286 0.4654 +vn 0.3945 0.7041 0.5905 +vn 0.4630 0.5528 0.6929 +vn 0.5138 0.3805 0.7689 +vn 0.5450 0.1939 0.8157 +vn 0.5556 -0.0000 0.8315 +vn 0.5450 -0.1939 0.8157 +vn 0.5138 -0.3805 0.7689 +vn 0.4630 -0.5528 0.6929 +vn 0.3945 -0.7041 0.5905 +vn 0.3110 -0.8286 0.4654 +vn 0.2155 -0.9217 0.3225 +vn 0.1117 -0.9796 0.1671 +vn 0.0769 0.9796 0.1857 +vn 0.1484 0.9217 0.3584 +vn 0.2142 0.8286 0.5172 +vn 0.2718 0.7041 0.6561 +vn 0.3189 0.5528 0.7699 +vn 0.3539 0.3805 0.8544 +vn 0.3754 0.1939 0.9063 +vn 0.3827 -0.0000 0.9239 +vn 0.3754 -0.1939 0.9063 +vn 0.3539 -0.3805 0.8544 +vn 0.3189 -0.5528 0.7699 +vn 0.2718 -0.7041 0.6561 +vn 0.2142 -0.8286 0.5172 +vn 0.1484 -0.9217 0.3584 +vn 0.0769 -0.9796 0.1857 +vn 0.0392 0.9796 0.1971 +vn 0.0757 0.9217 0.3804 +vn 0.1092 0.8286 0.5490 +vn 0.1385 0.7041 0.6965 +vn 0.1626 0.5528 0.8173 +vn 0.1804 0.3805 0.9070 +vn 0.1914 0.1939 0.9622 +vn 0.1951 -0.0000 0.9808 +vn 0.1914 -0.1939 0.9622 +vn 0.1804 -0.3805 0.9070 +vn 0.1626 -0.5528 0.8173 +vn 0.1385 -0.7041 0.6965 +vn 0.1092 -0.8286 0.5490 +vn 0.0757 -0.9217 0.3804 +vn 0.0392 -0.9796 0.1971 +vn -0.0000 0.9796 0.2010 +vn -0.0000 0.9217 0.3879 +vn -0.0000 0.8286 0.5598 +vn -0.0000 0.7041 0.7101 +vn -0.0000 0.5528 0.8333 +vn -0.0000 0.3805 0.9248 +vn -0.0000 0.1939 0.9810 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 -0.1939 0.9810 +vn -0.0000 -0.3805 0.9248 +vn -0.0000 -0.5528 0.8333 +vn -0.0000 -0.7041 0.7101 +vn -0.0000 -0.8286 0.5598 +vn -0.0000 -0.9217 0.3879 +vn -0.0000 -0.9796 0.2010 +vn -0.0392 0.9796 0.1971 +vn -0.0757 0.9217 0.3804 +vn -0.1092 0.8286 0.5490 +vn -0.1385 0.7041 0.6965 +vn -0.1626 0.5528 0.8173 +vn -0.1804 0.3805 0.9070 +vn -0.1914 0.1939 0.9622 +vn -0.1951 -0.0000 0.9808 +vn -0.1914 -0.1939 0.9622 +vn -0.1804 -0.3805 0.9070 +vn -0.1626 -0.5528 0.8173 +vn -0.1385 -0.7041 0.6965 +vn -0.1092 -0.8286 0.5490 +vn -0.0757 -0.9217 0.3804 +vn -0.0392 -0.9796 0.1971 +vn -0.0769 0.9796 0.1857 +vn -0.1484 0.9217 0.3584 +vn -0.2142 0.8286 0.5172 +vn -0.2718 0.7041 0.6561 +vn -0.3189 0.5528 0.7699 +vn -0.3539 0.3805 0.8544 +vn -0.3754 0.1939 0.9063 +vn -0.3827 -0.0000 0.9239 +vn -0.3754 -0.1939 0.9063 +vn -0.3539 -0.3805 0.8544 +vn -0.3189 -0.5528 0.7699 +vn -0.2718 -0.7041 0.6561 +vn -0.2142 -0.8286 0.5172 +vn -0.1484 -0.9217 0.3584 +vn -0.0769 -0.9796 0.1857 +vn -0.1117 0.9796 0.1671 +vn -0.2155 0.9217 0.3225 +vn -0.3110 0.8286 0.4654 +vn -0.3945 0.7041 0.5905 +vn -0.4630 0.5528 0.6929 +vn -0.5138 0.3805 0.7689 +vn -0.5450 0.1939 0.8157 +vn -0.5556 -0.0000 0.8315 +vn -0.5450 -0.1939 0.8157 +vn -0.5138 -0.3805 0.7689 +vn -0.4630 -0.5528 0.6929 +vn -0.3945 -0.7041 0.5905 +vn -0.3110 -0.8286 0.4654 +vn -0.2155 -0.9217 0.3225 +vn -0.1117 -0.9796 0.1671 +vn -0.1421 0.9796 0.1421 +vn -0.2743 0.9217 0.2743 +vn -0.3958 0.8286 0.3958 +vn -0.5021 0.7041 0.5021 +vn -0.5893 0.5528 0.5893 +vn -0.6539 0.3805 0.6539 +vn -0.6937 0.1939 0.6937 +vn -0.7071 -0.0000 0.7071 +vn -0.6937 -0.1939 0.6937 +vn -0.6539 -0.3805 0.6539 +vn -0.5893 -0.5528 0.5893 +vn -0.5021 -0.7041 0.5021 +vn -0.3958 -0.8286 0.3958 +vn -0.2743 -0.9217 0.2743 +vn -0.1421 -0.9796 0.1421 +vn -0.0000 -1.0000 -0.0000 +vn -0.1671 0.9796 0.1117 +vn -0.3225 0.9217 0.2155 +vn -0.4654 0.8286 0.3110 +vn -0.5905 0.7041 0.3945 +vn -0.6929 0.5528 0.4630 +vn -0.7689 0.3805 0.5138 +vn -0.8157 0.1939 0.5450 +vn -0.8315 -0.0000 0.5556 +vn -0.8157 -0.1939 0.5450 +vn -0.7689 -0.3805 0.5138 +vn -0.6929 -0.5528 0.4630 +vn -0.5905 -0.7041 0.3945 +vn -0.4654 -0.8286 0.3110 +vn -0.3225 -0.9217 0.2155 +vn -0.1671 -0.9796 0.1117 +vn -0.1857 0.9796 0.0769 +vn -0.3584 0.9217 0.1484 +vn -0.5172 0.8286 0.2142 +vn -0.6561 0.7041 0.2718 +vn -0.7699 0.5528 0.3189 +vn -0.8544 0.3805 0.3539 +vn -0.9063 0.1939 0.3754 +vn -0.9239 -0.0000 0.3827 +vn -0.9063 -0.1939 0.3754 +vn -0.8544 -0.3805 0.3539 +vn -0.7699 -0.5528 0.3189 +vn -0.6561 -0.7041 0.2718 +vn -0.5172 -0.8286 0.2142 +vn -0.3584 -0.9217 0.1484 +vn -0.1857 -0.9796 0.0769 +vn -0.1971 0.9796 0.0392 +vn -0.3804 0.9217 0.0757 +vn -0.5490 0.8286 0.1092 +vn -0.6965 0.7041 0.1385 +vn -0.8173 0.5528 0.1626 +vn -0.9070 0.3805 0.1804 +vn -0.9622 0.1939 0.1914 +vn -0.9808 -0.0000 0.1951 +vn -0.9622 -0.1939 0.1914 +vn -0.9070 -0.3805 0.1804 +vn -0.8173 -0.5528 0.1626 +vn -0.6965 -0.7041 0.1385 +vn -0.5490 -0.8286 0.1092 +vn -0.3804 -0.9217 0.0757 +vn -0.1971 -0.9796 0.0392 +vn -0.2010 0.9796 -0.0000 +vn -0.3879 0.9217 -0.0000 +vn -0.5598 0.8286 -0.0000 +vn -0.7101 0.7041 -0.0000 +vn -0.8333 0.5528 -0.0000 +vn -0.9248 0.3805 -0.0000 +vn -0.9810 0.1939 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.9810 -0.1939 -0.0000 +vn -0.9248 -0.3805 -0.0000 +vn -0.8333 -0.5528 -0.0000 +vn -0.7101 -0.7041 -0.0000 +vn -0.5598 -0.8286 -0.0000 +vn -0.3879 -0.9217 -0.0000 +vn -0.2010 -0.9796 -0.0000 +vn -0.1971 0.9796 -0.0392 +vn -0.3804 0.9217 -0.0757 +vn -0.5490 0.8286 -0.1092 +vn -0.6965 0.7041 -0.1385 +vn -0.8173 0.5528 -0.1626 +vn -0.9070 0.3805 -0.1804 +vn -0.9622 0.1939 -0.1914 +vn -0.9808 -0.0000 -0.1951 +vn -0.9622 -0.1939 -0.1914 +vn -0.9070 -0.3805 -0.1804 +vn -0.8173 -0.5528 -0.1626 +vn -0.6965 -0.7041 -0.1385 +vn -0.5490 -0.8286 -0.1092 +vn -0.3804 -0.9217 -0.0757 +vn -0.1971 -0.9796 -0.0392 +vn -0.1857 0.9796 -0.0769 +vn -0.3584 0.9217 -0.1484 +vn -0.5172 0.8286 -0.2142 +vn -0.6561 0.7041 -0.2718 +vn -0.7699 0.5528 -0.3189 +vn -0.8544 0.3805 -0.3539 +vn -0.9063 0.1939 -0.3754 +vn -0.9239 -0.0000 -0.3827 +vn -0.9063 -0.1939 -0.3754 +vn -0.8544 -0.3805 -0.3539 +vn -0.7699 -0.5528 -0.3189 +vn -0.6561 -0.7041 -0.2718 +vn -0.5172 -0.8286 -0.2142 +vn -0.3584 -0.9217 -0.1484 +vn -0.1857 -0.9796 -0.0769 +vn -0.1671 0.9796 -0.1117 +vn -0.3225 0.9217 -0.2155 +vn -0.4654 0.8286 -0.3110 +vn -0.5905 0.7041 -0.3945 +vn -0.6929 0.5528 -0.4630 +vn -0.7689 0.3805 -0.5138 +vn -0.8157 0.1939 -0.5450 +vn -0.8315 -0.0000 -0.5556 +vn -0.8157 -0.1939 -0.5450 +vn -0.7689 -0.3805 -0.5138 +vn -0.6929 -0.5528 -0.4630 +vn -0.5905 -0.7041 -0.3945 +vn -0.4654 -0.8286 -0.3110 +vn -0.3225 -0.9217 -0.2155 +vn -0.1671 -0.9796 -0.1117 +vn -0.1421 0.9796 -0.1421 +vn -0.2743 0.9217 -0.2743 +vn -0.3958 0.8286 -0.3958 +vn -0.5021 0.7041 -0.5021 +vn -0.5893 0.5528 -0.5893 +vn -0.6539 0.3805 -0.6539 +vn -0.6937 0.1939 -0.6937 +vn -0.7071 -0.0000 -0.7071 +vn -0.6937 -0.1939 -0.6937 +vn -0.6539 -0.3805 -0.6539 +vn -0.5893 -0.5528 -0.5893 +vn -0.5021 -0.7041 -0.5021 +vn -0.3958 -0.8286 -0.3958 +vn -0.2743 -0.9217 -0.2743 +vn -0.1421 -0.9796 -0.1421 +vn -0.1117 0.9796 -0.1671 +vn -0.2155 0.9217 -0.3225 +vn -0.3110 0.8286 -0.4654 +vn -0.3945 0.7041 -0.5905 +vn -0.4630 0.5528 -0.6929 +vn -0.5138 0.3805 -0.7689 +vn -0.5450 0.1939 -0.8157 +vn -0.5556 -0.0000 -0.8315 +vn -0.5450 -0.1939 -0.8157 +vn -0.5138 -0.3805 -0.7689 +vn -0.4630 -0.5528 -0.6929 +vn -0.3945 -0.7041 -0.5905 +vn -0.3110 -0.8286 -0.4654 +vn -0.2155 -0.9217 -0.3225 +vn -0.1117 -0.9796 -0.1671 +vn -0.0769 0.9796 -0.1857 +vn -0.1484 0.9217 -0.3584 +vn -0.2142 0.8286 -0.5172 +vn -0.2718 0.7041 -0.6561 +vn -0.3189 0.5528 -0.7699 +vn -0.3539 0.3805 -0.8544 +vn -0.3754 0.1939 -0.9063 +vn -0.3827 -0.0000 -0.9239 +vn -0.3754 -0.1939 -0.9063 +vn -0.3539 -0.3805 -0.8544 +vn -0.3189 -0.5528 -0.7699 +vn -0.2718 -0.7041 -0.6561 +vn -0.2142 -0.8286 -0.5172 +vn -0.1484 -0.9217 -0.3584 +vn -0.0769 -0.9796 -0.1857 +vn -0.0392 0.9796 -0.1971 +vn -0.0757 0.9217 -0.3804 +vn -0.1092 0.8286 -0.5490 +vn -0.1385 0.7041 -0.6965 +vn -0.1626 0.5528 -0.8173 +vn -0.1804 0.3805 -0.9070 +vn -0.1914 0.1939 -0.9622 +vn -0.1951 -0.0000 -0.9808 +vn -0.1914 -0.1939 -0.9622 +vn -0.1804 -0.3805 -0.9070 +vn -0.1626 -0.5528 -0.8173 +vn -0.1385 -0.7041 -0.6965 +vn -0.1092 -0.8286 -0.5490 +vn -0.0757 -0.9217 -0.3804 +vn -0.0392 -0.9796 -0.1971 +vn -0.0000 0.9796 -0.2010 +vn -0.0000 0.9217 -0.3879 +vn -0.0000 0.7041 -0.7101 +vn -0.0000 0.3805 -0.9248 +vn -0.0000 -0.3805 -0.9248 +vn -0.0000 -0.7041 -0.7101 +vn -0.0000 -0.8286 -0.5598 +vn -0.0000 -0.9217 -0.3879 +vn -0.0000 -0.9796 -0.2010 +vt 0.750000 0.125000 +vt 0.750000 0.187500 +vt 0.718750 0.187500 +vt 0.718750 0.125000 +vt 0.750000 0.562500 +vt 0.750000 0.625000 +vt 0.718750 0.625000 +vt 0.718750 0.562500 +vt 0.750000 0.062500 +vt 0.718750 0.062500 +vt 0.750000 0.500000 +vt 0.718750 0.500000 +vt 0.750000 0.937500 +vt 0.734375 1.000000 +vt 0.718750 0.937500 +vt 0.734375 0.000000 +vt 0.750000 0.437500 +vt 0.718750 0.437500 +vt 0.750000 0.875000 +vt 0.718750 0.875000 +vt 0.750000 0.375000 +vt 0.718750 0.375000 +vt 0.750000 0.812500 +vt 0.718750 0.812500 +vt 0.750000 0.312500 +vt 0.718750 0.312500 +vt 0.750000 0.750000 +vt 0.718750 0.750000 +vt 0.750000 0.250000 +vt 0.718750 0.250000 +vt 0.750000 0.687500 +vt 0.718750 0.687500 +vt 0.687500 0.250000 +vt 0.687500 0.187500 +vt 0.687500 0.687500 +vt 0.687500 0.625000 +vt 0.687500 0.125000 +vt 0.687500 0.562500 +vt 0.687500 0.062500 +vt 0.687500 0.500000 +vt 0.703125 1.000000 +vt 0.687500 0.937500 +vt 0.703125 0.000000 +vt 0.687500 0.437500 +vt 0.687500 0.875000 +vt 0.687500 0.375000 +vt 0.687500 0.812500 +vt 0.687500 0.312500 +vt 0.687500 0.750000 +vt 0.656250 0.937500 +vt 0.656250 0.875000 +vt 0.656250 0.437500 +vt 0.656250 0.375000 +vt 0.656250 0.812500 +vt 0.656250 0.312500 +vt 0.656250 0.750000 +vt 0.656250 0.250000 +vt 0.656250 0.687500 +vt 0.656250 0.187500 +vt 0.656250 0.625000 +vt 0.656250 0.125000 +vt 0.656250 0.562500 +vt 0.656250 0.062500 +vt 0.656250 0.500000 +vt 0.671875 1.000000 +vt 0.671875 0.000000 +vt 0.625000 0.687500 +vt 0.625000 0.625000 +vt 0.625000 0.187500 +vt 0.625000 0.125000 +vt 0.625000 0.562500 +vt 0.625000 0.062500 +vt 0.625000 0.500000 +vt 0.640625 1.000000 +vt 0.625000 0.937500 +vt 0.640625 0.000000 +vt 0.625000 0.437500 +vt 0.625000 0.875000 +vt 0.625000 0.375000 +vt 0.625000 0.812500 +vt 0.625000 0.312500 +vt 0.625000 0.750000 +vt 0.625000 0.250000 +vt 0.593750 0.437500 +vt 0.593750 0.375000 +vt 0.593750 0.875000 +vt 0.593750 0.812500 +vt 0.593750 0.312500 +vt 0.593750 0.750000 +vt 0.593750 0.250000 +vt 0.593750 0.687500 +vt 0.593750 0.187500 +vt 0.593750 0.625000 +vt 0.593750 0.125000 +vt 0.593750 0.562500 +vt 0.593750 0.062500 +vt 0.593750 0.500000 +vt 0.609375 1.000000 +vt 0.593750 0.937500 +vt 0.609375 0.000000 +vt 0.562500 0.187500 +vt 0.562500 0.125000 +vt 0.562500 0.625000 +vt 0.562500 0.562500 +vt 0.562500 0.062500 +vt 0.562500 0.500000 +vt 0.578125 1.000000 +vt 0.562500 0.937500 +vt 0.578125 0.000000 +vt 0.562500 0.437500 +vt 0.562500 0.875000 +vt 0.562500 0.375000 +vt 0.562500 0.812500 +vt 0.562500 0.312500 +vt 0.562500 0.750000 +vt 0.562500 0.250000 +vt 0.562500 0.687500 +vt 0.531250 0.375000 +vt 0.531250 0.312500 +vt 0.531250 0.812500 +vt 0.531250 0.750000 +vt 0.531250 0.250000 +vt 0.531250 0.687500 +vt 0.531250 0.187500 +vt 0.531250 0.625000 +vt 0.531250 0.125000 +vt 0.531250 0.562500 +vt 0.531250 0.062500 +vt 0.531250 0.500000 +vt 0.546875 1.000000 +vt 0.531250 0.937500 +vt 0.546875 0.000000 +vt 0.531250 0.437500 +vt 0.531250 0.875000 +vt 0.500000 0.125000 +vt 0.500000 0.062500 +vt 0.500000 0.562500 +vt 0.500000 0.500000 +vt 0.515625 1.000000 +vt 0.500000 0.937500 +vt 0.515625 0.000000 +vt 0.500000 0.437500 +vt 0.500000 0.875000 +vt 0.500000 0.375000 +vt 0.500000 0.812500 +vt 0.500000 0.312500 +vt 0.500000 0.750000 +vt 0.500000 0.250000 +vt 0.500000 0.687500 +vt 0.500000 0.187500 +vt 0.500000 0.625000 +vt 0.468750 0.812500 +vt 0.468750 0.750000 +vt 0.468750 0.312500 +vt 0.468750 0.250000 +vt 0.468750 0.687500 +vt 0.468750 0.187500 +vt 0.468750 0.625000 +vt 0.468750 0.125000 +vt 0.468750 0.562500 +vt 0.468750 0.062500 +vt 0.468750 0.500000 +vt 0.484375 1.000000 +vt 0.468750 0.937500 +vt 0.484375 0.000000 +vt 0.468750 0.437500 +vt 0.468750 0.875000 +vt 0.468750 0.375000 +vt 0.437500 0.562500 +vt 0.437500 0.500000 +vt 0.453125 1.000000 +vt 0.437500 0.937500 +vt 0.453125 0.000000 +vt 0.437500 0.062500 +vt 0.437500 0.437500 +vt 0.437500 0.875000 +vt 0.437500 0.375000 +vt 0.437500 0.812500 +vt 0.437500 0.312500 +vt 0.437500 0.750000 +vt 0.437500 0.250000 +vt 0.437500 0.687500 +vt 0.437500 0.187500 +vt 0.437500 0.625000 +vt 0.437500 0.125000 +vt 0.406250 0.312500 +vt 0.406250 0.250000 +vt 0.406250 0.750000 +vt 0.406250 0.687500 +vt 0.406250 0.187500 +vt 0.406250 0.625000 +vt 0.406250 0.125000 +vt 0.406250 0.562500 +vt 0.406250 0.062500 +vt 0.406250 0.500000 +vt 0.421875 1.000000 +vt 0.406250 0.937500 +vt 0.421875 0.000000 +vt 0.406250 0.437500 +vt 0.406250 0.875000 +vt 0.406250 0.375000 +vt 0.406250 0.812500 +vt 0.390625 1.000000 +vt 0.375000 0.937500 +vt 0.390625 0.000000 +vt 0.375000 0.062500 +vt 0.375000 0.500000 +vt 0.375000 0.437500 +vt 0.375000 0.875000 +vt 0.375000 0.375000 +vt 0.375000 0.812500 +vt 0.375000 0.312500 +vt 0.375000 0.750000 +vt 0.375000 0.250000 +vt 0.375000 0.687500 +vt 0.375000 0.187500 +vt 0.375000 0.625000 +vt 0.375000 0.125000 +vt 0.375000 0.562500 +vt 0.343750 0.750000 +vt 0.343750 0.687500 +vt 0.343750 0.250000 +vt 0.343750 0.187500 +vt 0.343750 0.625000 +vt 0.343750 0.125000 +vt 0.343750 0.562500 +vt 0.343750 0.062500 +vt 0.343750 0.500000 +vt 0.359375 1.000000 +vt 0.343750 0.937500 +vt 0.359375 0.000000 +vt 0.343750 0.437500 +vt 0.343750 0.875000 +vt 0.343750 0.375000 +vt 0.343750 0.812500 +vt 0.343750 0.312500 +vt 0.312500 0.500000 +vt 0.312500 0.437500 +vt 0.312500 0.937500 +vt 0.312500 0.875000 +vt 0.312500 0.375000 +vt 0.312500 0.812500 +vt 0.312500 0.312500 +vt 0.312500 0.750000 +vt 0.312500 0.250000 +vt 0.312500 0.687500 +vt 0.312500 0.187500 +vt 0.312500 0.625000 +vt 0.312500 0.125000 +vt 0.312500 0.562500 +vt 0.312500 0.062500 +vt 0.328125 1.000000 +vt 0.328125 0.000000 +vt 0.281250 0.250000 +vt 0.281250 0.187500 +vt 0.281250 0.687500 +vt 0.281250 0.625000 +vt 0.281250 0.125000 +vt 0.281250 0.562500 +vt 0.281250 0.062500 +vt 0.281250 0.500000 +vt 0.296875 1.000000 +vt 0.281250 0.937500 +vt 0.296875 0.000000 +vt 0.281250 0.437500 +vt 0.281250 0.875000 +vt 0.281250 0.375000 +vt 0.281250 0.812500 +vt 0.281250 0.312500 +vt 0.281250 0.750000 +vt 0.250000 0.437500 +vt 0.250000 0.375000 +vt 0.250000 0.875000 +vt 0.250000 0.812500 +vt 0.250000 0.312500 +vt 0.250000 0.750000 +vt 0.250000 0.250000 +vt 0.250000 0.687500 +vt 0.250000 0.187500 +vt 0.250000 0.625000 +vt 0.250000 0.125000 +vt 0.250000 0.562500 +vt 0.250000 0.062500 +vt 0.250000 0.500000 +vt 0.265625 1.000000 +vt 0.250000 0.937500 +vt 0.265625 0.000000 +vt 0.218750 0.187500 +vt 0.218750 0.125000 +vt 0.218750 0.625000 +vt 0.218750 0.562500 +vt 0.218750 0.062500 +vt 0.218750 0.500000 +vt 0.234375 1.000000 +vt 0.218750 0.937500 +vt 0.234375 0.000000 +vt 0.218750 0.437500 +vt 0.218750 0.875000 +vt 0.218750 0.375000 +vt 0.218750 0.812500 +vt 0.218750 0.312500 +vt 0.218750 0.750000 +vt 0.218750 0.250000 +vt 0.218750 0.687500 +vt 0.187500 0.875000 +vt 0.187500 0.812500 +vt 0.187500 0.375000 +vt 0.187500 0.312500 +vt 0.187500 0.750000 +vt 0.187500 0.250000 +vt 0.187500 0.687500 +vt 0.187500 0.187500 +vt 0.187500 0.625000 +vt 0.187500 0.125000 +vt 0.187500 0.562500 +vt 0.187500 0.062500 +vt 0.187500 0.500000 +vt 0.203125 1.000000 +vt 0.187500 0.937500 +vt 0.203125 0.000000 +vt 0.187500 0.437500 +vt 0.156250 0.625000 +vt 0.156250 0.562500 +vt 0.156250 0.125000 +vt 0.156250 0.062500 +vt 0.156250 0.500000 +vt 0.171875 1.000000 +vt 0.156250 0.937500 +vt 0.171875 0.000000 +vt 0.156250 0.437500 +vt 0.156250 0.875000 +vt 0.156250 0.375000 +vt 0.156250 0.812500 +vt 0.156250 0.312500 +vt 0.156250 0.750000 +vt 0.156250 0.250000 +vt 0.156250 0.687500 +vt 0.156250 0.187500 +vt 0.125000 0.375000 +vt 0.125000 0.312500 +vt 0.125000 0.812500 +vt 0.125000 0.750000 +vt 0.125000 0.250000 +vt 0.125000 0.687500 +vt 0.125000 0.187500 +vt 0.125000 0.625000 +vt 0.125000 0.125000 +vt 0.125000 0.562500 +vt 0.125000 0.062500 +vt 0.125000 0.500000 +vt 0.140625 1.000000 +vt 0.125000 0.937500 +vt 0.140625 0.000000 +vt 0.125000 0.437500 +vt 0.125000 0.875000 +vt 0.093750 0.125000 +vt 0.093750 0.062500 +vt 0.093750 0.562500 +vt 0.093750 0.500000 +vt 0.109375 1.000000 +vt 0.093750 0.937500 +vt 0.109375 0.000000 +vt 0.093750 0.437500 +vt 0.093750 0.875000 +vt 0.093750 0.375000 +vt 0.093750 0.812500 +vt 0.093750 0.312500 +vt 0.093750 0.750000 +vt 0.093750 0.250000 +vt 0.093750 0.687500 +vt 0.093750 0.187500 +vt 0.093750 0.625000 +vt 0.062500 0.812500 +vt 0.062500 0.750000 +vt 0.062500 0.312500 +vt 0.062500 0.250000 +vt 0.062500 0.687500 +vt 0.062500 0.187500 +vt 0.062500 0.625000 +vt 0.062500 0.125000 +vt 0.062500 0.562500 +vt 0.062500 0.062500 +vt 0.062500 0.500000 +vt 0.078125 1.000000 +vt 0.062500 0.937500 +vt 0.078125 0.000000 +vt 0.062500 0.437500 +vt 0.062500 0.875000 +vt 0.062500 0.375000 +vt 0.031250 0.562500 +vt 0.031250 0.500000 +vt 0.046875 1.000000 +vt 0.031250 0.937500 +vt 0.046875 0.000000 +vt 0.031250 0.062500 +vt 0.031250 0.437500 +vt 0.031250 0.875000 +vt 0.031250 0.375000 +vt 0.031250 0.812500 +vt 0.031250 0.312500 +vt 0.031250 0.750000 +vt 0.031250 0.250000 +vt 0.031250 0.687500 +vt 0.031250 0.187500 +vt 0.031250 0.625000 +vt 0.031250 0.125000 +vt 0.000000 0.312500 +vt 0.000000 0.250000 +vt 0.000000 0.750000 +vt 0.000000 0.687500 +vt 0.000000 0.187500 +vt 0.000000 0.625000 +vt 0.000000 0.125000 +vt 0.000000 0.562500 +vt 0.000000 0.062500 +vt 0.000000 0.500000 +vt 0.015625 1.000000 +vt 0.000000 0.937500 +vt 0.015625 0.000000 +vt 0.000000 0.437500 +vt 0.000000 0.875000 +vt 0.000000 0.375000 +vt 0.000000 0.812500 +vt 0.984375 0.000000 +vt 1.000000 0.062500 +vt 0.968750 0.062500 +vt 1.000000 0.437500 +vt 1.000000 0.500000 +vt 0.968750 0.500000 +vt 0.968750 0.437500 +vt 1.000000 0.875000 +vt 1.000000 0.937500 +vt 0.968750 0.937500 +vt 0.968750 0.875000 +vt 1.000000 0.375000 +vt 0.968750 0.375000 +vt 1.000000 0.812500 +vt 0.968750 0.812500 +vt 1.000000 0.312500 +vt 0.968750 0.312500 +vt 1.000000 0.750000 +vt 0.968750 0.750000 +vt 1.000000 0.250000 +vt 0.968750 0.250000 +vt 1.000000 0.687500 +vt 0.968750 0.687500 +vt 1.000000 0.187500 +vt 0.968750 0.187500 +vt 1.000000 0.625000 +vt 0.968750 0.625000 +vt 1.000000 0.125000 +vt 0.968750 0.125000 +vt 1.000000 0.562500 +vt 0.968750 0.562500 +vt 0.984375 1.000000 +vt 0.937500 0.250000 +vt 0.937500 0.187500 +vt 0.937500 0.687500 +vt 0.937500 0.625000 +vt 0.937500 0.125000 +vt 0.937500 0.562500 +vt 0.937500 0.062500 +vt 0.937500 0.500000 +vt 0.953125 1.000000 +vt 0.937500 0.937500 +vt 0.953125 0.000000 +vt 0.937500 0.437500 +vt 0.937500 0.875000 +vt 0.937500 0.375000 +vt 0.937500 0.812500 +vt 0.937500 0.312500 +vt 0.937500 0.750000 +vt 0.906250 0.937500 +vt 0.906250 0.875000 +vt 0.906250 0.437500 +vt 0.906250 0.375000 +vt 0.906250 0.812500 +vt 0.906250 0.312500 +vt 0.906250 0.750000 +vt 0.906250 0.250000 +vt 0.906250 0.687500 +vt 0.906250 0.187500 +vt 0.906250 0.625000 +vt 0.906250 0.125000 +vt 0.906250 0.562500 +vt 0.906250 0.062500 +vt 0.906250 0.500000 +vt 0.921875 1.000000 +vt 0.921875 0.000000 +vt 0.875000 0.687500 +vt 0.875000 0.625000 +vt 0.875000 0.187500 +vt 0.875000 0.125000 +vt 0.875000 0.562500 +vt 0.875000 0.062500 +vt 0.875000 0.500000 +vt 0.890625 1.000000 +vt 0.875000 0.937500 +vt 0.890625 0.000000 +vt 0.875000 0.437500 +vt 0.875000 0.875000 +vt 0.875000 0.375000 +vt 0.875000 0.812500 +vt 0.875000 0.312500 +vt 0.875000 0.750000 +vt 0.875000 0.250000 +vt 0.843750 0.437500 +vt 0.843750 0.375000 +vt 0.843750 0.875000 +vt 0.843750 0.812500 +vt 0.843750 0.312500 +vt 0.843750 0.750000 +vt 0.843750 0.250000 +vt 0.843750 0.687500 +vt 0.843750 0.187500 +vt 0.843750 0.625000 +vt 0.843750 0.125000 +vt 0.843750 0.562500 +vt 0.843750 0.062500 +vt 0.843750 0.500000 +vt 0.859375 1.000000 +vt 0.843750 0.937500 +vt 0.859375 0.000000 +vt 0.812500 0.187500 +vt 0.812500 0.125000 +vt 0.812500 0.625000 +vt 0.812500 0.562500 +vt 0.812500 0.062500 +vt 0.812500 0.500000 +vt 0.828125 1.000000 +vt 0.812500 0.937500 +vt 0.828125 0.000000 +vt 0.812500 0.437500 +vt 0.812500 0.875000 +vt 0.812500 0.375000 +vt 0.812500 0.812500 +vt 0.812500 0.312500 +vt 0.812500 0.750000 +vt 0.812500 0.250000 +vt 0.812500 0.687500 +vt 0.781250 0.875000 +vt 0.781250 0.812500 +vt 0.781250 0.375000 +vt 0.781250 0.312500 +vt 0.781250 0.750000 +vt 0.781250 0.250000 +vt 0.781250 0.687500 +vt 0.781250 0.187500 +vt 0.781250 0.625000 +vt 0.781250 0.125000 +vt 0.781250 0.562500 +vt 0.781250 0.062500 +vt 0.781250 0.500000 +vt 0.796875 1.000000 +vt 0.781250 0.937500 +vt 0.796875 0.000000 +vt 0.781250 0.437500 +vt 0.765625 1.000000 +vt 0.765625 0.000000 +s 1 +f 513/15/492 512/16/491 51/17/30 52/18/31 +f 35/19/14 509/20/488 44/21/23 45/22/24 +f 514/23/493 513/15/492 52/18/31 53/24/32 +f 36/25/15 35/19/14 45/22/24 46/26/25 +f 506/27/485 114/28/93 39/29/18 +f 340/30/319 514/23/493 53/24/32 +f 37/31/16 36/25/15 46/26/25 47/32/26 +f 507/33/486 506/27/485 39/29/18 40/34/19 +f 510/35/489 37/31/16 47/32/26 48/36/27 +f 33/37/12 507/33/486 40/34/19 41/38/20 +f 38/39/17 510/35/489 48/36/27 49/40/28 +f 508/41/487 33/37/12 41/38/20 42/42/21 +f 511/43/490 38/39/17 49/40/28 50/44/29 +f 34/45/13 508/41/487 42/42/21 43/46/22 +f 512/16/491 511/43/490 50/44/29 51/17/30 +f 509/20/488 34/45/13 43/46/22 44/21/23 +f 51/17/30 50/44/29 65/47/44 66/48/45 +f 44/21/23 43/46/22 58/49/37 59/50/38 +f 52/18/31 51/17/30 66/48/45 67/51/46 +f 45/22/24 44/21/23 59/50/38 60/52/39 +f 53/24/32 52/18/31 67/51/46 68/53/47 +f 46/26/25 45/22/24 60/52/39 61/54/40 +f 39/29/18 114/55/93 54/56/33 +f 340/57/319 53/24/32 68/53/47 +f 47/32/26 46/26/25 61/54/40 62/58/41 +f 40/34/19 39/29/18 54/56/33 55/59/34 +f 48/36/27 47/32/26 62/58/41 63/60/42 +f 41/38/20 40/34/19 55/59/34 56/61/35 +f 49/40/28 48/36/27 63/60/42 64/62/43 +f 42/42/21 41/38/20 56/61/35 57/63/36 +f 50/44/29 49/40/28 64/62/43 65/47/44 +f 43/46/22 42/42/21 57/63/36 58/49/37 +f 55/59/34 54/56/33 69/64/48 70/65/49 +f 63/60/42 62/58/41 77/66/56 78/67/57 +f 56/61/35 55/59/34 70/65/49 71/68/50 +f 64/62/43 63/60/42 78/67/57 79/69/58 +f 57/63/36 56/61/35 71/68/50 72/70/51 +f 65/47/44 64/62/43 79/69/58 80/71/59 +f 58/49/37 57/63/36 72/70/51 73/72/52 +f 66/48/45 65/47/44 80/71/59 81/73/60 +f 59/50/38 58/49/37 73/72/52 74/74/53 +f 67/51/46 66/48/45 81/73/60 82/75/61 +f 60/52/39 59/50/38 74/74/53 75/76/54 +f 68/53/47 67/51/46 82/75/61 83/77/62 +f 61/54/40 60/52/39 75/76/54 76/78/55 +f 54/56/33 114/79/93 69/64/48 +f 340/80/319 68/53/47 83/77/62 +f 62/58/41 61/54/40 76/78/55 77/66/56 +f 74/74/53 73/72/52 88/81/67 89/82/68 +f 82/75/61 81/73/60 96/83/75 97/84/76 +f 75/76/54 74/74/53 89/82/68 90/85/69 +f 83/77/62 82/75/61 97/84/76 98/86/77 +f 76/78/55 75/76/54 90/85/69 91/87/70 +f 69/64/48 114/88/93 84/89/63 +f 340/90/319 83/77/62 98/86/77 +f 77/66/56 76/78/55 91/87/70 92/91/71 +f 70/65/49 69/64/48 84/89/63 85/92/64 +f 78/67/57 77/66/56 92/91/71 93/93/72 +f 71/68/50 70/65/49 85/92/64 86/94/65 +f 79/69/58 78/67/57 93/93/72 94/95/73 +f 72/70/51 71/68/50 86/94/65 87/96/66 +f 80/71/59 79/69/58 94/95/73 95/97/74 +f 73/72/52 72/70/51 87/96/66 88/81/67 +f 81/73/60 80/71/59 95/97/74 96/83/75 +f 93/93/72 92/91/71 107/98/86 108/99/87 +f 86/94/65 85/92/64 100/100/79 101/101/80 +f 94/95/73 93/93/72 108/99/87 109/102/88 +f 87/96/66 86/94/65 101/101/80 102/103/81 +f 95/97/74 94/95/73 109/102/88 110/104/89 +f 88/81/67 87/96/66 102/103/81 103/105/82 +f 96/83/75 95/97/74 110/104/89 111/106/90 +f 89/82/68 88/81/67 103/105/82 104/107/83 +f 97/84/76 96/83/75 111/106/90 112/108/91 +f 90/85/69 89/82/68 104/107/83 105/109/84 +f 98/86/77 97/84/76 112/108/91 113/110/92 +f 91/87/70 90/85/69 105/109/84 106/111/85 +f 84/89/63 114/112/93 99/113/78 +f 340/114/319 98/86/77 113/110/92 +f 92/91/71 91/87/70 106/111/85 107/98/86 +f 85/92/64 84/89/63 99/113/78 100/100/79 +f 112/108/91 111/106/90 127/115/106 128/116/107 +f 105/109/84 104/107/83 120/117/99 121/118/100 +f 113/110/92 112/108/91 128/116/107 129/119/108 +f 106/111/85 105/109/84 121/118/100 122/120/101 +f 99/113/78 114/121/93 115/122/94 +f 340/123/319 113/110/92 129/119/108 +f 107/98/86 106/111/85 122/120/101 123/124/102 +f 100/100/79 99/113/78 115/122/94 116/125/95 +f 108/99/87 107/98/86 123/124/102 124/126/103 +f 101/101/80 100/100/79 116/125/95 117/127/96 +f 109/102/88 108/99/87 124/126/103 125/128/104 +f 102/103/81 101/101/80 117/127/96 118/129/97 +f 110/104/89 109/102/88 125/128/104 126/130/105 +f 103/105/82 102/103/81 118/129/97 119/131/98 +f 111/106/90 110/104/89 126/130/105 127/115/106 +f 104/107/83 103/105/82 119/131/98 120/117/99 +f 125/128/104 124/126/103 139/132/118 140/133/119 +f 118/129/97 117/127/96 132/134/111 133/135/112 +f 126/130/105 125/128/104 140/133/119 141/136/120 +f 119/131/98 118/129/97 133/135/112 134/137/113 +f 127/115/106 126/130/105 141/136/120 142/138/121 +f 120/117/99 119/131/98 134/137/113 135/139/114 +f 128/116/107 127/115/106 142/138/121 143/140/122 +f 121/118/100 120/117/99 135/139/114 136/141/115 +f 129/119/108 128/116/107 143/140/122 144/142/123 +f 122/120/101 121/118/100 136/141/115 137/143/116 +f 115/122/94 114/144/93 130/145/109 +f 340/146/319 129/119/108 144/142/123 +f 123/124/102 122/120/101 137/143/116 138/147/117 +f 116/125/95 115/122/94 130/145/109 131/148/110 +f 124/126/103 123/124/102 138/147/117 139/132/118 +f 117/127/96 116/125/95 131/148/110 132/134/111 +f 144/142/123 143/140/122 158/149/137 159/150/138 +f 137/143/116 136/141/115 151/151/130 152/152/131 +f 130/145/109 114/153/93 145/154/124 +f 340/155/319 144/142/123 159/150/138 +f 138/147/117 137/143/116 152/152/131 153/156/132 +f 131/148/110 130/145/109 145/154/124 146/157/125 +f 139/132/118 138/147/117 153/156/132 154/158/133 +f 132/134/111 131/148/110 146/157/125 147/159/126 +f 140/133/119 139/132/118 154/158/133 155/160/134 +f 133/135/112 132/134/111 147/159/126 148/161/127 +f 141/136/120 140/133/119 155/160/134 156/162/135 +f 134/137/113 133/135/112 148/161/127 149/163/128 +f 142/138/121 141/136/120 156/162/135 157/164/136 +f 135/139/114 134/137/113 149/163/128 150/165/129 +f 143/140/122 142/138/121 157/164/136 158/149/137 +f 136/141/115 135/139/114 150/165/129 151/151/130 +f 148/161/127 147/159/126 162/166/141 163/167/142 +f 156/162/135 155/160/134 170/168/149 171/169/150 +f 149/163/128 148/161/127 163/167/142 164/170/143 +f 157/164/136 156/162/135 171/169/150 172/171/151 +f 150/165/129 149/163/128 164/170/143 165/172/144 +f 158/149/137 157/164/136 172/171/151 173/173/152 +f 151/151/130 150/165/129 165/172/144 166/174/145 +f 159/150/138 158/149/137 173/173/152 174/175/153 +f 152/152/131 151/151/130 166/174/145 167/176/146 +f 145/154/124 114/177/93 160/178/139 +f 340/179/319 159/150/138 174/175/153 +f 153/156/132 152/152/131 167/176/146 168/180/147 +f 146/157/125 145/154/124 160/178/139 161/181/140 +f 154/158/133 153/156/132 168/180/147 169/182/148 +f 147/159/126 146/157/125 161/181/140 162/166/141 +f 155/160/134 154/158/133 169/182/148 170/168/149 +f 167/176/146 166/174/145 181/183/160 182/184/161 +f 160/178/139 114/185/93 175/186/154 +f 340/187/319 174/175/153 189/188/168 +f 168/180/147 167/176/146 182/184/161 183/189/162 +f 161/181/140 160/178/139 175/186/154 176/190/155 +f 169/182/148 168/180/147 183/189/162 184/191/163 +f 162/166/141 161/181/140 176/190/155 177/192/156 +f 170/168/149 169/182/148 184/191/163 185/193/164 +f 163/167/142 162/166/141 177/192/156 178/194/157 +f 171/169/150 170/168/149 185/193/164 186/195/165 +f 164/170/143 163/167/142 178/194/157 179/196/158 +f 172/171/151 171/169/150 186/195/165 187/197/166 +f 165/172/144 164/170/143 179/196/158 180/198/159 +f 173/173/152 172/171/151 187/197/166 188/199/167 +f 166/174/145 165/172/144 180/198/159 181/183/160 +f 174/175/153 173/173/152 188/199/167 189/188/168 +f 186/195/165 185/193/164 200/200/179 201/201/180 +f 179/196/158 178/194/157 193/202/172 194/203/173 +f 187/197/166 186/195/165 201/201/180 202/204/181 +f 180/198/159 179/196/158 194/203/173 195/205/174 +f 188/199/167 187/197/166 202/204/181 203/206/182 +f 181/183/160 180/198/159 195/205/174 196/207/175 +f 189/188/168 188/199/167 203/206/182 204/208/183 +f 182/184/161 181/183/160 196/207/175 197/209/176 +f 175/186/154 114/210/93 190/211/169 +f 340/212/319 189/188/168 204/208/183 +f 183/189/162 182/184/161 197/209/176 198/213/177 +f 176/190/155 175/186/154 190/211/169 191/214/170 +f 184/191/163 183/189/162 198/213/177 199/215/178 +f 177/192/156 176/190/155 191/214/170 192/216/171 +f 185/193/164 184/191/163 199/215/178 200/200/179 +f 178/194/157 177/192/156 192/216/171 193/202/172 +f 190/211/169 114/217/93 205/218/184 +f 340/219/319 204/208/183 219/220/198 +f 198/213/177 197/209/176 212/221/191 213/222/192 +f 191/214/170 190/211/169 205/218/184 206/223/185 +f 199/215/178 198/213/177 213/222/192 214/224/193 +f 192/216/171 191/214/170 206/223/185 207/225/186 +f 200/200/179 199/215/178 214/224/193 215/226/194 +f 193/202/172 192/216/171 207/225/186 208/227/187 +f 201/201/180 200/200/179 215/226/194 216/228/195 +f 194/203/173 193/202/172 208/227/187 209/229/188 +f 202/204/181 201/201/180 216/228/195 217/230/196 +f 195/205/174 194/203/173 209/229/188 210/231/189 +f 203/206/182 202/204/181 217/230/196 218/232/197 +f 196/207/175 195/205/174 210/231/189 211/233/190 +f 204/208/183 203/206/182 218/232/197 219/220/198 +f 197/209/176 196/207/175 211/233/190 212/221/191 +f 209/229/188 208/227/187 223/234/202 224/235/203 +f 217/230/196 216/228/195 231/236/210 232/237/211 +f 210/231/189 209/229/188 224/235/203 225/238/204 +f 218/232/197 217/230/196 232/237/211 233/239/212 +f 211/233/190 210/231/189 225/238/204 226/240/205 +f 219/220/198 218/232/197 233/239/212 234/241/213 +f 212/221/191 211/233/190 226/240/205 227/242/206 +f 205/218/184 114/243/93 220/244/199 +f 340/245/319 219/220/198 234/241/213 +f 213/222/192 212/221/191 227/242/206 228/246/207 +f 206/223/185 205/218/184 220/244/199 221/247/200 +f 214/224/193 213/222/192 228/246/207 229/248/208 +f 207/225/186 206/223/185 221/247/200 222/249/201 +f 215/226/194 214/224/193 229/248/208 230/250/209 +f 208/227/187 207/225/186 222/249/201 223/234/202 +f 216/228/195 215/226/194 230/250/209 231/236/210 +f 228/246/207 227/242/206 242/251/221 243/252/222 +f 221/247/200 220/244/199 235/253/214 236/254/215 +f 229/248/208 228/246/207 243/252/222 244/255/223 +f 222/249/201 221/247/200 236/254/215 237/256/216 +f 230/250/209 229/248/208 244/255/223 245/257/224 +f 223/234/202 222/249/201 237/256/216 238/258/217 +f 231/236/210 230/250/209 245/257/224 246/259/225 +f 224/235/203 223/234/202 238/258/217 239/260/218 +f 232/237/211 231/236/210 246/259/225 247/261/226 +f 225/238/204 224/235/203 239/260/218 240/262/219 +f 233/239/212 232/237/211 247/261/226 248/263/227 +f 226/240/205 225/238/204 240/262/219 241/264/220 +f 234/241/213 233/239/212 248/263/227 249/265/228 +f 227/242/206 226/240/205 241/264/220 242/251/221 +f 220/244/199 114/266/93 235/253/214 +f 340/267/319 234/241/213 249/265/228 +f 247/261/226 246/259/225 261/268/240 262/269/241 +f 240/262/219 239/260/218 254/270/233 255/271/234 +f 248/263/227 247/261/226 262/269/241 263/272/242 +f 241/264/220 240/262/219 255/271/234 256/273/235 +f 249/265/228 248/263/227 263/272/242 264/274/243 +f 242/251/221 241/264/220 256/273/235 257/275/236 +f 235/253/214 114/276/93 250/277/229 +f 340/278/319 249/265/228 264/274/243 +f 243/252/222 242/251/221 257/275/236 258/279/237 +f 236/254/215 235/253/214 250/277/229 251/280/230 +f 244/255/223 243/252/222 258/279/237 259/281/238 +f 237/256/216 236/254/215 251/280/230 252/282/231 +f 245/257/224 244/255/223 259/281/238 260/283/239 +f 238/258/217 237/256/216 252/282/231 253/284/232 +f 246/259/225 245/257/224 260/283/239 261/268/240 +f 239/260/218 238/258/217 253/284/232 254/270/233 +f 259/281/238 258/279/237 273/285/252 274/286/253 +f 252/282/231 251/280/230 266/287/245 267/288/246 +f 260/283/239 259/281/238 274/286/253 275/289/254 +f 253/284/232 252/282/231 267/288/246 268/290/247 +f 261/268/240 260/283/239 275/289/254 276/291/255 +f 254/270/233 253/284/232 268/290/247 269/292/248 +f 262/269/241 261/268/240 276/291/255 277/293/256 +f 255/271/234 254/270/233 269/292/248 270/294/249 +f 263/272/242 262/269/241 277/293/256 278/295/257 +f 256/273/235 255/271/234 270/294/249 271/296/250 +f 264/274/243 263/272/242 278/295/257 279/297/258 +f 257/275/236 256/273/235 271/296/250 272/298/251 +f 250/277/229 114/299/93 265/300/244 +f 340/301/319 264/274/243 279/297/258 +f 258/279/237 257/275/236 272/298/251 273/285/252 +f 251/280/230 250/277/229 265/300/244 266/287/245 +f 278/295/257 277/293/256 292/302/271 293/303/272 +f 271/296/250 270/294/249 285/304/264 286/305/265 +f 279/297/258 278/295/257 293/303/272 294/306/273 +f 272/298/251 271/296/250 286/305/265 287/307/266 +f 265/300/244 114/308/93 280/309/259 +f 340/310/319 279/297/258 294/306/273 +f 273/285/252 272/298/251 287/307/266 288/311/267 +f 266/287/245 265/300/244 280/309/259 281/312/260 +f 274/286/253 273/285/252 288/311/267 289/313/268 +f 267/288/246 266/287/245 281/312/260 282/314/261 +f 275/289/254 274/286/253 289/313/268 290/315/269 +f 268/290/247 267/288/246 282/314/261 283/316/262 +f 276/291/255 275/289/254 290/315/269 291/317/270 +f 269/292/248 268/290/247 283/316/262 284/318/263 +f 277/293/256 276/291/255 291/317/270 292/302/271 +f 270/294/249 269/292/248 284/318/263 285/304/264 +f 282/314/261 281/312/260 296/319/275 297/320/276 +f 290/315/269 289/313/268 304/321/283 305/322/284 +f 283/316/262 282/314/261 297/320/276 298/323/277 +f 291/317/270 290/315/269 305/322/284 306/324/285 +f 284/318/263 283/316/262 298/323/277 299/325/278 +f 292/302/271 291/317/270 306/324/285 307/326/286 +f 285/304/264 284/318/263 299/325/278 300/327/279 +f 293/303/272 292/302/271 307/326/286 308/328/287 +f 286/305/265 285/304/264 300/327/279 301/329/280 +f 294/306/273 293/303/272 308/328/287 309/330/288 +f 287/307/266 286/305/265 301/329/280 302/331/281 +f 280/309/259 114/332/93 295/333/274 +f 340/334/319 294/306/273 309/330/288 +f 288/311/267 287/307/266 302/331/281 303/335/282 +f 281/312/260 280/309/259 295/333/274 296/319/275 +f 289/313/268 288/311/267 303/335/282 304/321/283 +f 301/329/280 300/327/279 315/336/294 316/337/295 +f 309/330/288 308/328/287 323/338/302 324/339/303 +f 302/331/281 301/329/280 316/337/295 317/340/296 +f 295/333/274 114/341/93 310/342/289 +f 340/343/319 309/330/288 324/339/303 +f 303/335/282 302/331/281 317/340/296 318/344/297 +f 296/319/275 295/333/274 310/342/289 311/345/290 +f 304/321/283 303/335/282 318/344/297 319/346/298 +f 297/320/276 296/319/275 311/345/290 312/347/291 +f 305/322/284 304/321/283 319/346/298 320/348/299 +f 298/323/277 297/320/276 312/347/291 313/349/292 +f 306/324/285 305/322/284 320/348/299 321/350/300 +f 299/325/278 298/323/277 313/349/292 314/351/293 +f 307/326/286 306/324/285 321/350/300 322/352/301 +f 300/327/279 299/325/278 314/351/293 315/336/294 +f 308/328/287 307/326/286 322/352/301 323/338/302 +f 320/348/299 319/346/298 334/353/313 335/354/314 +f 313/349/292 312/347/291 327/355/306 328/356/307 +f 321/350/300 320/348/299 335/354/314 336/357/315 +f 314/351/293 313/349/292 328/356/307 329/358/308 +f 322/352/301 321/350/300 336/357/315 337/359/316 +f 315/336/294 314/351/293 329/358/308 330/360/309 +f 323/338/302 322/352/301 337/359/316 338/361/317 +f 316/337/295 315/336/294 330/360/309 331/362/310 +f 324/339/303 323/338/302 338/361/317 339/363/318 +f 317/340/296 316/337/295 331/362/310 332/364/311 +f 310/342/289 114/365/93 325/366/304 +f 340/367/319 324/339/303 339/363/318 +f 318/344/297 317/340/296 332/364/311 333/368/312 +f 311/345/290 310/342/289 325/366/304 326/369/305 +f 319/346/298 318/344/297 333/368/312 334/353/313 +f 312/347/291 311/345/290 326/369/305 327/355/306 +f 339/363/318 338/361/317 354/370/333 355/371/334 +f 332/364/311 331/362/310 347/372/326 348/373/327 +f 325/366/304 114/374/93 341/375/320 +f 340/376/319 339/363/318 355/371/334 +f 333/368/312 332/364/311 348/373/327 349/377/328 +f 326/369/305 325/366/304 341/375/320 342/378/321 +f 334/353/313 333/368/312 349/377/328 350/379/329 +f 327/355/306 326/369/305 342/378/321 343/380/322 +f 335/354/314 334/353/313 350/379/329 351/381/330 +f 328/356/307 327/355/306 343/380/322 344/382/323 +f 336/357/315 335/354/314 351/381/330 352/383/331 +f 329/358/308 328/356/307 344/382/323 345/384/324 +f 337/359/316 336/357/315 352/383/331 353/385/332 +f 330/360/309 329/358/308 345/384/324 346/386/325 +f 338/361/317 337/359/316 353/385/332 354/370/333 +f 331/362/310 330/360/309 346/386/325 347/372/326 +f 344/382/323 343/380/322 358/387/337 359/388/338 +f 352/383/331 351/381/330 366/389/345 367/390/346 +f 345/384/324 344/382/323 359/388/338 360/391/339 +f 353/385/332 352/383/331 367/390/346 368/392/347 +f 346/386/325 345/384/324 360/391/339 361/393/340 +f 354/370/333 353/385/332 368/392/347 369/394/348 +f 347/372/326 346/386/325 361/393/340 362/395/341 +f 355/371/334 354/370/333 369/394/348 370/396/349 +f 348/373/327 347/372/326 362/395/341 363/397/342 +f 341/375/320 114/398/93 356/399/335 +f 340/400/319 355/371/334 370/396/349 +f 349/377/328 348/373/327 363/397/342 364/401/343 +f 342/378/321 341/375/320 356/399/335 357/402/336 +f 350/379/329 349/377/328 364/401/343 365/403/344 +f 343/380/322 342/378/321 357/402/336 358/387/337 +f 351/381/330 350/379/329 365/403/344 366/389/345 +f 363/397/342 362/395/341 377/404/356 378/405/357 +f 356/399/335 114/406/93 371/407/350 +f 340/408/319 370/396/349 385/409/364 +f 364/401/343 363/397/342 378/405/357 379/410/358 +f 357/402/336 356/399/335 371/407/350 372/411/351 +f 365/403/344 364/401/343 379/410/358 380/412/359 +f 358/387/337 357/402/336 372/411/351 373/413/352 +f 366/389/345 365/403/344 380/412/359 381/414/360 +f 359/388/338 358/387/337 373/413/352 374/415/353 +f 367/390/346 366/389/345 381/414/360 382/416/361 +f 360/391/339 359/388/338 374/415/353 375/417/354 +f 368/392/347 367/390/346 382/416/361 383/418/362 +f 361/393/340 360/391/339 375/417/354 376/419/355 +f 369/394/348 368/392/347 383/418/362 384/420/363 +f 362/395/341 361/393/340 376/419/355 377/404/356 +f 370/396/349 369/394/348 384/420/363 385/409/364 +f 382/416/361 381/414/360 396/421/375 397/422/376 +f 375/417/354 374/415/353 389/423/368 390/424/369 +f 383/418/362 382/416/361 397/422/376 398/425/377 +f 376/419/355 375/417/354 390/424/369 391/426/370 +f 384/420/363 383/418/362 398/425/377 399/427/378 +f 377/404/356 376/419/355 391/426/370 392/428/371 +f 385/409/364 384/420/363 399/427/378 400/429/379 +f 378/405/357 377/404/356 392/428/371 393/430/372 +f 371/407/350 114/431/93 386/432/365 +f 340/433/319 385/409/364 400/429/379 +f 379/410/358 378/405/357 393/430/372 394/434/373 +f 372/411/351 371/407/350 386/432/365 387/435/366 +f 380/412/359 379/410/358 394/434/373 395/436/374 +f 373/413/352 372/411/351 387/435/366 388/437/367 +f 381/414/360 380/412/359 395/436/374 396/421/375 +f 374/415/353 373/413/352 388/437/367 389/423/368 +f 340/438/319 400/439/379 415/440/394 +f 394/441/373 393/442/372 408/443/387 409/444/388 +f 387/445/366 386/446/365 401/447/380 402/448/381 +f 395/449/374 394/441/373 409/444/388 410/450/389 +f 388/451/367 387/445/366 402/448/381 403/452/382 +f 396/453/375 395/449/374 410/450/389 411/454/390 +f 389/455/368 388/451/367 403/452/382 404/456/383 +f 397/457/376 396/453/375 411/454/390 412/458/391 +f 390/459/369 389/455/368 404/456/383 405/460/384 +f 398/461/377 397/457/376 412/458/391 413/462/392 +f 391/463/370 390/459/369 405/460/384 406/464/385 +f 399/465/378 398/461/377 413/462/392 414/466/393 +f 392/467/371 391/463/370 406/464/385 407/468/386 +f 400/439/379 399/465/378 414/466/393 415/440/394 +f 393/442/372 392/467/371 407/468/386 408/443/387 +f 386/446/365 114/469/93 401/447/380 +f 413/462/392 412/458/391 427/470/406 428/471/407 +f 406/464/385 405/460/384 420/472/399 421/473/400 +f 414/466/393 413/462/392 428/471/407 429/474/408 +f 407/468/386 406/464/385 421/473/400 422/475/401 +f 415/440/394 414/466/393 429/474/408 430/476/409 +f 408/443/387 407/468/386 422/475/401 423/477/402 +f 401/447/380 114/478/93 416/479/395 +f 340/480/319 415/440/394 430/476/409 +f 409/444/388 408/443/387 423/477/402 424/481/403 +f 402/448/381 401/447/380 416/479/395 417/482/396 +f 410/450/389 409/444/388 424/481/403 425/483/404 +f 403/452/382 402/448/381 417/482/396 418/484/397 +f 411/454/390 410/450/389 425/483/404 426/485/405 +f 404/456/383 403/452/382 418/484/397 419/486/398 +f 412/458/391 411/454/390 426/485/405 427/470/406 +f 405/460/384 404/456/383 419/486/398 420/472/399 +f 417/482/396 416/479/395 431/487/410 432/488/411 +f 425/483/404 424/481/403 439/489/418 440/490/419 +f 418/484/397 417/482/396 432/488/411 433/491/412 +f 426/485/405 425/483/404 440/490/419 441/492/420 +f 419/486/398 418/484/397 433/491/412 434/493/413 +f 427/470/406 426/485/405 441/492/420 442/494/421 +f 420/472/399 419/486/398 434/493/413 435/495/414 +f 428/471/407 427/470/406 442/494/421 443/496/422 +f 421/473/400 420/472/399 435/495/414 436/497/415 +f 429/474/408 428/471/407 443/496/422 444/498/423 +f 422/475/401 421/473/400 436/497/415 437/499/416 +f 430/476/409 429/474/408 444/498/423 445/500/424 +f 423/477/402 422/475/401 437/499/416 438/501/417 +f 416/479/395 114/502/93 431/487/410 +f 340/503/319 430/476/409 445/500/424 +f 424/481/403 423/477/402 438/501/417 439/489/418 +f 436/497/415 435/495/414 450/504/429 451/505/430 +f 444/498/423 443/496/422 458/506/437 459/507/438 +f 437/499/416 436/497/415 451/505/430 452/508/431 +f 445/500/424 444/498/423 459/507/438 460/509/439 +f 438/501/417 437/499/416 452/508/431 453/510/432 +f 431/487/410 114/511/93 446/512/425 +f 340/513/319 445/500/424 460/509/439 +f 439/489/418 438/501/417 453/510/432 454/514/433 +f 432/488/411 431/487/410 446/512/425 447/515/426 +f 440/490/419 439/489/418 454/514/433 455/516/434 +f 433/491/412 432/488/411 447/515/426 448/517/427 +f 441/492/420 440/490/419 455/516/434 456/518/435 +f 434/493/413 433/491/412 448/517/427 449/519/428 +f 442/494/421 441/492/420 456/518/435 457/520/436 +f 435/495/414 434/493/413 449/519/428 450/504/429 +f 443/496/422 442/494/421 457/520/436 458/506/437 +f 455/516/434 454/514/433 469/521/448 470/522/449 +f 448/517/427 447/515/426 462/523/441 463/524/442 +f 456/518/435 455/516/434 470/522/449 471/525/450 +f 449/519/428 448/517/427 463/524/442 464/526/443 +f 457/520/436 456/518/435 471/525/450 472/527/451 +f 450/504/429 449/519/428 464/526/443 465/528/444 +f 458/506/437 457/520/436 472/527/451 473/529/452 +f 451/505/430 450/504/429 465/528/444 466/530/445 +f 459/507/438 458/506/437 473/529/452 474/531/453 +f 452/508/431 451/505/430 466/530/445 467/532/446 +f 460/509/439 459/507/438 474/531/453 475/533/454 +f 453/510/432 452/508/431 467/532/446 468/534/447 +f 446/512/425 114/535/93 461/536/440 +f 340/537/319 460/509/439 475/533/454 +f 454/514/433 453/510/432 468/534/447 469/521/448 +f 447/515/426 446/512/425 461/536/440 462/523/441 +f 474/531/453 473/529/452 488/538/467 489/539/468 +f 467/532/446 466/530/445 481/540/460 482/541/461 +f 475/533/454 474/531/453 489/539/468 490/542/469 +f 468/534/447 467/532/446 482/541/461 483/543/462 +f 461/536/440 114/544/93 476/545/455 +f 340/546/319 475/533/454 490/542/469 +f 469/521/448 468/534/447 483/543/462 484/547/463 +f 462/523/441 461/536/440 476/545/455 477/548/456 +f 470/522/449 469/521/448 484/547/463 485/549/464 +f 463/524/442 462/523/441 477/548/456 478/550/457 +f 471/525/450 470/522/449 485/549/464 486/551/465 +f 464/526/443 463/524/442 478/550/457 479/552/458 +f 472/527/451 471/525/450 486/551/465 487/553/466 +f 465/528/444 464/526/443 479/552/458 480/554/459 +f 473/529/452 472/527/451 487/553/466 488/538/467 +f 466/530/445 465/528/444 480/554/459 481/540/460 +f 478/550/457 477/548/456 492/555/471 493/556/472 +f 486/551/465 485/549/464 500/557/479 501/558/480 +f 479/552/458 478/550/457 493/556/472 494/559/473 +f 487/553/466 486/551/465 501/558/480 502/560/481 +f 480/554/459 479/552/458 494/559/473 495/561/474 +f 488/538/467 487/553/466 502/560/481 503/562/482 +f 481/540/460 480/554/459 495/561/474 496/563/475 +f 489/539/468 488/538/467 503/562/482 504/564/483 +f 482/541/461 481/540/460 496/563/475 497/565/476 +f 490/542/469 489/539/468 504/564/483 505/566/484 +f 483/543/462 482/541/461 497/565/476 498/567/477 +f 476/545/455 114/568/93 491/569/470 +f 340/570/319 490/542/469 505/566/484 +f 484/547/463 483/543/462 498/567/477 499/571/478 +f 477/548/456 476/545/455 491/569/470 492/555/471 +f 485/549/464 484/547/463 499/571/478 500/557/479 +f 497/565/476 496/563/475 509/20/488 35/19/14 +f 505/566/484 504/564/483 513/15/492 514/23/493 +f 498/567/477 497/565/476 35/19/14 36/25/15 +f 491/569/470 114/572/93 506/27/485 +f 340/573/319 505/566/484 514/23/493 +f 499/571/478 498/567/477 36/25/15 37/31/16 +f 492/555/471 491/569/470 506/27/485 507/33/486 +f 500/557/479 499/571/478 37/31/16 510/35/489 +f 493/556/472 492/555/471 507/33/486 33/37/12 +f 501/558/480 500/557/479 510/35/489 38/39/17 +f 494/559/473 493/556/472 33/37/12 508/41/487 +f 502/560/481 501/558/480 38/39/17 511/43/490 +f 495/561/474 494/559/473 508/41/487 34/45/13 +f 503/562/482 502/560/481 511/43/490 512/16/491 +f 496/563/475 495/561/474 34/45/13 509/20/488 +f 504/564/483 503/562/482 512/16/491 513/15/492 +o bunny +v -0.452664 0.884686 0.252302 +v -0.641950 0.951232 0.393453 +v -0.554344 0.868064 0.241021 +v -0.483572 0.830062 0.326127 +v -0.562178 1.029019 0.157155 +v -0.379072 0.858075 0.243900 +v -0.411532 0.868559 0.265760 +v -0.530623 0.982708 0.180977 +v -0.567458 1.010828 0.241608 +v -0.688658 0.822446 0.330701 +v -0.592564 1.010075 0.245477 +v -0.661689 0.963546 0.253142 +v -0.716868 0.994969 0.240433 +v -0.583632 0.839914 0.435489 +v -0.384959 0.834719 0.269589 +v -0.572659 1.004031 0.253142 +v -0.394159 0.607615 0.301568 +v -0.553134 0.616484 0.398419 +v -0.525107 0.610245 0.375323 +v -0.561674 0.872264 0.247568 +v -0.592226 0.966940 0.292758 +v -0.539282 0.970366 0.211732 +v -0.610132 0.967080 0.299243 +v -0.542072 0.617687 0.391325 +v -0.537394 0.623034 0.382548 +v -0.473003 0.603347 0.372026 +v -0.413222 0.621707 0.318855 +v -0.394224 0.619676 0.301102 +v -0.596421 0.999888 0.220698 +v -0.557143 0.630039 0.390103 +v -0.518570 0.623024 0.363099 +v -0.466538 0.628831 0.363693 +v -0.451566 0.625797 0.361796 +v -0.570595 1.000707 0.251561 +v -0.671582 0.978868 0.259442 +v -0.312814 0.704433 0.175355 +v -0.540484 0.632962 0.372883 +v -0.526320 0.625122 0.369691 +v -0.527696 0.635191 0.362123 +v -0.455270 0.633269 0.359265 +v -0.420932 0.628836 0.323343 +v -0.404710 0.628535 0.310177 +v -0.351969 0.834344 0.201855 +v -0.558021 1.036855 0.211115 +v -0.447227 0.637621 0.343753 +v -0.422203 0.632977 0.324045 +v -0.386338 0.633795 0.308093 +v -0.377894 0.639151 0.304007 +v -0.514585 0.831071 0.335963 +v -0.597012 0.908352 0.434929 +v -0.343148 0.623188 0.211813 +v -0.553172 0.639210 0.371960 +v -0.538985 0.639098 0.364837 +v -0.515347 0.632821 0.354992 +v -0.469456 0.637177 0.358808 +v -0.457659 0.637949 0.354545 +v -0.437983 0.637405 0.334901 +v -0.432478 0.642139 0.337199 +v -0.403273 0.635307 0.318469 +v -0.391463 0.644042 0.322417 +v -0.464078 0.643379 0.346078 +v -0.451336 0.643481 0.339635 +v -0.418863 0.644236 0.334296 +v -0.402300 0.647470 0.332053 +v -0.672753 0.977931 0.238000 +v -0.347232 0.629730 0.219029 +v -0.703145 0.868631 0.328420 +v -0.579182 0.996183 0.263535 +v -0.651189 0.954015 0.277351 +v -0.506641 0.645288 0.342500 +v -0.468727 0.646790 0.339494 +v -0.436147 0.657012 0.343687 +v -0.391909 0.650636 0.325689 +v -0.385694 0.653324 0.322920 +v -0.376805 0.648450 0.311821 +v -0.584695 0.883895 0.436119 +v -0.330484 0.643107 0.214531 +v -0.329440 0.637915 0.213329 +v -0.389339 0.870647 0.212572 +v -0.688019 0.938550 0.286076 +v -0.702185 0.852744 0.325213 +v -0.586325 0.998410 0.264552 +v -0.541484 0.861723 0.321432 +v -0.539578 0.657440 0.359808 +v -0.530706 0.646903 0.359351 +v -0.514955 0.645527 0.351040 +v -0.457400 0.648551 0.340452 +v -0.446198 0.649258 0.341840 +v -0.441644 0.656604 0.345572 +v -0.424166 0.654786 0.340869 +v -0.405367 0.657130 0.336416 +v -0.375960 0.658880 0.314730 +v -0.384744 0.808389 0.124269 +v -0.598716 0.879244 0.449708 +v -0.604042 0.897195 0.445349 +v -0.576373 0.944919 0.371036 +v -0.587592 0.942582 0.390607 +v -0.529729 0.869280 0.290282 +v -0.670119 0.975581 0.274458 +v -0.562373 0.881792 0.313276 +v -0.523802 0.662221 0.358075 +v -0.499607 0.656966 0.332714 +v -0.478218 0.651546 0.334389 +v -0.462849 0.664239 0.341359 +v -0.393774 0.657336 0.332028 +v -0.605130 0.870489 0.450077 +v -0.562708 1.028062 0.223880 +v -0.337571 0.645077 0.217164 +v -0.315879 0.650164 0.207836 +v -0.588758 0.951609 0.378434 +v -0.530905 0.676961 0.361456 +v -0.515795 0.667717 0.354515 +v -0.744769 1.005062 0.206646 +v -0.406052 0.667007 0.337115 +v -0.397022 0.661504 0.333939 +v -0.381655 0.664782 0.320500 +v -0.423761 0.863200 0.280428 +v -0.357456 0.839439 0.195362 +v -0.329800 0.663080 0.211626 +v -0.507201 0.656016 0.342046 +v -0.414068 0.674206 0.346533 +v -0.394526 0.668758 0.331927 +v -0.649852 0.838909 0.434872 +v -0.323151 0.657400 0.210527 +v -0.310678 0.665936 0.202969 +v -0.385104 0.867190 0.226312 +v -0.511893 0.876765 0.216298 +v -0.426906 0.666207 0.345289 +v -0.383515 0.673214 0.328754 +v -0.457523 0.861670 0.296612 +v -0.391766 0.863393 0.253381 +v -0.637721 0.959366 0.373003 +v -0.491684 0.676954 0.330680 +v -0.393523 0.675508 0.336017 +v -0.524161 0.839540 0.335140 +v -0.473582 0.865216 0.292210 +v -0.545021 0.968928 0.226410 +v -0.605294 0.957358 0.373493 +v -0.402619 0.677984 0.340995 +v -0.426508 0.851103 0.294668 +v -0.438852 0.859761 0.292945 +v -0.320995 0.671025 0.205154 +v -0.305824 0.679070 0.194304 +v -0.301087 0.674666 0.191106 +v -0.514424 0.682951 0.358000 +v -0.505074 0.676069 0.345961 +v -0.432494 0.690480 0.352062 +v -0.383388 0.681828 0.332390 +v -0.457521 0.852605 0.305927 +v -0.368947 0.830814 0.257336 +v -0.565326 1.018690 0.234686 +v -0.406078 0.792040 0.322645 +v -0.578443 0.679220 0.349336 +v -0.569344 0.684112 0.356960 +v -0.560962 0.675293 0.351109 +v -0.520930 0.702618 0.363448 +v -0.496739 0.681152 0.335499 +v -0.422022 0.687955 0.349936 +v -0.373779 0.687828 0.323388 +v -0.365201 0.786801 0.127342 +v -0.326863 0.678452 0.205151 +v -0.312001 0.679458 0.197574 +v -0.340254 0.814286 0.200805 +v -0.723584 0.985345 0.239366 +v -0.643635 0.936572 0.275593 +v -0.405580 0.690195 0.344467 +v -0.389522 0.690951 0.336222 +v -0.479387 0.853113 0.307678 +v -0.422153 0.877205 0.258116 +v -0.536066 0.696684 0.364867 +v -0.438822 0.702706 0.357112 +v -0.431805 0.706457 0.356106 +v -0.418606 0.700507 0.349187 +v -0.390449 0.701592 0.336815 +v -0.523547 0.850036 0.326010 +v -0.627829 0.683831 0.350540 +v -0.323502 0.685115 0.196831 +v -0.324251 0.750396 0.196702 +v -0.398383 0.875178 0.223869 +v -0.584168 0.878481 0.258825 +v -0.387034 0.861285 0.246600 +v -0.646577 0.955163 0.383082 +v -0.599223 0.758306 0.176182 +v -0.428507 0.706392 0.353046 +v -0.377944 0.697746 0.326135 +v -0.371156 0.710855 0.323435 +v -0.411543 0.853807 0.280665 +v -0.400602 0.843935 0.280416 +v -0.317518 0.693150 0.188939 +v -0.299189 0.686709 0.183100 +v -0.650243 0.862640 0.264000 +v -0.529146 0.809462 0.142166 +v -0.504219 0.699407 0.351876 +v -0.499654 0.696917 0.344740 +v -0.491957 0.702382 0.337483 +v -0.402547 0.702693 0.345164 +v -0.380746 0.850432 0.255657 +v -0.680395 0.790800 0.374061 +v -0.323493 0.702196 0.181120 +v -0.299311 0.700118 0.170006 +v -0.528514 0.708460 0.368361 +v -0.448522 0.881175 0.264072 +v -0.585153 0.856477 0.442437 +v -0.598510 0.925935 0.421060 +v -0.306355 0.695605 0.182393 +v -0.620371 0.963876 0.268076 +v -0.368047 0.854169 0.220986 +v -0.488116 0.883436 0.235920 +v -0.627171 0.755511 0.204365 +v -0.511536 0.700259 0.357890 +v -0.489179 0.719235 0.342174 +v -0.589808 0.982609 0.279693 +v -0.421197 0.713279 0.354100 +v -0.404407 0.710281 0.350059 +v -0.395412 0.710287 0.345344 +v -0.587585 0.775062 0.157809 +v -0.461999 0.840784 0.314215 +v -0.655734 0.818689 0.384491 +v -0.692569 0.984433 0.265730 +v -0.690405 0.872260 0.386021 +v -0.534656 0.868884 0.301056 +v -0.540503 0.714037 0.374656 +v -0.498837 0.723692 0.348286 +v -0.406834 0.715487 0.351509 +v -0.388380 0.714216 0.339481 +v -0.379804 0.712473 0.329448 +v -0.609689 0.930703 0.421215 +v -0.386881 0.759901 0.102516 +v -0.380658 0.819252 0.134212 +v -0.554540 0.717791 0.384005 +v -0.521377 0.724714 0.367141 +v -0.621378 0.962629 0.350829 +v -0.414495 0.722757 0.354064 +v -0.395222 0.720860 0.347145 +v -0.363533 0.772949 0.302792 +v -0.689330 0.775378 0.266525 +v -0.590852 0.898952 0.436386 +v -0.503728 0.859216 0.298054 +v -0.570741 1.021640 0.233974 +v -0.712801 0.998900 0.238478 +v -0.506959 0.718990 0.355707 +v -0.436704 0.726186 0.362830 +v -0.417708 0.733359 0.357076 +v -0.387941 0.724374 0.340946 +v -0.382899 0.731045 0.332775 +v -0.376223 0.722919 0.327400 +v -0.666047 0.956455 0.237636 +v -0.591885 0.916696 0.424019 +v -0.416382 0.880770 0.200749 +v -0.427965 0.785795 0.341865 +v -0.562768 0.726364 0.392513 +v -0.547267 0.727465 0.384524 +v -0.541459 0.722173 0.380351 +v -0.533639 0.720379 0.373886 +v -0.528048 0.730117 0.369523 +v -0.512909 0.728111 0.362464 +v -0.428836 0.742550 0.361076 +v -0.427747 0.723474 0.358879 +v -0.403298 0.730843 0.349383 +v -0.352782 0.825660 0.182110 +v -0.452853 0.888609 0.218137 +v -0.689593 0.847409 0.383566 +v -0.577032 0.729593 0.397996 +v -0.527422 0.740878 0.372439 +v -0.504783 0.737185 0.358443 +v -0.498414 0.740528 0.350041 +v -0.492211 0.733933 0.346132 +v -0.393951 0.736723 0.342322 +v -0.370960 0.735996 0.320912 +v -0.450732 0.841535 0.311191 +v -0.597905 0.864286 0.445681 +v -0.552318 0.960759 0.221285 +v -0.693226 0.842452 0.312335 +v -0.474716 0.733622 0.356276 +v -0.385591 0.745265 0.336933 +v -0.374513 0.743946 0.326852 +v -0.569886 0.745834 0.401125 +v -0.564712 0.735349 0.394783 +v -0.550168 0.739726 0.392035 +v -0.547575 0.735433 0.389139 +v -0.537872 0.737662 0.382140 +v -0.519999 0.736979 0.365098 +v -0.511598 0.744622 0.363719 +v -0.670985 0.818886 0.370948 +v -0.695096 0.793480 0.334016 +v -0.449352 0.743578 0.368678 +v -0.432423 0.741395 0.365288 +v -0.421016 0.749395 0.357552 +v -0.435997 0.844530 0.303627 +v -0.417499 0.828026 0.303563 +v -0.590358 0.869410 0.444479 +v -0.594766 0.889532 0.444937 +v -0.599968 0.960818 0.343305 +v -0.550397 0.876052 0.288406 +v -0.412338 0.796532 0.311624 +v -0.576597 0.747380 0.404859 +v -0.558151 0.745561 0.394028 +v -0.526852 0.748692 0.375166 +v -0.501353 0.742392 0.355514 +v -0.487100 0.749935 0.349878 +v -0.691395 0.791355 0.352843 +v -0.438407 0.744152 0.367805 +v -0.691091 0.815470 0.321835 +v -0.576512 0.847438 0.434871 +v -0.576369 1.021595 0.233359 +v -0.577496 0.861361 0.437422 +v -0.351715 0.774620 0.137472 +v -0.545460 0.749768 0.390427 +v -0.533553 0.752393 0.383356 +v -0.504704 0.751979 0.359972 +v -0.418000 0.760208 0.353637 +v -0.399098 0.748091 0.344164 +v -0.554849 0.846867 0.347956 +v -0.540585 0.848807 0.336127 +v -0.605837 0.960579 0.313474 +v -0.542636 0.867904 0.230609 +v -0.401097 0.875814 0.207499 +v -0.560937 0.760264 0.398928 +v -0.554974 0.758032 0.393896 +v -0.457131 0.887897 0.204098 +v -0.432834 0.755528 0.362797 +v -0.410441 0.745699 0.352391 +v -0.380411 0.752746 0.332434 +v -0.562627 1.035847 0.214697 +v -0.595005 0.843949 0.441676 +v -0.356321 0.766424 0.288830 +v -0.531166 0.843814 0.336828 +v -0.436291 0.887956 0.225236 +v -0.698219 0.768832 0.323294 +v -0.537335 0.760262 0.385050 +v -0.524696 0.756691 0.371488 +v -0.520033 0.753862 0.365393 +v -0.496843 0.752284 0.351576 +v -0.484438 0.765088 0.350001 +v -0.406994 0.747027 0.348796 +v -0.406731 0.764974 0.347628 +v -0.393402 0.761007 0.338489 +v -0.369605 0.764712 0.316040 +v -0.377133 0.800676 0.123896 +v -0.695894 0.837733 0.329795 +v -0.685750 0.780625 0.365775 +v -0.659746 0.965011 0.278687 +v -0.544885 0.766468 0.387412 +v -0.505168 0.760389 0.359198 +v -0.425071 0.763092 0.357908 +v -0.379034 0.864331 0.219061 +v -0.572241 0.875181 0.249152 +v -0.644909 0.962118 0.341721 +v -0.578185 0.766855 0.405713 +v -0.559299 0.769820 0.398736 +v -0.495554 0.759449 0.354779 +v -0.491207 0.765897 0.353839 +v -0.443201 0.757824 0.364985 +v -0.419742 0.770827 0.352722 +v -0.356558 0.818600 0.164544 +v -0.365805 0.852516 0.209980 +v -0.657869 0.963311 0.292364 +v -0.568984 0.767108 0.403689 +v -0.367000 0.850321 0.197669 +v -0.430548 0.769193 0.358194 +v -0.405683 0.773433 0.343550 +v -0.380689 0.768692 0.324439 +v -0.587734 0.770858 0.405481 +v -0.551051 0.770290 0.392810 +v -0.543197 0.780101 0.384192 +v -0.534441 0.766979 0.380757 +v -0.527558 0.766734 0.372417 +v -0.525682 0.778309 0.370312 +v -0.512284 0.762521 0.362996 +v -0.500902 0.771580 0.359880 +v -0.392297 0.773331 0.333790 +v -0.374437 0.780179 0.307382 +v -0.348164 0.767793 0.281596 +v -0.535565 1.001521 0.146569 +v -0.630731 0.961791 0.361411 +v -0.647216 0.953075 0.285746 +v -0.590929 0.779456 0.406489 +v -0.563956 0.780386 0.397502 +v -0.483535 0.776599 0.351504 +v -0.476401 0.773596 0.347766 +v -0.431183 0.777491 0.352195 +v -0.416270 0.779929 0.344835 +v -0.397559 0.782333 0.331410 +v -0.385365 0.781180 0.321023 +v -0.437652 0.866584 0.284288 +v -0.604693 0.911568 0.436432 +v -0.427606 0.886103 0.211345 +v -0.555764 0.782694 0.390784 +v -0.503607 0.780815 0.359200 +v -0.471623 0.781327 0.343008 +v -0.403305 0.872737 0.251046 +v -0.411160 0.785778 0.335816 +v -0.360589 0.785048 0.286940 +v -0.586258 0.791250 0.401815 +v -0.552671 0.792650 0.386437 +v -0.534372 0.783086 0.379758 +v -0.594977 0.957002 0.318077 +v -0.683565 0.859951 0.397114 +v -0.368167 0.783942 0.296064 +v -0.351882 0.783535 0.280075 +v -0.403060 0.856673 0.272295 +v -0.502963 0.880201 0.227247 +v -0.492802 0.868864 0.282787 +v -0.682675 0.988126 0.253904 +v -0.576516 0.787244 0.399372 +v -0.545327 0.792851 0.381197 +v -0.525244 0.792004 0.367989 +v -0.517094 0.800188 0.356773 +v -0.504582 0.793158 0.355431 +v -0.487980 0.784472 0.353576 +v -0.482856 0.787076 0.347389 +v -0.475166 0.789868 0.344350 +v -0.658897 0.826048 0.385711 +v -0.384241 0.790306 0.304547 +v -0.379533 0.796991 0.298063 +v -0.369538 0.796020 0.292354 +v -0.439518 0.888153 0.209188 +v -0.413399 0.842727 0.293167 +v -0.692478 0.990765 0.256306 +v -0.475640 0.886028 0.226768 +v -0.518295 0.869294 0.276403 +v -0.534558 0.796163 0.373454 +v -0.519668 0.789362 0.362529 +v -0.501002 0.805245 0.347696 +v -0.469112 0.802270 0.338390 +v -0.465920 0.788351 0.340748 +v -0.457364 0.790647 0.334649 +v -0.602519 0.726448 0.399208 +v -0.583449 0.848529 0.440152 +v -0.666470 0.898672 0.275258 +v -0.683564 0.817311 0.283020 +v -0.664017 0.969288 0.258888 +v -0.626298 0.946519 0.403292 +v -0.608987 0.792055 0.404055 +v -0.597332 0.796691 0.402160 +v -0.563484 0.794966 0.392116 +v -0.541826 0.807288 0.370649 +v -0.486678 0.799649 0.345735 +v -0.439117 0.796962 0.322665 +v -0.394135 0.798645 0.299998 +v -0.547694 0.808630 0.374329 +v -0.462047 0.800160 0.334701 +v -0.400846 0.809440 0.294020 +v -0.364274 0.803852 0.281616 +v -0.536451 0.870608 0.242378 +v -0.605171 0.809828 0.398918 +v -0.581935 0.804874 0.395914 +v -0.570390 0.807744 0.389895 +v -0.555701 0.804690 0.383221 +v -0.527503 0.806680 0.365693 +v -0.451149 0.806812 0.325430 +v -0.429651 0.802864 0.315306 +v -0.429918 0.809226 0.315868 +v -0.385181 0.809433 0.288265 +v -0.355239 0.840337 0.218122 +v -0.537686 0.812798 0.367692 +v -0.518730 0.814219 0.349615 +v -0.478891 0.806529 0.339577 +v -0.457875 0.808845 0.329056 +v -0.451169 0.817960 0.323452 +v -0.419525 0.810713 0.310411 +v -0.409845 0.807130 0.303657 +v -0.376595 0.805837 0.289386 +v -0.374338 0.815535 0.275495 +v -0.377833 0.860636 0.202683 +v -0.511033 0.812755 0.346389 +v -0.468992 0.821696 0.328420 +v -0.443376 0.807441 0.322680 +v -0.399558 0.822038 0.290139 +v -0.390819 0.815047 0.283389 +v -0.599811 0.975589 0.289428 +v -0.563146 0.837280 0.364344 +v -0.413047 0.882470 0.221322 +v -0.598095 0.819701 0.394620 +v -0.592955 0.815752 0.393325 +v -0.583576 0.824846 0.386165 +v -0.548936 0.821588 0.367904 +v -0.434578 0.816012 0.317365 +v -0.408605 0.821704 0.299020 +v -0.390605 0.823848 0.278720 +v -0.363445 0.815711 0.263757 +v -0.519278 0.811054 0.137587 +v -0.558126 0.816954 0.377357 +v -0.535927 0.820882 0.361699 +v -0.525473 0.815846 0.357887 +v -0.501413 0.820623 0.338723 +v -0.505924 0.841647 0.323085 +v -0.441788 0.823239 0.318263 +v -0.591636 0.773228 0.172329 +v -0.697928 0.769968 0.290332 +v -0.551393 0.833991 0.358254 +v -0.581045 0.979469 0.273379 +v -0.568007 0.822022 0.378291 +v -0.528857 0.830471 0.347383 +v -0.488991 0.841511 0.317254 +v -0.472747 0.836014 0.320729 +v -0.432023 0.829242 0.310883 +v -0.403742 0.830944 0.292018 +v -0.653358 0.949412 0.264242 +v -0.573851 0.833352 0.375628 +v -0.642449 0.775406 0.213889 +v -0.691086 0.746852 0.266169 +v -0.675047 0.898321 0.282420 +v -0.559783 1.004961 0.166999 +v -0.623350 0.940894 0.271704 +v -0.368173 0.604658 0.275956 +v -0.559854 0.846980 0.358611 +v -0.680935 0.772845 0.255423 +v -0.361445 0.844801 0.229480 +v -0.454569 0.604838 0.366748 +v -0.420944 0.610693 0.328340 +v -0.374744 0.609087 0.285146 +v -0.361527 0.616156 0.270712 +v -0.582622 0.934570 0.388757 +v -0.534111 0.602017 0.385801 +v -0.520968 0.602587 0.371227 +v -0.540213 0.870418 0.255856 +v -0.408996 0.612158 0.315346 +v -0.565346 0.954594 0.227427 +v -0.502604 0.816155 0.134070 +v -0.574627 0.929168 0.360372 +v -0.550492 0.606777 0.398647 +v -0.537165 0.608665 0.388789 +v -0.566059 0.898326 0.340699 +v -0.459877 0.610310 0.369990 +v -0.452158 0.615575 0.364747 +v -0.441931 0.610461 0.353078 +v -0.548260 0.998602 0.187982 +v -0.344764 0.779397 0.273625 +v -0.370846 0.621879 0.282839 +v -0.358625 0.614212 0.262694 +v -0.671381 0.764244 0.241406 +v -0.354574 0.794987 0.277455 +v -0.607482 0.774620 0.186719 +v -0.436688 0.621442 0.346440 +v -0.562897 0.863931 0.383041 +v -0.558856 0.863865 0.371330 +v -0.356133 0.624593 0.261403 +v -0.353714 0.623785 0.229356 +v -0.579455 0.965552 0.270433 +v -0.384207 0.626103 0.292765 +v -0.371169 0.630995 0.280527 +v -0.668469 0.801262 0.244455 +v -0.586384 0.978197 0.208165 +v -0.663397 0.720558 0.360443 +v -0.569938 0.863841 0.423589 +v -0.439208 0.629577 0.345323 +v -0.362397 0.626477 0.272524 +v -0.351962 0.632708 0.249711 +v -0.351518 0.627371 0.242012 +v -0.582894 0.964579 0.279499 +v -0.355322 0.812227 0.255577 +v -0.359011 0.638110 0.262394 +v -0.316443 0.640139 0.204156 +v -0.310310 0.640638 0.189362 +v -0.309250 0.636749 0.164365 +v -0.544994 0.627896 0.385988 +v -0.564637 1.011477 0.221104 +v -0.563692 0.957152 0.248558 +v -0.378405 0.633863 0.294235 +v -0.366986 0.639045 0.277615 +v -0.335524 0.770128 0.259593 +v -0.568758 0.875513 0.388444 +v -0.565553 0.967790 0.258545 +v -0.574547 0.979719 0.250158 +v -0.552841 1.044185 0.193969 +v -0.555309 1.036633 0.203368 +v -0.581134 0.945317 0.279988 +v -0.348207 0.647681 0.249120 +v -0.307122 0.651981 0.196656 +v -0.307172 0.640300 0.173426 +v -0.577019 0.836450 0.418810 +v -0.534237 0.974665 0.191216 +v -0.704769 0.997501 0.184908 +v -0.577648 0.943612 0.267037 +v -0.572164 0.988534 0.238487 +v -0.333693 0.792218 0.189778 +v -0.366318 0.651300 0.294409 +v -0.358368 0.647692 0.276366 +v -0.353195 0.648151 0.260161 +v -0.338772 0.649520 0.222495 +v -0.297694 0.653170 0.164419 +v -0.577738 0.941413 0.256810 +v -0.556714 0.871752 0.332998 +v -0.597980 0.763972 0.151718 +v -0.354415 0.659227 0.284221 +v -0.351558 0.655510 0.273344 +v -0.340007 0.652319 0.237772 +v -0.308067 0.657885 0.201349 +v -0.301032 0.653558 0.182964 +v -0.555995 0.977940 0.230809 +v -0.587803 0.927634 0.407806 +v -0.575632 0.943749 0.354424 +v -0.343850 0.778136 0.153013 +v -0.575051 0.961190 0.272176 +v -0.572453 0.862406 0.431470 +v -0.670361 0.780257 0.243385 +v -0.551191 1.050038 0.175344 +v -0.367139 0.663763 0.306515 +v -0.567657 0.853675 0.387003 +v -0.294146 0.667599 0.152050 +v -0.338699 0.785896 0.168429 +v -0.545899 0.972629 0.230301 +v -0.362699 0.662779 0.295488 +v -0.348492 0.658604 0.264455 +v -0.340649 0.662104 0.250314 +v -0.558144 0.882213 0.345307 +v -0.328203 0.779238 0.201815 +v -0.356331 0.668459 0.289367 +v -0.331965 0.669274 0.237838 +v -0.331999 0.664717 0.221384 +v -0.568573 0.861045 0.413649 +v -0.582047 0.914066 0.398294 +v -0.300462 0.665652 0.189879 +v -0.294168 0.664640 0.166132 +v -0.587030 0.941133 0.296217 +v -0.582470 0.897013 0.422881 +v -0.352242 0.673739 0.285905 +v -0.340907 0.673586 0.261192 +v -0.291714 0.677907 0.164345 +v -0.563062 0.872433 0.380324 +v -0.365328 0.843416 0.241146 +v -0.576629 0.910293 0.365761 +v -0.376316 0.674620 0.322044 +v -0.369705 0.671215 0.310049 +v -0.347033 0.669691 0.273319 +v -0.331069 0.679049 0.242444 +v -0.571037 0.872570 0.410375 +v -0.567881 0.840588 0.372958 +v -0.294694 0.668756 0.178205 +v -0.566340 1.004067 0.218630 +v -0.570365 0.973319 0.252417 +v -0.572291 0.905660 0.359777 +v -0.583892 0.918238 0.408352 +v -0.368419 0.681934 0.314612 +v -0.362176 0.677876 0.298596 +v -0.336036 0.680237 0.251595 +v -0.327901 0.676916 0.221601 +v -0.295050 0.677902 0.180571 +v -0.292081 0.683114 0.155330 +v -0.558228 1.024526 0.198512 +v -0.533340 0.992542 0.175189 +v -0.344999 0.813805 0.183175 +v -0.551618 1.036069 0.172217 +v -0.348152 0.676356 0.278927 +v -0.328504 0.678618 0.233296 +v -0.580720 0.901721 0.381379 +v -0.292251 0.684801 0.168460 +v -0.558455 0.972189 0.247327 +v -0.365320 0.693480 0.312659 +v -0.363304 0.686339 0.306060 +v -0.351737 0.685282 0.283306 +v -0.326613 0.693737 0.232776 +v -0.325892 0.686812 0.211023 +v -0.578898 0.890046 0.410999 +v -0.579031 0.973068 0.264357 +v -0.343193 0.816715 0.222201 +v -0.344232 0.684811 0.269308 +v -0.342545 0.697751 0.263742 +v -0.330317 0.694892 0.241811 +v -0.325390 0.693851 0.194309 +v -0.295055 0.687819 0.176066 +v -0.534254 0.983478 0.192783 +v -0.533836 0.977142 0.201418 +v -0.377798 0.786202 0.117401 +v -0.344749 0.703956 0.275943 +v -0.325217 0.690763 0.222672 +v -0.397785 0.860378 0.264744 +v -0.293309 0.693951 0.157527 +v -0.401249 0.747375 0.094723 +v -0.331655 0.784890 0.235131 +v -0.555177 0.968024 0.244370 +v -0.577295 0.916713 0.364422 +v -0.569922 0.852274 0.426637 +v -0.573720 0.843139 0.427729 +v -0.356125 0.692537 0.296748 +v -0.336661 0.693257 0.254571 +v -0.400201 0.775577 0.103906 +v -0.295332 0.696708 0.165701 +v -0.577860 0.929327 0.381192 +v -0.394480 0.833815 0.280510 +v -0.363391 0.706491 0.312405 +v -0.336667 0.705669 0.252351 +v -0.326812 0.707390 0.230562 +v -0.324316 0.704612 0.213693 +v -0.582344 0.907068 0.382274 +v -0.546926 1.018876 0.167477 +v -0.688593 0.837982 0.377213 +v -0.411564 0.797961 0.306487 +v -0.582738 0.831955 0.387157 +v -0.573464 0.844777 0.387357 +v -0.347839 0.701734 0.284761 +v -0.342720 0.705379 0.266076 +v -0.330140 0.714230 0.244354 +v -0.325302 0.702881 0.198887 +v -0.563824 0.882410 0.370888 +v -0.576655 0.986809 0.263658 +v -0.425163 0.797377 0.314754 +v -0.530482 0.992364 0.166734 +v -0.563766 0.987172 0.224188 +v -0.345886 0.796397 0.258157 +v -0.580940 0.833613 0.401162 +v -0.338121 0.783866 0.255335 +v -0.356848 0.708444 0.303154 +v -0.335854 0.715993 0.258137 +v -0.326279 0.720278 0.181412 +v -0.682576 0.942602 0.305325 +v -0.582159 0.952633 0.285352 +v -0.582978 0.934215 0.320585 +v -0.543596 0.966631 0.206728 +v -0.353299 0.712926 0.297910 +v -0.343000 0.719175 0.282939 +v -0.326817 0.712958 0.235350 +v -0.669008 0.908927 0.393607 +v -0.563491 0.890387 0.358025 +v -0.567906 0.960286 0.260599 +v -0.676974 0.899084 0.386557 +v -0.576195 0.884840 0.396047 +v -0.357587 0.723683 0.308858 +v -0.349878 0.721148 0.298173 +v -0.323823 0.730312 0.201039 +v -0.579896 0.919125 0.324248 +v -0.350522 0.828216 0.233206 +v -0.573557 0.921745 0.350076 +v -0.339193 0.720336 0.270527 +v -0.331048 0.721450 0.252638 +v -0.324460 0.720676 0.221932 +v -0.329881 0.715966 0.166778 +v -0.560688 0.886054 0.330267 +v -0.537152 1.007660 0.158297 +v -0.572177 0.992932 0.246888 +v -0.585450 0.971262 0.283124 +v -0.585979 0.933636 0.275919 +v -0.382347 0.770823 0.107945 +v -0.581225 0.897637 0.393032 +v -0.574687 0.889078 0.385509 +v -0.556063 0.860180 0.339070 +v -0.555875 0.868468 0.349260 +v -0.586642 0.908257 0.423944 +v -0.366179 0.723132 0.317633 +v -0.350006 0.732277 0.299198 +v -0.343719 0.734480 0.287263 +v -0.338336 0.729903 0.275644 +v -0.331049 0.730726 0.255051 +v -0.581074 0.916271 0.382518 +v -0.664917 0.963733 0.241089 +v -0.357956 0.806233 0.269843 +v -0.575411 0.840871 0.398733 +v -0.357406 0.733984 0.307120 +v -0.334710 0.741388 0.261229 +v -0.325209 0.739268 0.185660 +v -0.329886 0.743743 0.171491 +v -0.555613 0.855642 0.350449 +v -0.561201 1.022327 0.221617 +v -0.570241 0.891857 0.375856 +v -0.389125 0.784992 0.110886 +v -0.560473 0.855866 0.371862 +v -0.361647 0.746361 0.307251 +v -0.544135 0.988420 0.196111 +v -0.372727 0.849219 0.248151 +v -0.563696 0.846957 0.373103 +v -0.351899 0.744597 0.295179 +v -0.718876 0.971093 0.160397 +v -0.551420 1.023324 0.175806 +v -0.344842 0.804529 0.244595 +v -0.345324 0.802254 0.169828 +v -0.345700 0.787778 0.268379 +v -0.347348 0.752662 0.285969 +v -0.332764 0.748606 0.254758 +v -0.328233 0.745073 0.247234 +v -0.324931 0.733357 0.229728 +v -0.603121 0.834404 0.434883 +v -0.345745 0.813286 0.240082 +v -0.570405 0.906368 0.345688 +v -0.569727 0.853712 0.404641 +v -0.570521 0.846286 0.417361 +v -0.348715 0.830564 0.211073 +v -0.324335 0.756198 0.222330 +v -0.724232 0.988105 0.140900 +v -0.557035 1.015512 0.191809 +v -0.370361 0.758898 0.114357 +v -0.333857 0.797507 0.201331 +v -0.364872 0.751810 0.315015 +v -0.340918 0.747206 0.278122 +v -0.332217 0.791314 0.218842 +v -0.557728 0.870707 0.360199 +v -0.567554 0.992983 0.225050 +v -0.371214 0.753009 0.323664 +v -0.356355 0.759662 0.295182 +v -0.326336 0.754526 0.242379 +v -0.325930 0.747045 0.232910 +v -0.367173 0.804560 0.134298 +v -0.357068 0.826161 0.247355 +v -0.544973 0.981241 0.210320 +v -0.545535 1.030099 0.152753 +v -0.559100 1.004662 0.200399 +v -0.589249 0.930516 0.287376 +v -0.362824 0.762510 0.309107 +v -0.338904 0.759175 0.271188 +v -0.328044 0.760635 0.249144 +v -0.542430 0.976831 0.218889 +v -0.674333 0.852043 0.402893 +v -0.678946 0.906580 0.288568 +v -0.670302 0.857673 0.409057 +v -0.698343 0.966656 0.274092 +v -0.660140 0.862938 0.428383 +v -0.336078 0.757761 0.261024 +v -0.326302 0.766238 0.237495 +v -0.359855 0.773338 0.295239 +v -0.327491 0.778591 0.214898 +v -0.569273 0.864935 0.396768 +v -0.575408 0.876188 0.425235 +v -0.552560 1.040855 0.186090 +v -0.381373 0.840873 0.262993 +v -0.589713 0.952017 0.299725 +v -0.339039 0.795188 0.245906 +v -0.696170 0.780136 0.336330 +v -0.577157 0.922262 0.374865 +v -0.576069 0.932845 0.368473 +v -0.330976 0.774936 0.246267 +v -0.698765 0.943658 0.264870 +v -0.442998 0.599610 0.140050 +v -0.455834 0.599506 0.126735 +v -0.329316 0.766182 0.179533 +v -0.374049 0.610220 0.139882 +v -0.423583 0.604054 0.151447 +v -0.446232 0.608430 0.128594 +v -0.359208 0.613015 0.250109 +v -0.347191 0.621124 0.135919 +v -0.429082 0.606699 0.145613 +v -0.465326 0.608316 0.114238 +v -0.651466 0.834717 0.427369 +v -0.694683 0.834921 0.357286 +v -0.727577 1.024112 0.138798 +v -0.546102 1.033490 0.141299 +v -0.672485 0.950326 0.229043 +v -0.621037 0.778675 0.198248 +v -0.362884 0.619320 0.129582 +v -0.366764 0.627320 0.120276 +v -0.436232 0.615010 0.133248 +v -0.531149 0.987228 0.166769 +v -0.682669 0.953119 0.212698 +v -0.544868 1.025503 0.132605 +v -0.384869 0.750256 0.103515 +v -0.641123 0.820111 0.392204 +v -0.327405 0.625175 0.152100 +v -0.333346 0.636971 0.122288 +v -0.443338 0.622294 0.119762 +v -0.456282 0.608610 0.118428 +v -0.567968 0.949831 0.244884 +v -0.348479 0.629523 0.121780 +v -0.417906 0.793338 0.104215 +v -0.534643 0.978751 0.178669 +v -0.592157 0.902883 0.283664 +v -0.545916 1.016511 0.132812 +v -0.325515 0.633348 0.136432 +v -0.343519 0.639183 0.114390 +v -0.448038 0.787793 0.100644 +v -0.430943 0.626118 0.125326 +v -0.456641 0.624715 0.107031 +v -0.564142 0.826350 0.174159 +v -0.577281 0.943179 0.338618 +v -0.311252 0.637047 0.152562 +v -0.315100 0.645275 0.130883 +v -0.365227 0.638144 0.110226 +v -0.649095 0.827001 0.393780 +v -0.415435 0.636079 0.124116 +v -0.424066 0.637930 0.114114 +v -0.434267 0.636549 0.107706 +v -0.447793 0.628705 0.111967 +v -0.462382 0.635231 0.104672 +v -0.554663 0.795916 0.154382 +v -0.719740 1.010121 0.151706 +v -0.649679 0.936093 0.267554 +v -0.339889 0.758183 0.154484 +v -0.590767 0.922233 0.290409 +v -0.622160 0.828598 0.432536 +v -0.584749 0.944138 0.316449 +v -0.672251 0.937769 0.237328 +v -0.573429 0.907619 0.331396 +v -0.729277 1.019251 0.129988 +v -0.308011 0.644105 0.143904 +v -0.330338 0.647977 0.114063 +v -0.353266 0.652087 0.104645 +v -0.709257 0.996050 0.170166 +v -0.301271 0.647267 0.155170 +v -0.319848 0.648462 0.121931 +v -0.342427 0.649424 0.107925 +v -0.622402 0.595030 0.176399 +v -0.422523 0.644702 0.109187 +v -0.662490 0.599081 0.283818 +v -0.297333 0.660239 0.148287 +v -0.551664 0.863027 0.219923 +v -0.577263 0.925764 0.335791 +v -0.304349 0.652192 0.140371 +v -0.303017 0.664248 0.133137 +v -0.338127 0.661862 0.105204 +v -0.439784 0.647998 0.097700 +v -0.541037 1.012475 0.135769 +v -0.634926 0.709629 0.377869 +v -0.705993 0.970652 0.177871 +v -0.399472 0.661977 0.112825 +v -0.410560 0.654850 0.112454 +v -0.425972 0.651343 0.103441 +v -0.310458 0.662816 0.123993 +v -0.323508 0.661764 0.112830 +v -0.430517 0.659360 0.099810 +v -0.571274 0.779370 0.135095 +v -0.686675 0.822791 0.343324 +v -0.297498 0.678759 0.137694 +v -0.315279 0.675242 0.114245 +v -0.327100 0.673562 0.107512 +v -0.387466 0.673247 0.114630 +v -0.424050 0.665629 0.101262 +v -0.562792 0.855784 0.210709 +v -0.677351 0.803167 0.372192 +v -0.304936 0.678667 0.124218 +v -0.403514 0.673477 0.104869 +v -0.452481 0.663100 0.091249 +v -0.718042 0.999687 0.151272 +v -0.685542 0.832008 0.372318 +v -0.685510 0.827457 0.360189 +v -0.315046 0.683026 0.114480 +v -0.425826 0.675282 0.096680 +v -0.677767 0.867967 0.402889 +v -0.658721 0.854325 0.432397 +v -0.538535 1.013162 0.143053 +v -0.651787 0.724312 0.377166 +v -0.575774 0.945646 0.242904 +v -0.294249 0.690808 0.146036 +v -0.310367 0.692997 0.120653 +v -0.381352 0.687154 0.113878 +v -0.410657 0.683512 0.099777 +v -0.676477 0.973741 0.220147 +v -0.694276 0.954074 0.275972 +v -0.396592 0.688163 0.103603 +v -0.423859 0.687699 0.094309 +v -0.686665 0.933956 0.327288 +v -0.686370 0.810611 0.350511 +v -0.746877 1.036887 0.158569 +v -0.701990 0.867561 0.316157 +v -0.299647 0.691148 0.133328 +v -0.389539 0.698243 0.104873 +v -0.411649 0.696950 0.096747 +v -0.657447 0.876148 0.426543 +v -0.714696 0.984727 0.159599 +v -0.703131 0.935932 0.229888 +v -0.604023 0.905201 0.273801 +v -0.582228 0.918525 0.310890 +v -0.298425 0.699267 0.140279 +v -0.725342 1.011792 0.135905 +v -0.449520 0.691420 0.091875 +v -0.712859 0.943521 0.235155 +v -0.606001 0.674523 0.339690 +v -0.569214 0.603033 0.399728 +v -0.307096 0.707287 0.134639 +v -0.583194 0.862328 0.225471 +v -0.433789 0.697278 0.093459 +v -0.595525 0.870981 0.237320 +v -0.727428 0.986838 0.207206 +v -0.540825 1.001582 0.142471 +v -0.702489 0.856077 0.338342 +v -0.700451 0.984861 0.182691 +v -0.369582 0.768287 0.117122 +v -0.581633 0.906377 0.299876 +v -0.660249 0.903318 0.407235 +v -0.707267 0.963308 0.240847 +v -0.400780 0.713008 0.100891 +v -0.446575 0.704450 0.089023 +v -0.594455 0.926527 0.276099 +v -0.658906 0.842074 0.425263 +v -0.605416 0.715425 0.393630 +v -0.689249 0.964662 0.199898 +v -0.532286 0.995894 0.156227 +v -0.369384 0.708756 0.118460 +v -0.379484 0.702432 0.110772 +v -0.417533 0.712157 0.095547 +v -0.433967 0.708248 0.090544 +v -0.555089 0.960236 0.233458 +v -0.690510 0.808108 0.339760 +v -0.574853 0.933597 0.348960 +v -0.366992 0.749341 0.117422 +v -0.372135 0.721159 0.114324 +v -0.488918 0.767107 0.095556 +v -0.676899 0.767162 0.249716 +v -0.701713 0.862035 0.346891 +v -0.356059 0.717781 0.127392 +v -0.699525 0.854520 0.363478 +v -0.335102 0.772111 0.168082 +v -0.534526 0.987453 0.161487 +v -0.354365 0.754587 0.130851 +v -0.347786 0.725849 0.137497 +v -0.388147 0.711639 0.105023 +v -0.358523 0.792188 0.137293 +v -0.586917 0.929334 0.306663 +v -0.359000 0.771793 0.127894 +v -0.327875 0.769309 0.187208 +v -0.361025 0.810370 0.147511 +v -0.698750 0.782559 0.321449 +v -0.385356 0.729154 0.107111 +v -0.408292 0.721917 0.099101 +v -0.665610 0.855921 0.418265 +v -0.660326 0.948726 0.249408 +v -0.360836 0.736556 0.123274 +v -0.400668 0.732822 0.098534 +v -0.417532 0.729698 0.093456 +v -0.678171 0.919724 0.387447 +v -0.751043 1.028283 0.166532 +v -0.688905 0.975766 0.198776 +v -0.597279 0.917103 0.281444 +v -0.325685 0.765110 0.204610 +v -0.636059 0.688900 0.351927 +v -0.684652 0.910589 0.376088 +v -0.352514 0.796541 0.149291 +v -0.746470 1.022048 0.165122 +v -0.686556 0.945867 0.284908 +v -0.694691 0.801762 0.326217 +v -0.682753 0.835631 0.298033 +v -0.335568 0.729834 0.157707 +v -0.379410 0.738327 0.108946 +v -0.408525 0.739703 0.092962 +v -0.611110 0.630013 0.186473 +v -0.692702 0.912693 0.328827 +v -0.691103 0.988826 0.204121 +v -0.675951 0.964175 0.219344 +v -0.346317 0.754836 0.141896 +v -0.361350 0.746263 0.124336 +v -0.590188 0.932610 0.264661 +v -0.733050 1.032337 0.138902 +v -0.737372 1.035908 0.148881 +v -0.730380 1.030286 0.147260 +v -0.719021 1.012614 0.163737 +v -0.740574 1.035863 0.162856 +v -0.618076 0.950716 0.395640 +v -0.493582 0.879063 0.259102 +v -0.609445 0.961751 0.333308 +v -0.582420 0.955178 0.342759 +v -0.574702 1.012400 0.246357 +v -0.746624 1.033346 0.174801 +v -0.657450 0.959851 0.351977 +v -0.618348 0.957514 0.379065 +v -0.729459 1.025594 0.165972 +v -0.423571 0.794367 0.324876 +v -0.590043 0.957900 0.350842 +v -0.628881 0.954126 0.389950 +v -0.656742 0.957921 0.367488 +v -0.671643 0.970630 0.288546 +v -0.552144 1.048462 0.146486 +v -0.554540 0.867262 0.316069 +v -0.652722 0.960512 0.301901 +v -0.663572 0.959905 0.310898 +v -0.722897 1.016923 0.179563 +v -0.581220 0.952138 0.368339 +v -0.512179 0.872189 0.270010 +v -0.739079 1.029362 0.179323 +v -0.747221 1.026325 0.188020 +v -0.402934 0.877453 0.234219 +v -0.681180 0.820924 0.355149 +v -0.518066 0.857957 0.306273 +v -0.573994 0.903734 0.316524 +v -0.573606 0.881581 0.281157 +v -0.644104 0.955437 0.294203 +v -0.536698 0.866406 0.311647 +v -0.421032 0.884984 0.229697 +v -0.456837 0.887246 0.235937 +v -0.435472 0.886032 0.239943 +v -0.697548 0.844786 0.364646 +v -0.606451 0.960688 0.359438 +v -0.687154 0.921203 0.346321 +v -0.648781 0.960827 0.317968 +v -0.472222 0.884644 0.246953 +v -0.559312 0.871927 0.312901 +v -0.601473 0.948033 0.393887 +v -0.550621 1.047637 0.157788 +v -0.552713 1.054716 0.166318 +v -0.680594 0.951406 0.339756 +v -0.695438 0.786349 0.341655 +v -0.688475 0.910698 0.354836 +v -0.629817 0.962161 0.332378 +v -0.447765 0.872979 0.279000 +v -0.694757 0.902495 0.346385 +v -0.705368 0.962926 0.261377 +v -0.681138 0.848358 0.394938 +v -0.520967 0.873888 0.255632 +v -0.713667 1.008861 0.185355 +v -0.715524 1.011163 0.197363 +v -0.317948 0.707051 0.123510 +v -0.752274 1.032313 0.172567 +v -0.543896 0.872901 0.265941 +v -0.466597 0.882296 0.261610 +v -0.392597 0.829527 0.132344 +v -0.697529 0.785029 0.298996 +v -0.565052 1.043457 0.180904 +v -0.618923 0.961189 0.314734 +v -0.673275 0.765178 0.382675 +v -0.318437 0.697931 0.115736 +v -0.562219 0.877281 0.300817 +v -0.403023 0.840355 0.135316 +v -0.693248 0.778371 0.348230 +v -0.665888 0.845026 0.411843 +v -0.727608 1.018723 0.194406 +v -0.604121 0.952984 0.385494 +v -0.305209 0.698116 0.127846 +v -0.550325 0.872579 0.303357 +v -0.386155 0.843397 0.151871 +v -0.688971 0.929046 0.263150 +v -0.660906 0.810281 0.382556 +v -0.682800 0.826843 0.292271 +v -0.660180 0.948372 0.391161 +v -0.317200 0.711466 0.132292 +v -0.598582 0.959417 0.307826 +v -0.376988 0.827230 0.144349 +v -0.393805 0.845483 0.146803 +v -0.696426 0.779449 0.285300 +v -0.659775 0.924312 0.408581 +v -0.554405 1.051588 0.184614 +v -0.674792 0.977823 0.275364 +v -0.710471 1.007828 0.216195 +v -0.531021 0.870650 0.281242 +v -0.582834 0.952659 0.332989 +v -0.436350 0.876369 0.268679 +v -0.393077 0.854551 0.161850 +v -0.411322 0.857409 0.151285 +v -0.686556 0.792369 0.363401 +v -0.722253 1.006596 0.222854 +v -0.504914 0.850762 0.312088 +v -0.421549 0.868660 0.161392 +v -0.651206 0.848233 0.439392 +v -0.398836 0.794231 0.308117 +v -0.577435 0.951846 0.354670 +v -0.594976 0.958915 0.329136 +v -0.528548 0.859724 0.318503 +v -0.726732 1.014400 0.207676 +v -0.325265 0.714218 0.144226 +v -0.636468 0.959704 0.311460 +v -0.368382 0.831711 0.162363 +v -0.434105 0.874423 0.165855 +v -0.687621 0.922770 0.311745 +v -0.686084 0.923765 0.378414 +v -0.676894 0.952151 0.364965 +v -0.693917 0.996658 0.213981 +v -0.730481 0.999947 0.225394 +v -0.599799 0.936325 0.410356 +v -0.299666 0.704330 0.146648 +v -0.304751 0.709779 0.147458 +v -0.312668 0.713213 0.145504 +v -0.336203 0.714802 0.149846 +v -0.443701 0.880841 0.175494 +v -0.692969 0.804278 0.297126 +v -0.662382 0.959021 0.329842 +v -0.373860 0.857281 0.236963 +v -0.610644 0.941886 0.407982 +v -0.565034 1.041913 0.196222 +v -0.701164 1.002971 0.214588 +v -0.390294 0.868342 0.238236 +v -0.309661 0.712379 0.155785 +v -0.322524 0.713922 0.154714 +v -0.618530 0.962428 0.303378 +v -0.396849 0.864970 0.177650 +v -0.419324 0.874409 0.175643 +v -0.670835 0.920429 0.398014 +v -0.571158 0.893351 0.306343 +v -0.557290 1.045154 0.198561 +v -0.414770 0.880565 0.244978 +v -0.432707 0.883235 0.251153 +v -0.297277 0.702176 0.157018 +v -0.665554 0.953925 0.375154 +v -0.378524 0.844472 0.164261 +v -0.407548 0.865061 0.166207 +v -0.565056 0.892787 0.323618 +v -0.680919 0.983691 0.222437 +v -0.680712 0.988049 0.240651 +v -0.690672 0.995688 0.235120 +v -0.706331 1.002705 0.233827 +v -0.327205 0.711824 0.160417 +v -0.514490 0.863456 0.289044 +v -0.576235 0.887461 0.289295 +v -0.383215 0.855459 0.177580 +v -0.431568 0.882746 0.187804 +v -0.446106 0.886457 0.194223 +v -0.470973 0.885657 0.196231 +v -0.391559 0.788650 0.316338 +v -0.592378 0.953031 0.305208 +v -0.698817 1.000937 0.232362 +v -0.304608 0.708130 0.162211 +v -0.326499 0.706819 0.179359 +v -0.410317 0.875878 0.190325 +v -0.696616 0.874461 0.369738 +v -0.681280 0.811548 0.361034 +v -0.455586 0.765633 0.360837 +v -0.589648 0.955929 0.366222 +v -0.552740 0.855917 0.332991 +v -0.314894 0.710193 0.165927 +v -0.662781 0.912861 0.404730 +v -0.589631 0.951933 0.315057 +v -0.483390 0.877274 0.269996 +v -0.364335 0.840954 0.183336 +v -0.391764 0.867791 0.193966 +v -0.699058 0.786998 0.312500 +v -0.555455 0.877053 0.272302 +v -0.570516 0.878574 0.264488 +v -0.576713 1.026961 0.221979 +v -0.673107 0.963211 0.299319 +v -0.585219 0.892257 0.284103 +v -0.676546 0.953397 0.354727 +v -0.462866 0.874479 0.278783 +v -0.476743 0.885915 0.210383 +v -0.673299 0.784840 0.382250 +v -0.620276 0.597320 0.330967 +v -0.605440 0.598987 0.352726 +v -0.596907 0.601415 0.381111 +v -0.461569 0.783284 0.101837 +v -0.596014 0.975834 0.218939 +v -0.686015 0.884985 0.291803 +v -0.653242 0.599926 0.321077 +v -0.636939 0.600092 0.328834 +v -0.615241 0.601430 0.335570 +v -0.597959 0.605861 0.379807 +v -0.573467 0.610913 0.398041 +v -0.648644 0.604096 0.324150 +v -0.605087 0.605596 0.358397 +v -0.602568 0.606865 0.369718 +v -0.582747 0.612647 0.392076 +v -0.563860 0.617334 0.397829 +v -0.562836 0.609057 0.400545 +v -0.608850 0.759718 0.186370 +v -0.512924 0.606382 0.362306 +v -0.656602 0.606446 0.312419 +v -0.652632 0.612111 0.317159 +v -0.648034 0.611827 0.321747 +v -0.638367 0.609131 0.325236 +v -0.629606 0.608154 0.329655 +v -0.604310 0.607098 0.336093 +v -0.514265 0.620948 0.358231 +v -0.494234 0.609486 0.368105 +v -0.469691 0.611586 0.372894 +v -0.452061 0.786211 0.339720 +v -0.663363 0.862095 0.271396 +v -0.615884 0.608478 0.332128 +v -0.599610 0.617579 0.363122 +v -0.656052 0.784804 0.394070 +v -0.505595 0.614393 0.362898 +v -0.491075 0.616499 0.368635 +v -0.478489 0.614611 0.371185 +v -0.647225 0.619947 0.316279 +v -0.632347 0.787130 0.401651 +v -0.470444 0.726621 0.356019 +v -0.507614 0.621938 0.359533 +v -0.462546 0.621225 0.368630 +v -0.651710 0.619372 0.306700 +v -0.634437 0.619646 0.321033 +v -0.668361 0.799884 0.382581 +v -0.456462 0.730128 0.365750 +v -0.568299 0.624016 0.394840 +v -0.480967 0.625270 0.367314 +v -0.616642 0.804349 0.400716 +v -0.615467 0.619385 0.325069 +v -0.615366 0.626904 0.317225 +v -0.445960 0.762560 0.092771 +v -0.621992 0.740373 0.402969 +v -0.570954 0.631492 0.387373 +v -0.459307 0.739061 0.367058 +v -0.496017 0.627420 0.361094 +v -0.480568 0.634075 0.359959 +v -0.447696 0.793518 0.328890 +v -0.638904 0.626258 0.314459 +v -0.609233 0.633061 0.308793 +v -0.608069 0.985505 0.275514 +v -0.559981 0.638879 0.375297 +v -0.602216 0.849749 0.442969 +v -0.473592 0.757702 0.356345 +v -0.687905 0.973040 0.280757 +v -0.507608 0.633243 0.351667 +v -0.467533 0.765761 0.356009 +v -0.608177 0.843840 0.440036 +v -0.589639 0.636461 0.310321 +v -0.499199 0.645113 0.341729 +v -0.488648 0.634518 0.356081 +v -0.450144 0.775726 0.355153 +v -0.599051 0.768397 0.409141 +v -0.596647 0.641802 0.305230 +v -0.613303 0.859325 0.445218 +v -0.548321 0.642943 0.363126 +v -0.495031 0.639746 0.350362 +v -0.463877 0.777275 0.348593 +v -0.658246 0.768894 0.393274 +v -0.614715 0.639881 0.298836 +v -0.662829 0.760464 0.389267 +v -0.651839 0.868383 0.438319 +v -0.440908 0.784793 0.344545 +v -0.481905 0.645234 0.345348 +v -0.637027 0.921630 0.426160 +v -0.609600 0.763948 0.408772 +v -0.664816 0.935644 0.400306 +v -0.596459 0.649505 0.303468 +v -0.581451 0.654115 0.310297 +v -0.644949 0.933855 0.413341 +v -0.592320 0.751958 0.407486 +v -0.554609 0.649222 0.356403 +v -0.639712 0.942551 0.406400 +v -0.494447 0.650521 0.332918 +v -0.633993 0.852076 0.447814 +v -0.741344 1.014767 0.204224 +v -0.644404 0.776110 0.399271 +v -0.610334 0.654140 0.296542 +v -0.619657 0.938245 0.414390 +v -0.585001 0.757179 0.407824 +v -0.625465 0.772380 0.201566 +v -0.628096 0.890532 0.445057 +v -0.651610 0.856248 0.441131 +v -0.586076 0.651911 0.306776 +v -0.553610 0.662451 0.354359 +v -0.642043 0.880874 0.440268 +v -0.492876 0.657381 0.329001 +v -0.483553 0.663795 0.331790 +v -0.698563 0.860519 0.310615 +v -0.606616 0.884094 0.450837 +v -0.585317 0.661362 0.311373 +v -0.751584 1.016975 0.192423 +v -0.581201 0.664857 0.326703 +v -0.573318 0.672389 0.340249 +v -0.570426 0.662637 0.340125 +v -0.543584 0.679561 0.359126 +v -0.650710 0.737236 0.389465 +v -0.447862 0.666198 0.347399 +v -0.630089 0.765486 0.403611 +v -0.648003 0.752741 0.395569 +v -0.584569 0.671988 0.335826 +v -0.626373 0.929141 0.422395 +v -0.466119 0.710535 0.351065 +v -0.479978 0.681429 0.334753 +v -0.643859 0.862191 0.445177 +v -0.594864 0.998319 0.264058 +v -0.648333 0.924272 0.418450 +v -0.635979 0.908098 0.434160 +v -0.437096 0.676197 0.350046 +v -0.615245 0.870561 0.450144 +v -0.659987 0.831954 0.252938 +v -0.634863 0.747822 0.401273 +v -0.635279 0.842464 0.444502 +v -0.455217 0.680528 0.346384 +v -0.425953 0.678633 0.350565 +v -0.596161 0.739182 0.404312 +v -0.617495 0.893672 0.446852 +v -0.566495 0.638794 0.372520 +v -0.481913 0.821319 0.125626 +v -0.549797 0.601480 0.396679 +v -0.700804 0.984568 0.261968 +v -0.649796 0.802449 0.392500 +v -0.633323 0.874510 0.445947 +v -0.631585 0.812324 0.395614 +v -0.667761 0.777185 0.388251 +v -0.648619 0.909270 0.425447 +v -0.444127 0.770099 0.359353 +v -0.659684 0.766507 0.227069 +v -0.485831 0.694771 0.334869 +v -0.566086 1.033058 0.168198 +v -0.531814 0.821451 0.146061 +v -0.456295 0.751715 0.366285 +v -0.626382 0.960767 0.295541 +v -0.625026 0.858782 0.448916 +v -0.718376 0.943360 0.221473 +v -0.443983 0.732445 0.366938 +v -0.623890 0.911564 0.435926 +v -0.454895 0.600627 0.362469 +v -0.624186 0.875796 0.448942 +v -0.668655 0.815022 0.255644 +v -0.451169 0.716311 0.360207 +v -0.688022 0.965816 0.285736 +v -0.618384 0.750512 0.406483 +v -0.616071 0.882378 0.450791 +v -0.638201 0.736737 0.396801 +v -0.639930 0.798745 0.396732 +v -0.660159 0.796933 0.389533 +v -0.612644 0.910835 0.437806 +v -0.625801 0.778220 0.403986 +v -0.604365 0.779966 0.407835 +v -0.646749 0.758390 0.216032 +v -0.622055 0.726261 0.395838 +v -0.567968 0.813469 0.167247 +v -0.664611 0.943629 0.394408 +v -0.469701 0.697448 0.344458 +v -0.449399 0.696436 0.354625 +v -0.616612 0.855307 0.446546 +v -0.555235 1.017424 0.146859 +v -0.472731 0.746053 0.358754 +v -0.619482 0.759118 0.198841 +v -0.593485 0.801566 0.182461 +v -0.584437 0.806949 0.175361 +v -0.679472 0.854228 0.284633 +v -0.627689 0.808919 0.209600 +v -0.482193 0.713536 0.343074 +v -0.627565 0.597937 0.206358 +v -0.625766 0.610779 0.206207 +v -0.624426 0.604129 0.217014 +v -0.695824 0.834584 0.342390 +v -0.330334 0.712420 0.134554 +v -0.659983 0.606079 0.297268 +v -0.599534 0.609593 0.342876 +v -0.743882 1.004564 0.200011 +v -0.601395 1.002393 0.239849 +v -0.754559 1.025264 0.181567 +v -0.623983 0.610386 0.183216 +v -0.628633 0.602122 0.196893 +v -0.656638 0.615019 0.280969 +v -0.655306 0.618150 0.298399 +v -0.713583 0.971640 0.238543 +v -0.600916 0.612570 0.353194 +v -0.727577 0.949329 0.195738 +v -0.620197 0.618314 0.192502 +v -0.619981 0.610405 0.227508 +v -0.700864 0.879278 0.340945 +v -0.679075 0.954809 0.303942 +v -0.736822 1.000207 0.167598 +v -0.595375 0.618901 0.372383 +v -0.600645 0.866017 0.231502 +v -0.614102 0.868519 0.243604 +v -0.619087 0.623760 0.200765 +v -0.648217 0.625830 0.298979 +v -0.712467 0.957630 0.227256 +v -0.590345 0.622536 0.325705 +v -0.596586 0.617986 0.342803 +v -0.591459 0.616541 0.382972 +v -0.682519 0.944917 0.316160 +v -0.618503 0.619575 0.212709 +v -0.615612 0.621088 0.224269 +v -0.696363 0.801691 0.310825 +v -0.638874 0.630610 0.303813 +v -0.693726 0.949764 0.270413 +v -0.581175 0.631540 0.335867 +v -0.594203 0.624894 0.360753 +v -0.585694 0.629276 0.377092 +v -0.582339 0.624300 0.386803 +v -0.638857 0.627977 0.273407 +v -0.639419 0.630377 0.289891 +v -0.626519 0.633348 0.305613 +v -0.678410 0.940300 0.386812 +v -0.582899 0.631717 0.348280 +v -0.578702 0.635626 0.356343 +v -0.590821 1.015303 0.232555 +v -0.655411 0.908985 0.417217 +v -0.676848 0.884287 0.398736 +v -0.668976 0.876589 0.409995 +v -0.610584 0.616803 0.167151 +v -0.700767 0.843453 0.344839 +v -0.627679 0.636922 0.281900 +v -0.695265 0.932251 0.246240 +v -0.584958 0.630075 0.317405 +v -0.577595 0.635562 0.370660 +v -0.619025 0.970056 0.290526 +v -0.688865 0.821528 0.310786 +v -0.581031 0.632028 0.321120 +v -0.577407 0.639434 0.326732 +v -0.702847 0.963468 0.268168 +v -0.600178 0.636774 0.204682 +v -0.674238 0.954138 0.323026 +v -0.618628 0.645004 0.291858 +v -0.568036 0.645032 0.346997 +v -0.561404 0.641235 0.360234 +v -0.735674 0.999886 0.189233 +v -0.626603 0.637237 0.259807 +v -0.574269 0.646984 0.334780 +v -0.735825 0.995825 0.221806 +v -0.468405 0.864236 0.151260 +v -0.590851 0.820627 0.192813 +v -0.587499 0.642550 0.189174 +v -0.354460 0.703171 0.127857 +v -0.401983 0.822714 0.121361 +v -0.625171 0.652030 0.265848 +v -0.626208 0.642694 0.274915 +v -0.580361 0.641025 0.312825 +v -0.578045 0.643498 0.318464 +v -0.566664 0.653702 0.344981 +v -0.737174 0.989737 0.152793 +v -0.582611 0.650046 0.192297 +v -0.532586 0.827978 0.152269 +v -0.620676 0.657001 0.285140 +v -0.579651 1.026524 0.211681 +v -0.586306 0.647524 0.178774 +v -0.579624 0.649102 0.203762 +v -0.625865 0.664679 0.268347 +v -0.577977 0.655169 0.320449 +v -0.675126 0.948811 0.379874 +v -0.749811 1.015088 0.186952 +v -0.728727 0.986347 0.230423 +v -0.587125 0.655792 0.168870 +v -0.601648 0.659800 0.301670 +v -0.699992 0.885496 0.327710 +v -0.699898 0.892070 0.345180 +v -0.690947 0.889590 0.373074 +v -0.610403 0.987902 0.253099 +v -0.628284 0.673606 0.254937 +v -0.611760 0.666778 0.302134 +v -0.693732 0.909248 0.336710 +v -0.685969 0.886497 0.385791 +v -0.674217 0.893085 0.395427 +v -0.436781 0.846844 0.131644 +v -0.586613 0.668041 0.181981 +v -0.580157 0.659353 0.202328 +v -0.625225 0.671432 0.288829 +v -0.687802 0.901008 0.366706 +v -0.731027 1.006274 0.127373 +v -0.737924 0.990462 0.142126 +v -0.569486 1.033904 0.180751 +v -0.559131 1.042693 0.148970 +v -0.584240 0.664722 0.192719 +v -0.490491 0.782269 0.108291 +v -0.627036 0.672318 0.276998 +v -0.666773 0.903243 0.395385 +v -0.499403 0.805485 0.128970 +v -0.662024 0.891302 0.410482 +v -0.679332 0.909385 0.384061 +v -0.685659 0.872190 0.393588 +v -0.651034 0.887323 0.428574 +v -0.611295 0.860281 0.230861 +v -0.483782 0.788459 0.114324 +v -0.612191 0.791282 0.195216 +v -0.731785 0.969447 0.149093 +v -0.708639 0.981543 0.257105 +v -0.606340 0.994404 0.259525 +v -0.689372 0.954270 0.286395 +v -0.735054 0.965773 0.156714 +v -0.342123 0.689419 0.108127 +v -0.590654 0.676980 0.171787 +v -0.592487 0.688904 0.180468 +v -0.443320 0.801712 0.106537 +v -0.618056 0.975234 0.280200 +v -0.736618 0.974954 0.147645 +v -0.715680 0.975924 0.249976 +v -0.541733 0.852787 0.190751 +v -0.444859 0.822418 0.118768 +v -0.737030 0.973135 0.157105 +v -0.590543 0.674353 0.150920 +v -0.594594 0.688980 0.150550 +v -0.593695 0.680327 0.163046 +v -0.585186 0.677522 0.201619 +v -0.672074 0.842077 0.279947 +v -0.733235 0.971885 0.171588 +v -0.598144 0.696812 0.166706 +v -0.590667 0.692823 0.194647 +v -0.475929 0.801389 0.114669 +v -0.361736 0.703004 0.124991 +v -0.513446 0.830204 0.143886 +v -0.663888 0.694868 0.300342 +v -0.745849 1.013145 0.202581 +v -0.685046 0.945892 0.330295 +v -0.698723 0.894974 0.332146 +v -0.445386 0.747414 0.090852 +v -0.673691 0.704986 0.300754 +v -0.651967 0.768417 0.218418 +v -0.720982 0.950668 0.212215 +v -0.742628 1.010290 0.183752 +v -0.598473 0.698578 0.156566 +v -0.465910 0.801109 0.108981 +v -0.675560 0.712803 0.334713 +v -0.699648 0.955962 0.257940 +v -0.696602 0.889616 0.359701 +v -0.529035 0.779223 0.109866 +v -0.685374 0.715725 0.297123 +v -0.678225 0.711993 0.322109 +v -0.670248 0.714140 0.345729 +v -0.698242 0.937307 0.252683 +v -0.687278 0.939185 0.373810 +v -0.688349 0.932496 0.369342 +v -0.742041 1.019118 0.149689 +v -0.580407 0.816151 0.178370 +v -0.426807 0.861943 0.150442 +v -0.682171 0.714901 0.310877 +v -0.685873 0.721709 0.322216 +v -0.679074 0.724043 0.343315 +v -0.689428 0.942161 0.363784 +v -0.502022 0.843829 0.145156 +v -0.713531 0.948649 0.232427 +v -0.603754 0.712502 0.150133 +v -0.604497 0.715696 0.161123 +v -0.599713 0.709595 0.177400 +v -0.689374 0.723551 0.307702 +v -0.688433 0.925505 0.361275 +v -0.683281 0.933421 0.299268 +v -0.717632 0.968777 0.215782 +v -0.487404 0.837775 0.132862 +v -0.600744 0.722118 0.186741 +v -0.689751 0.736096 0.326408 +v -0.685705 0.725449 0.332280 +v -0.682991 0.736520 0.351179 +v -0.676597 0.733521 0.361006 +v -0.646014 0.727580 0.385646 +v -0.425062 0.831786 0.122888 +v -0.706147 0.963620 0.253281 +v -0.684737 0.946228 0.370477 +v -0.730515 0.983782 0.184150 +v -0.605652 0.724347 0.171021 +v -0.687164 0.733679 0.268730 +v -0.692265 0.733874 0.295357 +v -0.668656 0.741665 0.374091 +v -0.660215 0.735918 0.378256 +v -0.726114 0.965541 0.192626 +v -0.721129 0.977352 0.213755 +v -0.460664 0.823465 0.121464 +v -0.607790 0.724790 0.154435 +v -0.732761 1.020072 0.129089 +v -0.549251 0.838467 0.173940 +v -0.693048 0.736357 0.311948 +v -0.686728 0.915232 0.300465 +v -0.605967 0.731471 0.145530 +v -0.607447 0.734967 0.156447 +v -0.604907 0.732593 0.172542 +v -0.615174 0.847474 0.222145 +v -0.696088 0.746408 0.291534 +v -0.696375 0.745181 0.322080 +v -0.681556 0.746762 0.356908 +v -0.677043 0.741723 0.363840 +v -0.656799 0.749258 0.388448 +v -0.693168 0.742536 0.280374 +v -0.697166 0.744020 0.307544 +v -0.689365 0.741444 0.340409 +v -0.687814 0.918059 0.372047 +v -0.680521 0.925682 0.287832 +v -0.694758 0.895527 0.315480 +v -0.703163 0.947762 0.256876 +v -0.700151 0.951918 0.256762 +v -0.628712 0.858517 0.244003 +v -0.603597 0.750010 0.160000 +v -0.606203 0.739556 0.166483 +v -0.698475 0.754549 0.326818 +v -0.544119 0.812760 0.152830 +v -0.690132 0.931904 0.353162 +v -0.687535 0.935103 0.340131 +v -0.686943 0.945573 0.352210 +v -0.562830 0.600379 0.399358 +v -0.692094 0.754335 0.348129 +v -0.684006 0.757024 0.364700 +v -0.680004 0.753607 0.366638 +v -0.666676 0.753062 0.382972 +v -0.691281 0.935562 0.269721 +v -0.604248 0.745835 0.182094 +v -0.700695 0.763615 0.314425 +v -0.696619 0.756953 0.339460 +v -0.678474 0.930023 0.389545 +v -0.692657 0.859245 0.382753 +v -0.604434 0.749908 0.149448 +v -0.598583 0.759606 0.167333 +v -0.695590 0.757262 0.280972 +v -0.697191 0.758340 0.295555 +v -0.700420 0.762158 0.305012 +v -0.689496 0.762345 0.358964 +v -0.686982 0.912866 0.364904 +v -0.684524 0.948264 0.295717 +v -0.613092 0.984951 0.263090 +v -0.702152 0.876751 0.320617 +v -0.733974 0.958451 0.169335 +v -0.695485 0.770058 0.336531 +v -0.690352 0.770859 0.355714 +v -0.680531 0.768527 0.375159 +v -0.688379 0.919634 0.321940 +v -0.681242 0.924772 0.274843 +v -0.734049 0.992058 0.216294 +v -0.569196 0.775318 0.126041 +v -0.730905 0.958034 0.182922 +v -0.700879 0.869444 0.357092 +v -0.694161 0.766840 0.273299 +v -0.700397 0.773603 0.303126 +v -0.556367 0.777505 0.120210 +v -0.577366 0.838015 0.195559 +v -0.596622 0.841555 0.209455 +v -0.546190 0.802308 0.148956 +v -0.511174 0.758161 0.096044 +v -0.547671 0.772356 0.111383 +v -0.454416 0.853625 0.137322 +v -0.426907 0.801153 0.105598 +v -0.373107 0.684170 0.119608 +v -0.430551 0.787557 0.101736 +v -0.564972 0.802077 0.161722 +v -0.419370 0.744660 0.091067 +v -0.556771 1.054417 0.167803 +v -0.486071 0.847433 0.139279 +v -0.328498 0.697037 0.111022 +v -0.521508 0.832410 0.148879 +v -0.361574 0.687614 0.117323 +v -0.546203 0.788417 0.135291 +v -0.650524 0.846397 0.255137 +v -0.465746 0.850345 0.135148 +v -0.475959 0.778661 0.104690 +v -0.595438 0.635955 0.174531 +v -0.558727 1.050898 0.159179 +v -0.542098 0.823813 0.159310 +v -0.659467 0.609553 0.302920 +v -0.458743 0.812559 0.117831 +v -0.582365 0.848941 0.212259 +v -0.628079 0.847378 0.231015 +v -0.518359 0.846144 0.161871 +v -0.555466 1.051656 0.151114 +v -0.602671 0.607843 0.160784 +v -0.553928 1.045643 0.140664 +v -0.627562 0.828610 0.219933 +v -0.567717 0.766056 0.116962 +v -0.635259 0.956491 0.296102 +v -0.646588 0.825276 0.230675 +v -0.549271 1.039798 0.136042 +v -0.590731 0.597815 0.157158 +v -0.530825 0.800394 0.140803 +v -0.623168 0.965979 0.280559 +v -0.466776 0.769340 0.097599 +v -0.453338 0.866625 0.152694 +v -0.570866 0.788961 0.162060 +v -0.560014 0.787900 0.153392 +v -0.629491 0.947847 0.279941 +v -0.475177 0.876674 0.174078 +v -0.536990 0.793491 0.141590 +v -0.553609 1.037481 0.135080 +v -0.633149 0.952884 0.287934 +v -0.574635 0.845144 0.201509 +v -0.411536 0.830364 0.122904 +v -0.606353 0.599062 0.161120 +v -0.556076 1.031169 0.139829 +v -0.472837 0.840197 0.130983 +v -0.639469 0.944570 0.282526 +v -0.398268 0.796715 0.109132 +v -0.343381 0.709122 0.131659 +v -0.499653 0.853238 0.156771 +v -0.476221 0.764070 0.095437 +v -0.497752 0.786918 0.116488 +v -0.606833 0.632518 0.227477 +v -0.527096 0.834936 0.157035 +v -0.534678 0.840431 0.167713 +v -0.341313 0.716790 0.144897 +v -0.433264 0.821680 0.117067 +v -0.611673 0.835502 0.214931 +v -0.324832 0.686203 0.108738 +v -0.645730 0.603335 0.258767 +v -0.518917 0.822591 0.140642 +v -0.442329 0.677765 0.092026 +v -0.491937 0.799463 0.125487 +v -0.587106 0.867694 0.231200 +v -0.423393 0.841018 0.129898 +v -0.649547 0.595428 0.261662 +v -0.633367 0.936046 0.277961 +v -0.484535 0.796359 0.117975 +v -0.412071 0.801929 0.107130 +v -0.475976 0.807989 0.120516 +v -0.452321 0.775724 0.098303 +v -0.424355 0.771182 0.095547 +v -0.495718 0.793459 0.124026 +v -0.610412 0.632093 0.208037 +v -0.404886 0.788294 0.105544 +v -0.473196 0.857385 0.143259 +v -0.328709 0.709810 0.125661 +v -0.419303 0.850149 0.138592 +v -0.617104 0.621128 0.180737 +v -0.577816 0.827234 0.188282 +v -0.638326 0.923901 0.274281 +v -0.458356 0.805771 0.111988 +v -0.506865 0.768774 0.098017 +v -0.513194 0.860931 0.172749 +v -0.569013 0.783414 0.149499 +v -0.555021 0.813805 0.160617 +v -0.514453 0.797324 0.133299 +v -0.512677 0.869569 0.184938 +v -0.743505 1.033911 0.144871 +v -0.562208 0.839142 0.187404 +v -0.641646 0.622255 0.266281 +v -0.345227 0.670765 0.101682 +v -0.618320 0.605050 0.171602 +v -0.626412 0.917904 0.270592 +v -0.395327 0.804913 0.113967 +v -0.586198 0.854929 0.219060 +v -0.560332 0.749999 0.107449 +v -0.646624 0.854970 0.259708 +v -0.597816 0.858411 0.222774 +v -0.424063 0.819166 0.114894 +v -0.508765 0.841545 0.149786 +v -0.397382 0.764188 0.099152 +v -0.534858 0.770460 0.105473 +v -0.354157 0.678564 0.105010 +v -0.332673 0.682458 0.106663 +v -0.445028 0.839189 0.125786 +v -0.538793 0.847670 0.177252 +v -0.607469 0.708258 0.387605 +v -0.457575 0.753546 0.091957 +v -0.412879 0.756044 0.092497 +v -0.441962 0.858093 0.142919 +v -0.587931 0.617991 0.155160 +v -0.546110 0.784060 0.124466 +v -0.640848 0.595350 0.249993 +v -0.608293 0.627963 0.174653 +v -0.602113 0.848554 0.217992 +v -0.459203 0.835798 0.125916 +v -0.373097 0.676120 0.116391 +v -0.626967 0.601535 0.237420 +v -0.504356 0.777256 0.103368 +v -0.581598 0.772480 0.132360 +v -0.523527 0.860305 0.184725 +v -0.349269 0.699101 0.120130 +v -0.527677 0.788935 0.125329 +v -0.616885 0.903915 0.268883 +v -0.596516 0.885388 0.268383 +v -0.487461 0.855049 0.148337 +v -0.499610 0.862444 0.168037 +v -0.580169 0.781302 0.164647 +v -0.628327 0.602604 0.186210 +v -0.623546 0.895875 0.264714 +v -0.609162 0.893828 0.266249 +v -0.514584 0.784556 0.113965 +v -0.500563 0.878364 0.198131 +v -0.459269 0.883803 0.183414 +v -0.412220 0.770550 0.097189 +v -0.741644 1.036394 0.145942 +v -0.592092 0.828275 0.196576 +v -0.480520 0.866547 0.159924 +v -0.587004 0.773906 0.144715 +v -0.605519 0.883147 0.263240 +v -0.484479 0.878415 0.183917 +v -0.522917 0.763301 0.100698 +v -0.488443 0.829631 0.129257 +v -0.434808 0.767200 0.094239 +v -0.626669 0.866851 0.254850 +v -0.620061 0.855661 0.231767 +v -0.542657 0.857004 0.196768 +v -0.737012 1.033702 0.137681 +v -0.628631 0.606589 0.240578 +v -0.617917 0.881623 0.260895 +v -0.591652 0.880473 0.265086 +v -0.486944 0.881311 0.193022 +v -0.466931 0.875386 0.166544 +v -0.452346 0.875332 0.164871 +v -0.336121 0.702854 0.117261 +v -0.732778 1.028056 0.132921 +v -0.436823 0.686902 0.094301 +v -0.404724 0.808818 0.111688 +v -0.414822 0.817435 0.114827 +v -0.628119 0.838143 0.225567 +v -0.571016 0.862743 0.226507 +v -0.615571 0.875222 0.257041 +v -0.573147 0.870162 0.237421 +v -0.324615 0.703582 0.116623 +v -0.524870 0.869093 0.206736 +v -0.551336 0.827322 0.166861 +v -0.632884 0.613071 0.247392 +v -0.599830 0.636270 0.186444 +v -0.482984 0.775470 0.101940 +v -0.512769 0.791433 0.127049 +v -0.604524 0.875446 0.250185 +v -0.591274 0.874356 0.244723 +v -0.540927 0.863137 0.207728 +v -0.516689 0.870905 0.196405 +v -0.499452 0.872950 0.179951 +v -0.509726 0.598074 0.129039 +v -0.555877 0.598941 0.146897 +v -0.575649 0.598113 0.152153 +v -0.480093 0.601613 0.116619 +v -0.504455 0.602115 0.123734 +v -0.643119 0.783581 0.213125 +v -0.651538 0.788035 0.220516 +v -0.576492 1.003122 0.186899 +v -0.477791 0.611860 0.112578 +v -0.503447 0.609751 0.122107 +v -0.533918 0.603061 0.136859 +v -0.552342 0.606827 0.143658 +v -0.620631 0.602078 0.230401 +v -0.623752 0.819343 0.213049 +v -0.634893 0.823456 0.220752 +v -0.657782 0.603136 0.273997 +v -0.566844 0.998470 0.178831 +v -0.528478 0.608941 0.132771 +v -0.586637 0.606051 0.154566 +v -0.403246 0.605802 0.145608 +v -0.537879 0.618198 0.136665 +v -0.563218 0.612989 0.146075 +v -0.656948 0.914764 0.271826 +v -0.616898 0.615830 0.233170 +v -0.661265 0.606161 0.283962 +v -0.382743 0.614356 0.131270 +v -0.390837 0.617499 0.129306 +v -0.501253 0.618337 0.121158 +v -0.463584 0.794651 0.105349 +v -0.659434 0.816181 0.240584 +v -0.649358 0.614166 0.268257 +v -0.418168 0.612179 0.141437 +v -0.516806 0.623913 0.126781 +v -0.538648 0.624045 0.136327 +v -0.564810 0.623440 0.146680 +v -0.588945 0.627750 0.159249 +v -0.498833 0.822058 0.133216 +v -0.659086 0.780799 0.227874 +v -0.651826 0.620752 0.286004 +v -0.663634 0.776247 0.236200 +v -0.404002 0.621676 0.130671 +v -0.488010 0.602756 0.369120 +v -0.468656 0.626735 0.105103 +v -0.488544 0.626212 0.110526 +v -0.507507 0.631148 0.115382 +v -0.542563 0.629174 0.130625 +v -0.560985 0.628859 0.143643 +v -0.412412 0.627821 0.130425 +v -0.495286 0.628887 0.113686 +v -0.522066 0.629862 0.122296 +v -0.528014 0.637185 0.116696 +v -0.601915 0.627949 0.167482 +v -0.580963 0.964472 0.214576 +v -0.623487 0.623057 0.243597 +v -0.391961 0.635787 0.118443 +v -0.424023 0.621662 0.134482 +v -0.444612 0.638836 0.102558 +v -0.479647 0.630465 0.105959 +v -0.484006 0.639619 0.102119 +v -0.512639 0.638112 0.110634 +v -0.546186 0.634898 0.127758 +v -0.562589 0.649323 0.129333 +v -0.575127 0.633699 0.151866 +v -0.382315 0.630704 0.118179 +v -0.400796 0.639881 0.122745 +v -0.671547 0.791611 0.248625 +v -0.520982 0.644879 0.110980 +v -0.546439 0.643265 0.123749 +v -0.567556 0.638359 0.141062 +v -0.584821 0.636805 0.163983 +v -0.634570 0.826078 0.423422 +v -0.621722 0.638540 0.249840 +v -0.696951 0.876692 0.306328 +v -0.388303 0.648818 0.114202 +v -0.690476 0.792049 0.277090 +v -0.463677 0.647775 0.095722 +v -0.507090 0.646658 0.106980 +v -0.584615 0.648146 0.161287 +v -0.588801 0.641927 0.212839 +v -0.603571 0.980333 0.230538 +v -0.739568 1.023699 0.136604 +v -0.585860 1.017012 0.209510 +v -0.374324 0.644214 0.108291 +v -0.614990 0.960114 0.255382 +v -0.445406 0.655817 0.095974 +v -0.494157 0.641503 0.104012 +v -0.580664 0.654564 0.147546 +v -0.578838 0.648761 0.213778 +v -0.592167 0.642332 0.219191 +v -0.599713 0.641583 0.224906 +v -0.612358 0.636200 0.236687 +v -0.372803 0.653607 0.106160 +v -0.403190 0.646790 0.121215 +v -0.477845 0.647236 0.098963 +v -0.507024 0.658758 0.101897 +v -0.520288 0.660236 0.107146 +v -0.523009 0.652332 0.111648 +v -0.535377 0.649335 0.115762 +v -0.553627 0.659925 0.119025 +v -0.579450 0.668402 0.133581 +v -0.645762 0.895314 0.266727 +v -0.606476 0.660698 0.228556 +v -0.725932 0.998741 0.133018 +v -0.362968 0.652559 0.104469 +v -0.601834 0.828251 0.201841 +v -0.467893 0.656957 0.090510 +v -0.511249 0.668875 0.103232 +v -0.556273 0.654536 0.121489 +v -0.583465 0.650722 0.218446 +v -0.612184 0.647641 0.237479 +v -0.666941 0.838536 0.271432 +v -0.729185 0.948560 0.185736 +v -0.529985 0.598100 0.137832 +v -0.477762 0.660395 0.092313 +v -0.495825 0.657791 0.097957 +v -0.531969 0.672205 0.107062 +v -0.541586 0.660795 0.114651 +v -0.621910 0.651140 0.251795 +v -0.626673 0.673859 0.249222 +v -0.686510 0.787016 0.265943 +v -0.372711 0.661182 0.107142 +v -0.388033 0.658532 0.115820 +v -0.385642 0.667153 0.117617 +v -0.554261 0.672258 0.116666 +v -0.584450 0.659582 0.218345 +v -0.592914 0.657238 0.222161 +v -0.442492 0.602596 0.352781 +v -0.355926 0.668015 0.102026 +v -0.366130 0.671564 0.107601 +v -0.482775 0.673187 0.094056 +v -0.497202 0.666487 0.097986 +v -0.546771 0.674498 0.111269 +v -0.563563 0.671917 0.119335 +v -0.571555 0.683136 0.118541 +v -0.616203 0.673251 0.231822 +v -0.634097 0.868136 0.259859 +v -0.690075 0.855390 0.298724 +v -0.691009 0.870547 0.297734 +v -0.460114 0.669204 0.089672 +v -0.505870 0.680023 0.099195 +v -0.519053 0.675098 0.102394 +v -0.576144 0.677553 0.124568 +v -0.579727 0.665317 0.210058 +v -0.585349 0.678127 0.210111 +v -0.581711 0.664804 0.214945 +v -0.594579 0.668638 0.221059 +v -0.613914 0.681900 0.226061 +v -0.632521 0.895690 0.264376 +v -0.606238 0.966109 0.237959 +v -0.661482 0.702698 0.342742 +v -0.575285 0.799312 0.166355 +v -0.586192 0.791695 0.173792 +v -0.611913 0.943657 0.258962 +v -0.598627 0.781604 0.181787 +v -0.469341 0.679922 0.090733 +v -0.609295 0.803747 0.197927 +v -0.619173 0.662571 0.240302 +v -0.618082 0.928687 0.271521 +v -0.628124 0.789260 0.205412 +v -0.641797 0.795965 0.213996 +v -0.456293 0.682105 0.090760 +v -0.500439 0.683272 0.095919 +v -0.532899 0.687407 0.103667 +v -0.554705 0.685733 0.111988 +v -0.622216 0.688110 0.232301 +v -0.641812 0.812172 0.222220 +v -0.650343 0.800228 0.225146 +v -0.659019 0.790824 0.232707 +v -0.654868 0.806733 0.232657 +v -0.575817 1.013692 0.185205 +v -0.459285 0.694975 0.088184 +v -0.486163 0.687514 0.091855 +v -0.495618 0.696472 0.093867 +v -0.581196 0.692510 0.121553 +v -0.657325 0.897291 0.270635 +v -0.681514 0.921066 0.293120 +v -0.603644 0.678640 0.221919 +v -0.630792 0.679492 0.262895 +v -0.644270 0.682264 0.275293 +v -0.594427 0.987199 0.213548 +v -0.555614 0.989013 0.176343 +v -0.511517 0.689977 0.097589 +v -0.548140 0.702275 0.107760 +v -0.560910 0.697725 0.113377 +v -0.592311 0.694180 0.205954 +v -0.630762 0.687644 0.250384 +v -0.652443 0.690445 0.271733 +v -0.655104 0.876955 0.267696 +v -0.464453 0.602280 0.369902 +v -0.470729 0.694750 0.087845 +v -0.494555 0.703530 0.090950 +v -0.513992 0.698472 0.098487 +v -0.542597 0.693585 0.108156 +v -0.590199 0.695162 0.130876 +v -0.606146 0.957736 0.242718 +v -0.629103 0.694280 0.239612 +v -0.642447 0.693126 0.254877 +v -0.627543 0.923084 0.273238 +v -0.691807 0.887323 0.304082 +v -0.632502 0.879256 0.262356 +v -0.477134 0.704143 0.088018 +v -0.512462 0.706103 0.094789 +v -0.528675 0.705031 0.101233 +v -0.570011 0.701606 0.113936 +v -0.664310 0.850418 0.272585 +v -0.596867 0.686215 0.214304 +v -0.503228 0.832828 0.137284 +v -0.644910 0.698240 0.354868 +v -0.561295 0.711742 0.109605 +v -0.583019 0.705569 0.119895 +v -0.595464 0.712063 0.128657 +v -0.599355 0.707260 0.140159 +v -0.665827 0.911609 0.276732 +v -0.595971 0.706931 0.199135 +v -0.610258 0.703050 0.212032 +v -0.636317 0.704625 0.234338 +v -0.660287 0.696645 0.276891 +v -0.549387 1.030603 0.130877 +v -0.683500 0.874131 0.286562 +v -0.637341 0.831177 0.434043 +v -0.506471 0.716632 0.091641 +v -0.730767 0.975078 0.143441 +v -0.619149 0.713844 0.213515 +v -0.619771 0.702064 0.220694 +v -0.625693 0.711357 0.223622 +v -0.648466 0.702342 0.243192 +v -0.674411 0.708342 0.283045 +v -0.450394 0.716011 0.087605 +v -0.482908 0.714997 0.090280 +v -0.518360 0.715020 0.094733 +v -0.538621 0.715492 0.102214 +v -0.553883 0.718127 0.106691 +v -0.589732 0.725013 0.121820 +v -0.597101 0.710032 0.189978 +v -0.603496 0.712247 0.205430 +v -0.666787 0.713077 0.250965 +v -0.662272 0.704290 0.259008 +v -0.561206 0.978664 0.190557 +v -0.462087 0.711806 0.087756 +v -0.483172 0.723489 0.090931 +v -0.496098 0.718310 0.092467 +v -0.574743 0.726650 0.114769 +v -0.578632 0.716594 0.115793 +v -0.633997 0.712944 0.228126 +v -0.653688 0.715781 0.235459 +v -0.673417 0.710696 0.270335 +v -0.683099 0.845152 0.291451 +v -0.606011 0.816271 0.198286 +v -0.499322 0.733395 0.092211 +v -0.549025 0.728521 0.102892 +v -0.601307 0.722302 0.136682 +v -0.594534 0.965294 0.224269 +v -0.672102 0.721308 0.249203 +v -0.679363 0.720718 0.263739 +v -0.683027 0.718153 0.281627 +v -0.735399 1.009289 0.130929 +v -0.430565 0.720908 0.090268 +v -0.470592 0.730781 0.089904 +v -0.558062 0.731744 0.106814 +v -0.596371 0.723433 0.128103 +v -0.604292 0.722898 0.201912 +v -0.620610 0.726720 0.210361 +v -0.636796 0.720843 0.223004 +v -0.672605 0.883573 0.277444 +v -0.439646 0.730084 0.089926 +v -0.509915 0.732036 0.092599 +v -0.517809 0.727809 0.094902 +v -0.578714 0.737224 0.114719 +v -0.585247 0.743759 0.119248 +v -0.689012 0.901933 0.303426 +v -0.582220 0.992767 0.197083 +v -0.599325 0.725473 0.196381 +v -0.633585 0.730987 0.216221 +v -0.649611 0.727995 0.225202 +v -0.455729 0.734449 0.089015 +v -0.493404 0.744098 0.092993 +v -0.526434 0.747806 0.098574 +v -0.533199 0.730552 0.099330 +v -0.534685 0.742570 0.098127 +v -0.546609 0.742111 0.101477 +v -0.594736 0.811077 0.189174 +v -0.610067 0.738337 0.198636 +v -0.662634 0.733028 0.234341 +v -0.617070 0.805629 0.201919 +v -0.565666 0.741868 0.109329 +v -0.596234 0.738789 0.128221 +v -0.604023 0.735441 0.138868 +v -0.603160 0.734316 0.188355 +v -0.624471 0.739721 0.207615 +v -0.640729 0.740656 0.214243 +v -0.653252 0.739511 0.221795 +v -0.675527 0.827792 0.374621 +v -0.592805 0.826965 0.418921 +v -0.587120 1.003320 0.202792 +v -0.616131 0.680239 0.349708 +v -0.429310 0.739635 0.092096 +v -0.480382 0.753169 0.091549 +v -0.680091 0.794565 0.260648 +v -0.670869 0.738842 0.240912 +v -0.678616 0.734137 0.251786 +v -0.607785 0.983950 0.240619 +v -0.494895 0.757760 0.093578 +v -0.509239 0.749538 0.095291 +v -0.542549 0.754781 0.102562 +v -0.602931 0.747266 0.139119 +v -0.606333 0.749676 0.189382 +v -0.611074 0.749426 0.194529 +v -0.658401 0.752503 0.225776 +v -0.668044 0.752911 0.238307 +v -0.674404 0.867793 0.279112 +v -0.474616 0.790851 0.109462 +v -0.565812 1.018483 0.167178 +v -0.574714 0.755594 0.115358 +v -0.592951 0.762132 0.134305 +v -0.643530 0.746994 0.215100 +v -0.682754 0.750697 0.254022 +v -0.677652 0.816373 0.270908 +v -0.431383 0.752580 0.092052 +v -0.643045 0.840759 0.239139 +v -0.554686 0.760938 0.109521 +v -0.687748 0.829880 0.314090 +v -0.582826 0.763242 0.124859 +v -0.590139 0.753491 0.126246 +v -0.597987 0.760397 0.140630 +v -0.637146 0.765923 0.210516 +v -0.617346 0.598056 0.167061 +v -0.608639 0.594547 0.165769 +v -0.584866 0.594189 0.163409 +v -0.558460 0.594563 0.153506 +v -0.526086 0.595215 0.141175 +v -0.492948 0.596607 0.127409 +v -0.470280 0.598368 0.121658 +v -0.628773 0.596295 0.186453 +v -0.604204 0.594464 0.173612 +v -0.490245 0.596225 0.133101 +v -0.625155 0.594719 0.202984 +v -0.574180 0.594621 0.167857 +v -0.539677 0.595414 0.154734 +v -0.512531 0.595890 0.144483 +v -0.498621 0.597107 0.145668 +v -0.580681 0.595458 0.178276 +v -0.541208 0.596812 0.162755 +v -0.476582 0.596349 0.136592 +v -0.543760 0.601362 0.167893 +v -0.508072 0.601437 0.153707 +v -0.494464 0.602962 0.149555 +v -0.599658 0.595233 0.192613 +v -0.574483 0.601484 0.181375 +v -0.475682 0.600663 0.145761 +v -0.467885 0.597956 0.145933 +v -0.463658 0.597178 0.132089 +v -0.595729 0.600769 0.209498 +v -0.505660 0.608954 0.158455 +v -0.615467 0.594582 0.191235 +v -0.601687 0.595746 0.223602 +v -0.588360 0.600505 0.190400 +v -0.555703 0.607921 0.177754 +v -0.530188 0.608599 0.167961 +v -0.485992 0.606843 0.150863 +v -0.441200 0.596976 0.158951 +v -0.624410 0.596137 0.225262 +v -0.619476 0.594596 0.231446 +v -0.588337 0.606459 0.201041 +v -0.575666 0.608941 0.189762 +v -0.519399 0.610815 0.170746 +v -0.476530 0.608223 0.154958 +v -0.463024 0.597705 0.171881 +v -0.455859 0.596734 0.157281 +v -0.430764 0.600430 0.149845 +v -0.548995 0.610016 0.184289 +v -0.496402 0.611258 0.166118 +v -0.480110 0.610801 0.164388 +v -0.468537 0.603928 0.162070 +v -0.429009 0.598260 0.155377 +v -0.612711 0.594529 0.228358 +v -0.578261 0.609647 0.202371 +v -0.628597 0.594915 0.239442 +v -0.555693 0.609485 0.199183 +v -0.473089 0.608353 0.175172 +v -0.450240 0.596426 0.180753 +v -0.397122 0.601128 0.155360 +v -0.635523 0.594317 0.253941 +v -0.534696 0.609243 0.209503 +v -0.431813 0.596912 0.171727 +v -0.413881 0.597600 0.172691 +v -0.590845 0.602250 0.233392 +v -0.520761 0.609672 0.201988 +v -0.467883 0.599772 0.193462 +v -0.435400 0.600839 0.179451 +v -0.432380 0.602447 0.176853 +v -0.410188 0.597740 0.164684 +v -0.383336 0.601176 0.159202 +v -0.653739 0.595059 0.268776 +v -0.650711 0.594415 0.277039 +v -0.586669 0.609284 0.231000 +v -0.513267 0.610391 0.186363 +v -0.459570 0.596328 0.197749 +v -0.446209 0.601819 0.188170 +v -0.385458 0.598668 0.170305 +v -0.615916 0.594221 0.267765 +v -0.586539 0.595294 0.249909 +v -0.489746 0.610566 0.188718 +v -0.451348 0.599130 0.198325 +v -0.410134 0.601539 0.181429 +v -0.370702 0.603308 0.161388 +v -0.659554 0.595248 0.278692 +v -0.472179 0.606000 0.204600 +v -0.451205 0.596104 0.216474 +v -0.450661 0.595719 0.207068 +v -0.395806 0.597368 0.180630 +v -0.380064 0.598867 0.188694 +v -0.607810 0.689166 0.364714 +v -0.598163 0.594543 0.260328 +v -0.563589 0.608314 0.240886 +v -0.560626 0.608698 0.239473 +v -0.526308 0.608526 0.236143 +v -0.388515 0.598178 0.199788 +v -0.353764 0.613659 0.148141 +v -0.628568 0.594114 0.280932 +v -0.566404 0.594627 0.260406 +v -0.494663 0.609194 0.223180 +v -0.477332 0.609682 0.199380 +v -0.465503 0.600115 0.212799 +v -0.461108 0.602307 0.226548 +v -0.398633 0.603478 0.192704 +v -0.661238 0.596765 0.298539 +v -0.655456 0.594881 0.297122 +v -0.639886 0.594245 0.298349 +v -0.593032 0.594233 0.272849 +v -0.466833 0.608246 0.230339 +v -0.366229 0.603070 0.181273 +v -0.358758 0.606258 0.171717 +v -0.585051 0.594839 0.278086 +v -0.563675 0.595540 0.272685 +v -0.477890 0.608786 0.245798 +v -0.394106 0.601149 0.204645 +v -0.337296 0.617421 0.163018 +v -0.661523 0.602496 0.306885 +v -0.654924 0.597087 0.312196 +v -0.536710 0.607916 0.254370 +v -0.504290 0.608587 0.242898 +v -0.428624 0.598256 0.225223 +v -0.377670 0.601400 0.219864 +v -0.339278 0.615483 0.180800 +v -0.597179 0.594665 0.290966 +v -0.586180 0.600376 0.284536 +v -0.454882 0.604728 0.236938 +v -0.450973 0.598138 0.229881 +v -0.440939 0.597637 0.235110 +v -0.410235 0.596866 0.225702 +v -0.407289 0.597004 0.224528 +v -0.398449 0.597667 0.220793 +v -0.369947 0.602474 0.196115 +v -0.561719 0.602706 0.279346 +v -0.532740 0.595714 0.275667 +v -0.382559 0.599246 0.232175 +v -0.367756 0.608042 0.228233 +v -0.355672 0.608640 0.198246 +v -0.319470 0.627449 0.168598 +v -0.573183 0.693550 0.371085 +v -0.637222 0.595267 0.317406 +v -0.547521 0.595214 0.276599 +v -0.528903 0.596589 0.279127 +v -0.440397 0.602660 0.242935 +v -0.321955 0.627604 0.187079 +v -0.594484 0.824393 0.397691 +v -0.604195 0.594596 0.316188 +v -0.592777 0.594484 0.309154 +v -0.545416 0.601403 0.286055 +v -0.524942 0.599918 0.280239 +v -0.521611 0.606956 0.272488 +v -0.448762 0.608171 0.245319 +v -0.345670 0.616650 0.206386 +v -0.641627 0.597164 0.323796 +v -0.591986 0.593657 0.315189 +v -0.427730 0.605081 0.247847 +v -0.422802 0.599342 0.243355 +v -0.418768 0.597974 0.240031 +v -0.338879 0.616827 0.195339 +v -0.445483 0.609909 0.259808 +v -0.429206 0.609853 0.252732 +v -0.410350 0.604401 0.250462 +v -0.394698 0.598235 0.252090 +v -0.369031 0.604888 0.241841 +v -0.360955 0.611208 0.216477 +v -0.645973 0.829170 0.422060 +v -0.492200 0.608339 0.270725 +v -0.403946 0.604871 0.254808 +v -0.323826 0.630035 0.200529 +v -0.622687 0.835368 0.440870 +v -0.606812 0.820597 0.405828 +v -0.556440 0.686445 0.358273 +v -0.610323 0.595781 0.329868 +v -0.536253 0.599640 0.306898 +v -0.470541 0.609658 0.289691 +v -0.627093 0.822744 0.413418 +v -0.657878 0.835344 0.414161 +v -0.608641 0.699913 0.378627 +v -0.613694 0.823393 0.421501 +v -0.615253 0.817575 0.403584 +v -0.579711 0.596112 0.345700 +v -0.538326 0.600015 0.312858 +v -0.533141 0.596267 0.304027 +v -0.513000 0.607323 0.282283 +v -0.414096 0.610741 0.256438 +v -0.380644 0.598285 0.262390 +v -0.371706 0.600650 0.255832 +v -0.592148 0.691871 0.371186 +v -0.329283 0.628546 0.207130 +v -0.659361 0.708835 0.356108 +v -0.559878 0.695696 0.369701 +v -0.709911 0.939143 0.229905 +v -0.565690 0.714982 0.388094 +v -0.634257 0.676849 0.276792 +v -0.602742 0.597518 0.348427 +v -0.543680 0.594733 0.325022 +v -0.402044 0.606646 0.264435 +v -0.399559 0.598392 0.271216 +v -0.642515 0.838671 0.439671 +v -0.585661 0.717019 0.392972 +v -0.643426 0.678897 0.291388 +v -0.412615 0.612249 0.268572 +v -0.364677 0.604827 0.261009 +v -0.652551 0.683606 0.289952 +v -0.636818 0.675682 0.301449 +v -0.617085 0.664729 0.292005 +v -0.620286 0.711039 0.386667 +v -0.587828 0.596757 0.368789 +v -0.550968 0.597060 0.341892 +v -0.488009 0.608931 0.294885 +v -0.371467 0.600633 0.271916 +v -0.585282 0.829878 0.414265 +v -0.715659 0.939567 0.212745 +v -0.650850 0.682952 0.307560 +v -0.670397 0.728904 0.364359 +v -0.673952 0.841395 0.395327 +v -0.669160 0.834503 0.389544 +v -0.584619 0.833489 0.428295 +v -0.558737 0.704575 0.375637 +v -0.622504 0.815204 0.399570 +v -0.622536 0.670750 0.306377 +v -0.601582 0.598803 0.368408 +v -0.570441 0.596986 0.373693 +v -0.557413 0.597139 0.360176 +v -0.513729 0.597892 0.333780 +v -0.507199 0.608303 0.322210 +v -0.433592 0.611822 0.293154 +v -0.380245 0.599260 0.281866 +v -0.591814 0.837494 0.437269 +v -0.612524 0.834467 0.435230 +v -0.626056 0.702486 0.375556 +v -0.635590 0.722746 0.388212 +v -0.593390 0.598065 0.378634 +v -0.507093 0.596760 0.337972 +v -0.397709 0.598172 0.295282 +v -0.379366 0.602367 0.288446 +v -0.573652 0.707191 0.383971 +v -0.662496 0.837254 0.401542 +v -0.637517 0.676999 0.323988 +v -0.615399 0.843197 0.443514 +v -0.534067 0.597131 0.341156 +v -0.446570 0.612315 0.308429 +v -0.414353 0.598384 0.312782 +v -0.623408 0.672180 0.324286 +v -0.607455 0.667132 0.316006 +v -0.478094 0.611236 0.326036 +v -0.463383 0.611695 0.320466 +v -0.452433 0.598166 0.328877 +v -0.397978 0.601228 0.304407 +v -0.649808 0.829749 0.400827 +v -0.644985 0.827679 0.411290 +v -0.661965 0.693770 0.318142 +v -0.646841 0.681982 0.323429 +v -0.609264 0.670231 0.327970 +v -0.536839 0.597609 0.365694 +v -0.519850 0.597732 0.358139 +v -0.478106 0.597702 0.343534 +v -0.411783 0.602418 0.319152 +v -0.630486 0.821228 0.402193 +v -0.586667 0.683224 0.357269 +v -0.551423 0.697913 0.366249 +v -0.545508 0.706527 0.369988 +v -0.641271 0.686927 0.342499 +v -0.630034 0.677372 0.336278 +v -0.513118 0.600048 0.361099 +v -0.425083 0.598753 0.325831 +v -0.592616 0.704336 0.384496 +v -0.715753 0.943496 0.193870 +v -0.623475 0.694797 0.365946 +v -0.654908 0.693399 0.333320 +v -0.583699 0.601565 0.393919 +v -0.503277 0.601502 0.363249 +v -0.425569 0.601661 0.332880 +v -0.622326 0.844932 0.446341 +v -0.600915 0.682099 0.354824 +v -0.620964 0.676733 0.340449 +v -0.592232 0.673683 0.338977 +v -0.581870 0.598705 0.391517 +v -0.548903 0.597408 0.383572 +v -0.447837 0.598308 0.345641 +v -0.429320 0.606650 0.338073 +v -0.598780 0.828356 0.427211 +v -0.668189 0.703207 0.323152 +v -0.646109 0.686876 0.334497 +v -0.645296 0.706713 0.366307 +v -0.570283 0.597799 0.393638 +v -0.548191 0.598750 0.390464 +v -0.528030 0.599349 0.373629 +v -0.492050 0.599234 0.364085 +v -0.473195 0.598978 0.365341 +v -0.439485 0.599467 0.343672 +v -0.722356 0.961501 0.163498 +v -0.697189 0.939874 0.212373 +v -0.727300 0.985377 0.136659 +v -0.689965 0.951100 0.205794 +v -0.593338 0.936930 0.253065 +v -0.675758 0.930577 0.243614 +v -0.724849 0.954492 0.167682 +v -0.537977 0.993776 0.151294 +v -0.730531 0.985654 0.135055 +v -0.671668 0.917604 0.277945 +v -0.645442 0.914857 0.269863 +v -0.548339 1.010347 0.139672 +v -0.734158 0.991039 0.134762 +v -0.567028 0.966472 0.206308 +v -0.542212 0.972759 0.190832 +v -0.718906 0.950831 0.177518 +v -0.608702 0.933854 0.263265 +v -0.570219 0.957542 0.219833 +v -0.730591 0.958958 0.162390 +v -0.550639 1.023207 0.132652 +v -0.723497 0.942694 0.201261 +v -0.682671 0.940062 0.223535 +v -0.651247 0.923977 0.269086 +v -0.614658 0.916504 0.271690 +v -0.588703 0.949885 0.234625 +v -0.699997 0.950046 0.197944 +v -0.726858 0.968760 0.150839 +v -0.662188 0.920278 0.269050 +v -0.687769 0.931884 0.235569 +v -0.706431 0.956030 0.186833 +v -0.551999 0.964358 0.208310 +v -0.543206 0.983098 0.173143 +v -0.682840 0.925866 0.262084 +v -0.600312 0.947142 0.244855 +v -0.659488 0.934571 0.254412 +v -0.659070 0.926594 0.260118 +v -0.676079 0.925456 0.257765 +v -0.604457 0.923825 0.272531 +v -0.573685 0.979982 0.197055 +v -0.666193 0.924501 0.260228 +v -0.628271 0.906960 0.267283 +v -0.698981 0.935428 0.223380 +v -0.728177 1.003791 0.128602 +v -0.546990 0.997343 0.156171 +v -0.724761 0.947383 0.183575 +v -0.592849 0.665657 0.319705 +vn -0.9907 -0.1275 -0.0480 +vn -0.8659 0.2378 0.4400 +vn 0.0087 0.9088 0.4171 +vn 0.5473 0.8209 0.1627 +vn 0.2236 0.8264 0.5167 +vn -0.0691 0.6926 0.7180 +vn -0.0476 0.9849 0.1662 +vn 0.8060 0.5640 -0.1796 +vn -0.7510 -0.5044 0.4261 +vn 0.0938 -0.9015 -0.4225 +vn -0.8044 -0.2480 0.5399 +vn 0.8971 0.4256 -0.1182 +vn -0.3840 0.8306 0.4033 +vn -0.0505 0.9829 0.1768 +vn -0.7544 -0.5311 0.3857 +vn 0.2766 0.9027 0.3296 +vn 0.8541 0.4977 -0.1513 +vn 0.7826 0.6164 -0.0868 +vn -0.9513 0.1525 -0.2678 +vn 0.4676 0.8830 0.0393 +vn 0.6383 0.7495 -0.1756 +vn 0.4377 0.6697 0.5999 +vn 0.3140 0.9050 0.2871 +vn -0.6592 0.2505 -0.7091 +vn 0.2627 0.9413 0.2118 +vn -0.0837 0.8598 0.5037 +vn -0.7509 0.5111 0.4183 +vn -0.2624 0.9614 -0.0823 +vn -0.9833 0.1471 0.1068 +vn -0.8856 -0.2188 0.4096 +vn -0.6159 -0.4229 0.6647 +vn -0.1987 0.9800 0.0066 +vn -0.2129 0.9771 -0.0000 +vn -0.2770 0.9384 -0.2065 +vn 0.1016 0.9414 0.3215 +vn -0.1761 0.9844 0.0023 +vn -0.7883 0.2299 -0.5707 +vn -0.8717 0.2887 0.3959 +vn -0.2491 0.9623 -0.1088 +vn -0.2817 0.7072 0.6485 +vn 0.4900 0.7171 0.4956 +vn 0.5893 0.8054 -0.0633 +vn -0.1119 0.9855 0.1277 +vn -0.8833 0.2813 0.3749 +vn -0.1123 0.9937 0.0007 +vn -0.0915 0.9942 0.0556 +vn 0.4647 0.8505 0.2464 +vn -0.0727 0.9328 0.3530 +vn -0.1921 0.8862 0.4216 +vn -0.1218 0.9902 -0.0677 +vn -0.6917 -0.4862 0.5341 +vn 0.7833 0.6206 -0.0349 +vn 0.7532 0.6026 -0.2637 +vn 0.8866 0.4530 -0.0934 +vn -0.8975 0.4406 0.0173 +vn -0.0514 0.9807 -0.1888 +vn -0.0033 0.6998 -0.7144 +vn 0.3482 0.8554 0.3836 +vn -0.7268 -0.5461 0.4167 +vn -0.0585 0.9037 0.4241 +vn -0.3348 0.7967 0.5031 +vn 0.2048 0.8962 0.3936 +vn -0.9191 -0.0088 0.3939 +vn -0.1207 0.8440 0.5226 +vn -0.6576 -0.7059 0.2631 +vn 0.2375 0.8140 0.5301 +vn 0.8745 0.3182 0.3662 +vn 0.6928 0.7156 0.0892 +vn -0.7617 -0.2701 0.5889 +vn 0.1155 -0.0428 0.9924 +vn 0.3121 0.2985 0.9019 +vn 0.3020 0.3172 0.8990 +vn 0.0139 0.9770 0.2129 +vn -0.0837 0.7742 0.6274 +vn 0.3264 0.5751 0.7501 +vn 0.5032 0.8314 -0.2357 +vn -0.7160 -0.6232 0.3146 +vn 0.6476 0.7620 0.0058 +vn 0.3586 -0.2245 0.9061 +vn 0.0749 0.6326 0.7709 +vn 0.4077 0.9083 0.0935 +vn -0.1540 0.8208 0.5501 +vn 0.1403 0.3666 0.9197 +vn -0.8763 0.4013 0.2667 +vn -0.4211 -0.5279 -0.7376 +vn -0.4676 0.0623 -0.8818 +vn 0.3686 0.8826 0.2919 +vn 0.3047 -0.2322 0.9237 +vn 0.6235 0.1190 0.7727 +vn 0.3639 0.5029 0.7840 +vn 0.5962 0.2851 -0.7505 +vn -0.8784 -0.1335 0.4588 +vn -0.2519 0.9662 0.0551 +vn 0.7542 0.6011 -0.2641 +vn -0.8938 -0.0390 0.4467 +vn -0.9289 0.0694 0.3637 +vn 0.7800 0.6185 -0.0948 +vn 0.0374 0.9993 0.0048 +vn 0.4187 0.4648 0.7802 +vn 0.2834 0.6411 0.7132 +vn 0.3861 0.5913 0.7080 +vn -0.3794 0.2892 0.8789 +vn -0.1014 0.8549 0.5088 +vn 0.6223 0.7458 0.2380 +vn 0.4111 0.9079 0.0819 +vn 0.0207 0.9924 -0.1216 +vn 0.1655 0.8680 0.4682 +vn 0.1429 -0.1716 0.9748 +vn 0.6946 0.1361 0.7064 +vn 0.5137 0.4498 0.7306 +vn -0.3383 0.3596 -0.8696 +vn 0.5005 -0.8454 -0.1866 +vn -0.8636 -0.3711 0.3414 +vn -0.8823 0.2415 0.4041 +vn -0.9543 0.1706 0.2454 +vn -0.9190 0.3114 0.2417 +vn -0.3735 -0.1431 -0.9165 +vn -0.7017 0.1836 -0.6884 +vn 0.2152 -0.2270 0.9498 +vn 0.7164 0.2817 0.6382 +vn 0.2493 0.7485 0.6145 +vn -0.9961 0.0839 -0.0262 +vn -0.9417 0.0331 0.3348 +vn -0.1673 0.1589 -0.9730 +vn 0.5140 0.0719 0.8548 +vn 0.5745 0.2290 0.7859 +vn 0.5876 0.4854 0.6474 +vn 0.3079 0.7009 0.6433 +vn 0.3160 -0.4568 0.8315 +vn 0.4742 0.1120 -0.8733 +vn 0.0216 0.9601 0.2789 +vn -0.9590 -0.1095 0.2612 +vn -0.6268 -0.4170 -0.6583 +vn 0.4915 0.5648 0.6629 +vn 0.6923 0.3285 -0.6425 +vn 0.1199 -0.5391 -0.8337 +vn -0.5770 -0.3836 -0.7211 +vn -0.0000 0.9101 0.4143 +vn 0.5087 -0.6937 -0.5099 +vn 0.5903 -0.1036 0.8005 +vn 0.6132 0.4385 0.6570 +vn 0.1862 -0.4987 -0.8465 +vn 0.7547 0.3973 -0.5221 +vn 0.2147 -0.2790 -0.9360 +vn 0.2822 0.4389 -0.8531 +vn -0.1733 0.9744 0.1430 +vn 0.0286 0.9887 0.1474 +vn 0.1062 0.2791 0.9544 +vn 0.5076 -0.4184 0.7532 +vn 0.5919 -0.1046 0.7992 +vn 0.5045 -0.3561 0.7865 +vn 0.5856 0.5960 0.5495 +vn 0.4194 -0.8574 -0.2981 +vn 0.4463 -0.2512 -0.8589 +vn 0.7424 0.0151 -0.6698 +vn -0.7745 0.6217 -0.1172 +vn -0.9740 0.1968 0.1124 +vn -0.7195 -0.6550 0.2309 +vn -0.7077 -0.6332 0.3136 +vn 0.1772 0.3011 0.9370 +vn 0.2363 0.3635 0.9011 +vn 0.3497 0.1518 0.9245 +vn 0.5983 0.2866 0.7483 +vn 0.6016 0.5250 0.6021 +vn 0.6820 -0.2929 0.6702 +vn 0.6529 0.4239 0.6277 +vn 0.8309 0.1579 -0.5335 +vn -0.7678 0.3422 0.5417 +vn -0.9665 -0.1260 -0.2235 +vn -0.1820 0.9217 -0.3425 +vn 0.2435 0.8848 0.3972 +vn 0.1649 0.3834 0.9087 +vn 0.7212 -0.3776 -0.5807 +vn 0.2659 -0.7687 0.5817 +vn 0.4135 0.6470 0.6406 +vn 0.8749 -0.4092 -0.2591 +vn -0.8470 0.0131 0.5314 +vn -0.2844 -0.7111 -0.6429 +vn 0.8256 0.2908 -0.4836 +vn -0.8451 0.0094 0.5345 +vn 0.8720 0.1325 -0.4713 +vn -0.5974 -0.6916 0.4060 +vn -0.1047 0.8728 0.4767 +vn -0.2982 0.9529 -0.0558 +vn -0.7398 -0.4540 0.4965 +vn 0.0387 0.9585 -0.2825 +vn 0.1944 0.3373 0.9211 +vn 0.0572 -0.9970 0.0527 +vn 0.6116 -0.4165 0.6727 +vn 0.2922 -0.8378 0.4611 +vn 0.2847 -0.7661 0.5763 +vn 0.6460 -0.0170 0.7631 +vn 0.7599 0.1295 -0.6371 +vn 0.4405 -0.2941 -0.8482 +vn 0.5929 -0.4302 -0.6807 +vn 0.3332 -0.5285 -0.7809 +vn 0.0060 0.9970 0.0777 +vn 0.0509 0.1785 0.9826 +vn 0.5526 0.1085 0.8263 +vn 0.5534 0.7073 0.4399 +vn 0.6423 0.3524 0.6806 +vn 0.6678 -0.0792 0.7401 +vn 0.8613 0.3782 0.3393 +vn 0.7933 0.1076 -0.5993 +vn 0.6049 -0.0718 -0.7930 +vn -0.2095 0.9479 0.2401 +vn -0.2456 0.9676 0.0594 +vn 0.2299 0.9080 0.3502 +vn -0.2392 0.9641 -0.1151 +vn 0.3253 0.9002 -0.2896 +vn 0.1249 -0.3598 0.9246 +vn 0.1024 -0.2066 0.9731 +vn 0.3162 -0.0158 0.9486 +vn 0.0977 0.2883 0.9525 +vn 0.2975 0.1480 0.9432 +vn 0.3405 0.2807 0.8974 +vn 0.7228 0.4207 0.5482 +vn 0.6265 0.5205 0.5801 +vn 0.6294 -0.0103 -0.7770 +vn 0.2931 -0.5270 0.7977 +vn 0.1717 0.6209 0.7649 +vn 0.7020 -0.2436 0.6692 +vn 0.5665 -0.0328 0.8234 +vn 0.7701 0.4324 0.4690 +vn 0.2360 0.9105 0.3396 +vn 0.4147 -0.0356 0.9093 +vn 0.6543 -0.4504 0.6075 +vn 0.9578 -0.2606 0.1212 +vn -0.4506 -0.3610 0.8165 +vn 0.8378 0.4684 -0.2806 +vn -0.9206 0.0328 0.3892 +vn -0.8336 -0.2909 -0.4695 +vn 0.3966 -0.3389 0.8532 +vn 0.2155 -0.0252 0.9762 +vn 0.3353 0.2795 0.8997 +vn 0.7811 -0.2534 0.5707 +vn -0.7115 -0.5142 -0.4789 +vn 0.1778 0.2058 0.9623 +vn 0.8296 -0.4738 -0.2955 +vn 0.8574 0.5058 -0.0953 +vn 0.2815 0.2639 0.9226 +vn 0.1916 0.3540 0.9154 +vn 0.3643 0.3471 0.8642 +vn 0.3285 0.4360 0.8379 +vn 0.3057 -0.1559 0.9393 +vn 0.5940 -0.5384 0.5977 +vn 0.1144 0.1968 -0.9737 +vn -0.6782 0.0228 0.7345 +vn -0.7578 0.4644 0.4583 +vn 0.0104 0.8561 0.5166 +vn -0.1280 -0.7350 -0.6659 +vn -0.4510 -0.8781 -0.1600 +vn 0.3208 -0.1662 0.9325 +vn 0.3808 -0.3337 0.8623 +vn 0.4545 -0.1482 0.8783 +vn 0.4324 -0.1138 0.8945 +vn 0.4682 -0.0626 0.8814 +vn 0.3085 0.3208 0.8955 +vn 0.5660 0.7206 0.4006 +vn 0.1717 0.6564 0.7346 +vn 0.7537 0.0480 -0.6554 +vn 0.4597 0.5126 0.7252 +vn 0.6395 0.3560 0.6814 +vn -0.0770 0.8668 0.4927 +vn -0.9858 -0.1571 0.0586 +vn 0.4957 -0.2572 0.8295 +vn 0.5054 -0.1851 0.8428 +vn 0.3774 0.2699 0.8858 +vn 0.5639 0.2700 0.7805 +vn 0.4688 0.4239 0.7749 +vn 0.8956 -0.1476 0.4196 +vn 0.4970 0.1559 0.8536 +vn -0.9180 -0.2733 -0.2874 +vn 0.3762 0.2977 0.8774 +vn 0.2782 0.5919 0.7565 +vn -0.8617 0.3159 -0.3971 +vn 0.6056 -0.1460 0.7823 +vn 0.6977 -0.5967 0.3965 +vn -0.2201 -0.2219 0.9499 +vn 0.4677 0.8839 0.0070 +vn 0.6883 0.7253 0.0116 +vn -0.6948 0.4367 -0.5715 +vn 0.4038 -0.4194 0.8131 +vn 0.5388 0.3282 0.7759 +vn 0.4469 0.3821 0.8088 +vn 0.4405 0.5208 0.7313 +vn 0.5523 -0.1159 0.8255 +vn 0.6900 0.1477 0.7085 +vn 0.7918 -0.1765 -0.5847 +vn 0.4623 0.6901 0.5569 +vn 0.3429 -0.2941 0.8922 +vn 0.0791 0.8559 0.5111 +vn -0.4072 -0.8298 -0.3815 +vn -0.4920 0.0572 -0.8687 +vn 0.2371 -0.1895 0.9528 +vn 0.2020 -0.0575 0.9777 +vn 0.5406 0.3317 0.7732 +vn 0.3142 0.4594 0.8308 +vn 0.4321 -0.1865 0.8823 +vn 0.5270 0.1636 0.8340 +vn 0.9204 0.0221 -0.3904 +vn 0.3524 -0.1491 0.9239 +vn 0.4022 0.5622 0.7226 +vn 0.5397 0.7647 0.3521 +vn -0.3084 0.0713 -0.9486 +vn -0.0060 -0.9403 -0.3404 +vn 0.4053 -0.5774 0.7087 +vn 0.4209 -0.4027 0.8128 +vn 0.3925 -0.3395 0.8548 +vn 0.2633 0.0309 0.9642 +vn 0.2920 -0.0643 0.9542 +vn 0.6117 -0.1266 0.7809 +vn 0.5846 -0.0840 0.8069 +vn 0.4899 0.2166 0.8444 +vn 0.4933 0.3382 0.8014 +vn 0.5628 0.4528 0.6915 +vn 0.4231 -0.5148 0.7457 +vn 0.3366 0.2989 0.8930 +vn 0.6273 0.2204 0.7470 +vn 0.3553 0.5109 0.7828 +vn 0.3934 -0.8977 -0.1985 +vn -0.0114 0.8576 0.5142 +vn -0.7571 0.2683 -0.5956 +vn 0.5028 -0.4186 0.7563 +vn 0.6084 -0.1253 0.7837 +vn 0.7312 0.3713 0.5723 +vn 0.1928 -0.3524 0.9158 +vn 0.7225 0.2767 0.6336 +vn 0.5043 0.5610 0.6565 +vn 0.1476 0.5695 0.8087 +vn 0.6190 0.2487 0.7450 +vn 0.5506 0.3392 0.7628 +vn 0.4250 0.7361 0.5268 +vn 0.5447 -0.6560 -0.5224 +vn 0.6949 0.5345 0.4810 +vn -0.6699 0.7408 -0.0497 +vn 0.8771 0.4696 -0.1008 +vn 0.1592 -0.3962 0.9043 +vn -0.1984 -0.0235 0.9798 +vn 0.6016 -0.1640 0.7818 +vn 0.6029 -0.1575 0.7821 +vn 0.4470 0.1441 0.8829 +vn 0.4829 0.1442 0.8637 +vn 0.4883 0.2174 0.8452 +vn 0.5530 0.2769 0.7858 +vn 0.5396 0.3413 0.7696 +vn 0.3845 0.6244 0.6799 +vn 0.4951 0.5925 0.6355 +vn 0.4121 0.5397 0.7341 +vn 0.4582 -0.1119 0.8818 +vn 0.5478 -0.1785 0.8173 +vn 0.6558 0.4849 0.5786 +vn 0.2298 -0.7332 0.6400 +vn 0.6264 0.2195 0.7479 +vn 0.8178 0.5136 -0.2595 +vn 0.3510 -0.3112 0.8832 +vn 0.5584 0.4451 0.7000 +vn 0.5427 0.4143 0.7307 +vn 0.4561 0.5414 0.7063 +vn 0.5924 -0.0454 0.8044 +vn 0.2580 0.7681 0.5861 +vn 0.5765 0.3742 0.7264 +vn 0.3466 0.7806 0.5201 +vn 0.4423 -0.2034 0.8735 +vn 0.5964 -0.3849 0.7043 +vn 0.5337 -0.2238 0.8155 +vn 0.4047 0.1490 0.9022 +vn 0.5280 0.1328 0.8388 +vn 0.5886 0.3953 0.7052 +vn 0.4860 0.4915 0.7227 +vn 0.5724 -0.3499 -0.7416 +vn 0.6632 0.2140 0.7172 +vn 0.5840 0.2721 0.7647 +vn 0.9113 0.0524 -0.4084 +vn 0.6169 0.6391 0.4593 +vn 0.9838 0.1352 -0.1175 +vn 0.0971 -0.9282 -0.3591 +vn 0.5009 0.0548 0.8638 +vn 0.5018 0.3019 0.8106 +vn 0.5497 0.4128 0.7262 +vn 0.5476 0.3759 0.7475 +vn 0.2945 0.1626 0.9417 +vn 0.3650 0.0727 0.9281 +vn 0.6142 0.0407 0.7881 +vn 0.7712 -0.3159 0.5527 +vn 0.3657 0.3755 0.8516 +vn 0.0148 0.8699 0.4930 +vn -0.1063 0.9942 -0.0180 +vn -0.2032 -0.7095 -0.6748 +vn -0.9552 -0.1769 0.2375 +vn 0.3579 0.2697 0.8940 +vn 0.4545 0.3920 0.7998 +vn 0.5362 0.5183 0.6662 +vn 0.4446 0.4128 0.7949 +vn 0.3188 -0.7132 0.6242 +vn 0.4658 -0.5081 0.7244 +vn 0.5166 0.4880 0.7035 +vn 0.4224 -0.4160 0.8053 +vn 0.1800 0.6577 0.7314 +vn 0.7024 0.3812 0.6012 +vn 0.2001 0.7607 0.6174 +vn -0.4184 0.4348 0.7974 +vn -0.0419 0.9809 -0.1898 +vn 0.5030 -0.4552 0.7347 +vn 0.5893 -0.2261 0.7756 +vn 0.6741 0.1692 0.7190 +vn 0.4337 0.0539 0.8995 +vn 0.2537 0.3025 0.9188 +vn 0.3662 0.6155 0.6979 +vn 0.2812 -0.8271 -0.4866 +vn 0.5431 0.5867 0.6006 +vn 0.0626 0.5287 0.8465 +vn 0.1839 0.1126 0.9765 +vn -0.1061 0.9906 0.0859 +vn 0.6977 -0.1623 0.6977 +vn 0.6875 -0.2576 0.6789 +vn 0.7710 -0.0091 0.6367 +vn 0.7449 0.0381 0.6660 +vn -0.8590 0.2445 0.4498 +vn 0.6166 -0.7055 0.3495 +vn 0.2580 0.6382 0.7253 +vn 0.4977 0.6796 0.5390 +vn 0.0801 0.8755 0.4766 +vn 0.6980 -0.2808 0.6587 +vn 0.7872 0.0695 0.6127 +vn 0.7630 0.1581 0.6267 +vn 0.7636 0.1597 0.6256 +vn 0.7729 0.2844 0.5672 +vn 0.1859 0.3526 0.9171 +vn 0.7273 0.5370 0.4273 +vn -0.0685 0.4893 -0.8694 +vn 0.7018 0.1611 0.6939 +vn 0.6653 0.4183 0.6184 +vn -0.3181 -0.8661 -0.3856 +vn 0.5855 0.5091 0.6308 +vn 0.6321 0.4364 0.6403 +vn -0.9659 0.2153 -0.1439 +vn 0.3758 0.5890 0.7154 +vn 0.4898 0.6468 0.5845 +vn 0.3187 0.2951 0.9008 +vn 0.5064 0.8528 0.1278 +vn -0.0211 -0.1601 -0.9869 +vn 0.6712 -0.0541 0.7393 +vn 0.7959 -0.2010 0.5711 +vn 0.5427 0.1236 0.8308 +vn 0.3861 0.3659 0.8468 +vn 0.4347 0.4733 0.7661 +vn 0.3969 0.4893 0.7766 +vn 0.2689 0.7345 0.6231 +vn -0.4742 -0.7236 -0.5015 +vn -0.0424 -0.8291 -0.5575 +vn 0.8800 0.0829 0.4676 +vn 0.6413 0.4753 0.6023 +vn -0.9487 0.2974 0.1072 +vn 0.2940 -0.0575 0.9541 +vn 0.5632 0.2116 0.7988 +vn 0.4098 0.6513 0.6386 +vn 0.4203 0.6066 0.6749 +vn 0.3263 0.7040 0.6308 +vn 0.9656 -0.2248 -0.1305 +vn 0.4476 -0.7749 -0.4463 +vn 0.4531 0.3682 0.8119 +vn 0.4988 -0.3432 0.7958 +vn -0.9927 -0.0469 0.1111 +vn 0.0002 0.9987 -0.0507 +vn 0.0324 0.9913 0.1279 +vn 0.2455 -0.4171 0.8751 +vn 0.4620 -0.1371 0.8762 +vn 0.4088 0.1051 0.9066 +vn 0.6164 -0.2391 0.7503 +vn 0.4982 0.4956 0.7115 +vn 0.5104 0.5764 0.6381 +vn 0.2286 -0.8475 -0.4791 +vn 0.6374 0.0548 0.7686 +vn 0.6269 0.3423 0.6999 +vn 0.6237 0.4358 0.6489 +vn 0.2976 0.6255 0.7212 +vn -0.6315 0.0960 0.7694 +vn 0.1699 -0.1418 0.9752 +vn 0.7002 -0.0111 0.7139 +vn 0.8510 -0.2273 0.4735 +vn 0.8051 0.0546 0.5906 +vn 0.8200 0.1835 0.5422 +vn 0.7333 0.2138 0.6455 +vn 0.8069 0.2690 0.5258 +vn -0.8873 0.0394 0.4596 +vn 0.8060 -0.3534 -0.4749 +vn 0.7192 0.0782 0.6903 +vn 0.1707 0.8208 0.5451 +vn 0.4571 -0.0097 0.8894 +vn 0.6309 0.5194 0.5764 +vn 0.5248 -0.2345 0.8183 +vn 0.3336 -0.1476 0.9311 +vn 0.5190 -0.1307 0.8447 +vn 0.7588 0.0446 0.6498 +vn 0.6978 0.0172 0.7161 +vn 0.7189 0.0938 0.6888 +vn 0.8849 -0.0592 -0.4620 +vn -0.3781 0.8537 0.3581 +vn 0.4492 0.1129 0.8863 +vn 0.3736 0.4556 0.8080 +vn 0.5107 0.4421 0.7374 +vn 0.5191 0.3209 0.7922 +vn 0.4537 -0.1311 0.8815 +vn 0.4933 -0.0768 0.8664 +vn 0.1768 -0.0168 0.9841 +vn 0.2453 0.0485 0.9682 +vn 0.2158 0.0763 0.9734 +vn 0.5933 0.2634 0.7607 +vn 0.8172 0.1365 -0.5599 +vn 0.3469 -0.1052 0.9320 +vn 0.2621 0.5871 0.7659 +vn 0.5056 -0.5587 -0.6575 +vn 0.5334 -0.8367 -0.1243 +vn 0.4689 0.2491 0.8474 +vn 0.6190 -0.1651 0.7679 +vn 0.4511 0.0971 0.8872 +vn 0.2428 -0.0927 0.9656 +vn 0.2450 0.0842 0.9659 +vn 0.3714 0.3655 0.8535 +vn 0.7554 0.3655 0.5438 +vn 0.7709 0.2756 0.5742 +vn 0.4941 0.5797 0.6479 +vn 0.5095 0.5863 0.6298 +vn 0.3136 0.7226 0.6160 +vn -0.3604 0.9002 0.2444 +vn 0.4744 -0.4634 0.7485 +vn 0.7488 0.2101 0.6286 +vn 0.3177 0.6427 0.6971 +vn 0.3790 0.6679 0.6405 +vn -0.8852 0.0856 0.4573 +vn 0.7756 0.2309 0.5875 +vn 0.4705 -0.1191 0.8743 +vn 0.5048 -0.0228 0.8629 +vn 0.6939 0.0010 -0.7200 +vn 0.7720 0.1911 0.6063 +vn 0.6249 -0.0994 0.7743 +vn 0.5337 -0.1062 0.8390 +vn 0.5473 -0.0889 0.8322 +vn 0.4327 0.0530 0.9000 +vn 0.4929 0.1067 0.8635 +vn 0.4105 -0.2106 0.8872 +vn 0.1706 0.1220 0.9778 +vn 0.2671 0.3007 0.9156 +vn 0.3585 0.4858 0.7972 +vn 0.4166 0.4512 0.7892 +vn 0.4132 0.5097 0.7546 +vn 0.4814 0.6059 0.6334 +vn 0.6993 -0.2556 0.6675 +vn 0.8382 0.3735 -0.3974 +vn 0.4804 -0.7539 -0.4482 +vn -0.8700 0.4428 0.2169 +vn 0.6549 0.4237 0.6258 +vn 0.7921 -0.0651 0.6070 +vn 0.7067 -0.2176 0.6732 +vn 0.7171 -0.1958 0.6689 +vn 0.5966 -0.1887 0.7800 +vn 0.7194 -0.1867 0.6691 +vn 0.2357 0.5149 0.8242 +vn 0.4981 0.5523 0.6685 +vn 0.5475 0.0434 0.8357 +vn 0.7360 0.1685 0.6557 +vn 0.6780 -0.1353 0.7225 +vn 0.9474 -0.2828 0.1497 +vn 0.3683 0.2658 0.8909 +vn 0.7159 0.0668 0.6950 +vn 0.6293 -0.0635 0.7746 +vn 0.7118 -0.0760 0.6983 +vn 0.7243 0.1027 0.6818 +vn 0.3923 -0.2042 0.8969 +vn 0.2422 0.4711 0.8482 +vn 0.4468 0.5721 0.6878 +vn 0.4586 -0.1572 0.8746 +vn 0.6194 -0.5463 0.5639 +vn 0.5493 0.4932 0.6746 +vn 0.8711 0.4196 0.2553 +vn 0.2043 -0.0720 0.9763 +vn 0.9447 -0.3049 0.1204 +vn 0.5864 0.7694 -0.2534 +vn 0.7037 -0.2073 0.6796 +vn 0.8006 -0.1746 0.5732 +vn 0.8096 -0.0809 0.5814 +vn 0.8171 -0.2444 0.5221 +vn 0.7297 -0.0616 0.6810 +vn 0.3408 -0.4342 0.8339 +vn 0.3773 0.6647 0.6449 +vn 0.4945 0.3061 0.8135 +vn 0.8400 -0.1791 0.5122 +vn 0.4460 -0.1726 0.8782 +vn 0.2600 0.4918 0.8310 +vn 0.3899 0.5656 0.7267 +vn 0.4701 0.6271 0.6210 +vn 0.4738 0.7825 0.4040 +vn 0.6297 0.0620 0.7744 +vn 0.4273 0.4760 0.7687 +vn 0.1137 -0.9067 -0.4062 +vn 0.5371 0.6652 0.5187 +vn -0.7713 -0.4946 0.4005 +vn 0.0834 0.9715 0.2218 +vn 0.0848 0.9626 0.2573 +vn 0.7705 0.0671 0.6339 +vn 0.8110 -0.1938 0.5520 +vn 0.8221 -0.0993 0.5607 +vn 0.6880 -0.0454 0.7243 +vn 0.4628 -0.1408 0.8752 +vn 0.3848 0.1794 0.9054 +vn 0.2599 0.3007 0.9176 +vn -0.8971 -0.4056 0.1754 +vn -0.9139 0.2326 0.3327 +vn 0.8099 -0.1779 0.5589 +vn 0.4489 -0.1038 0.8875 +vn 0.3895 -0.1702 0.9052 +vn 0.3485 -0.0496 0.9360 +vn 0.3125 0.4147 0.8546 +vn 0.2922 0.4527 0.8425 +vn 0.5531 0.4985 0.6675 +vn 0.5721 0.2469 0.7821 +vn 0.4449 -0.5800 -0.6824 +vn -0.8884 -0.2407 0.3910 +vn 0.7734 -0.1623 0.6128 +vn 0.7486 -0.2268 0.6230 +vn 0.7228 -0.1123 0.6819 +vn 0.4040 -0.3065 0.8619 +vn 0.4856 -0.1325 0.8641 +vn 0.1051 -0.2584 0.9603 +vn 0.4287 -0.0826 0.8997 +vn 0.0579 -0.4161 0.9075 +vn 0.4672 -0.1890 0.8637 +vn 0.6718 0.2937 0.6800 +vn 0.3022 0.4864 0.8198 +vn 0.3309 0.6079 0.7218 +vn 0.8796 0.1412 -0.4543 +vn 0.7532 -0.4118 0.5130 +vn 0.8822 -0.1043 0.4592 +vn 0.5005 0.0489 0.8644 +vn 0.9373 0.1169 0.3284 +vn -0.5395 -0.0809 0.8381 +vn 0.4740 -0.1505 0.8676 +vn 0.5423 0.1923 -0.8179 +vn 0.7051 0.2701 0.6556 +vn 0.2486 0.7748 0.5813 +vn 0.5425 0.3560 0.7609 +vn 0.4857 0.4004 0.7770 +vn -0.9738 0.2039 0.1005 +vn -0.6573 -0.7134 0.2428 +vn 0.1736 0.9846 -0.0228 +vn 0.6073 -0.1616 0.7778 +vn 0.4853 -0.1040 0.8682 +vn 0.5811 -0.2045 0.7877 +vn 0.2387 0.8962 -0.3740 +vn -0.1801 0.9418 0.2839 +vn 0.7039 0.2197 0.6755 +vn 0.5336 0.4857 -0.6923 +vn 0.4755 0.7399 0.4760 +vn 0.6297 -0.0940 0.7711 +vn 0.4506 0.2823 0.8469 +vn -0.7152 -0.4830 -0.5052 +vn -0.1541 0.8738 0.4611 +vn 0.8927 0.0756 -0.4442 +vn 0.5072 -0.6548 -0.5603 +vn -0.1542 0.7784 0.6086 +vn 0.0919 -0.2564 0.9622 +vn 0.0642 -0.2774 0.9586 +vn 0.2918 0.2115 0.9328 +vn 0.3134 0.4917 0.8124 +vn 0.2024 0.5160 0.8324 +vn 0.2137 0.6121 0.7613 +vn -0.5498 0.7004 -0.4552 +vn 0.6163 -0.1113 0.7796 +vn -0.5012 0.0696 -0.8625 +vn 0.6119 0.5842 0.5332 +vn 0.5138 -0.4421 0.7352 +vn 0.7049 -0.3815 -0.5980 +vn -0.2425 -0.0683 0.9678 +vn -0.4725 -0.2147 0.8548 +vn -0.7437 -0.1773 0.6446 +vn 0.3095 0.7805 0.5432 +vn 0.9686 -0.0870 0.2328 +vn 0.4088 -0.1497 0.9003 +vn 0.5352 0.2785 0.7975 +vn 0.1623 0.5138 0.8425 +vn 0.2482 0.6641 0.7053 +vn 0.2243 0.7401 0.6340 +vn 0.6811 0.3117 0.6625 +vn 0.6866 0.1736 0.7060 +vn 0.3850 0.0588 0.9210 +vn 0.4861 0.3070 0.8182 +vn 0.6278 0.1338 0.7668 +vn 0.0731 0.8841 0.4616 +vn -0.5995 -0.4781 -0.6419 +vn -0.6175 -0.4768 -0.6256 +vn 0.2101 0.7151 0.6667 +vn 0.2613 0.8897 0.3744 +vn 0.2772 0.9436 -0.1812 +vn 0.4579 0.2432 0.8551 +vn 0.3658 0.0055 0.9307 +vn 0.3862 0.3328 0.8603 +vn 0.0839 0.5921 0.8015 +vn 0.7239 0.3095 0.6166 +vn 0.6717 0.0508 0.7390 +vn 0.4705 0.6246 0.6234 +vn 0.6519 0.0146 0.7581 +vn 0.4582 -0.0643 0.8865 +vn 0.6776 0.1524 0.7195 +vn 0.1197 0.5324 0.8380 +vn 0.0773 0.9065 0.4150 +vn 0.1358 0.8381 0.5284 +vn 0.5353 0.8442 0.0259 +vn 0.8177 0.4151 0.3990 +vn 0.2494 0.3179 0.9147 +vn 0.7118 0.0967 -0.6957 +vn -0.1165 -0.8603 -0.4963 +vn 0.9579 -0.2700 0.0976 +vn 0.8794 0.3720 0.2971 +vn 0.2253 0.7579 0.6122 +vn 0.0925 0.5758 0.8123 +vn 0.3317 0.4460 0.8313 +vn 0.1839 0.7429 0.6436 +vn 0.1140 0.8733 0.4737 +vn 0.4621 0.3338 0.8216 +vn 0.1665 0.9689 -0.1831 +vn -0.9426 0.0161 0.3335 +vn -0.8779 0.2613 0.4013 +vn 0.4659 0.8400 0.2779 +vn 0.9559 0.2934 -0.0091 +vn 0.3864 0.2395 0.8907 +vn 0.6803 -0.2075 0.7030 +vn 0.5477 0.2652 0.7936 +vn 0.7610 0.0106 0.6487 +vn 0.6477 0.7468 0.1508 +vn 0.8394 -0.1490 -0.5226 +vn 0.3139 0.8155 0.4863 +vn -0.9412 0.1238 0.3142 +vn 0.2928 0.4351 0.8514 +vn 0.1516 0.4983 0.8536 +vn 0.3692 0.1570 -0.9160 +vn 0.3850 0.4589 0.8008 +vn 0.9168 0.2711 0.2934 +vn 0.6084 0.4811 0.6311 +vn 0.3629 0.2451 -0.8990 +vn -0.1560 0.5612 0.8129 +vn -0.2970 -0.1576 0.9418 +vn 0.1244 0.9547 -0.2703 +vn 0.1971 0.9654 -0.1708 +vn -0.7376 -0.4707 -0.4841 +vn 0.6523 0.7551 -0.0655 +vn 0.7036 0.6490 0.2892 +vn 0.5064 0.2556 0.8235 +vn 0.5041 -0.0821 0.8597 +vn 0.8445 -0.3137 -0.4340 +vn 0.5045 0.7271 0.4656 +vn 0.3454 0.8868 0.3069 +vn -0.1736 0.8191 0.5468 +vn -0.7406 0.4865 0.4635 +vn 0.3359 0.7852 0.5202 +vn 0.2399 0.9011 -0.3611 +vn -0.3141 0.9490 0.0286 +vn 0.2168 -0.8940 -0.3920 +vn 0.5091 0.2836 0.8127 +vn 0.4284 0.4105 0.8050 +vn 0.0303 0.6212 0.7831 +vn 0.0510 0.6184 0.7842 +vn -0.7867 0.3174 -0.5295 +vn 0.4694 0.6262 0.6225 +vn 0.6790 -0.1334 0.7219 +vn 0.6944 0.0757 0.7156 +vn 0.5742 0.6825 0.4522 +vn 0.5714 0.6638 0.4825 +vn 0.3242 0.6854 0.6520 +vn 0.4177 0.3656 0.8318 +vn -0.1163 -0.0975 0.9884 +vn -0.1707 0.9609 0.2179 +vn 0.1939 0.9810 -0.0096 +vn -0.1071 -0.9149 -0.3893 +vn 0.0849 -0.1137 0.9899 +vn 0.3062 0.5931 0.7447 +vn 0.4167 0.4640 0.7818 +vn 0.3823 -0.0783 0.9207 +vn 0.6526 0.4650 0.5983 +vn 0.3688 0.9159 -0.1585 +vn 0.2573 0.2810 0.9246 +vn 0.3540 0.8389 0.4135 +vn 0.5393 0.2612 0.8006 +vn 0.2691 0.5096 0.8172 +vn 0.1710 0.6389 0.7500 +vn 0.1415 -0.0742 -0.9871 +vn 0.4319 0.5648 0.7031 +vn 0.7291 -0.1695 0.6630 +vn -0.3949 0.8690 0.2983 +vn -0.1011 -0.2751 0.9561 +vn 0.1560 0.9805 0.1196 +vn 0.2077 0.9599 0.1883 +vn 0.2850 -0.2306 0.9304 +vn 0.3263 -0.2234 0.9185 +vn 0.4469 0.1679 0.8787 +vn 0.3242 0.9148 -0.2407 +vn 0.6114 0.0112 -0.7912 +vn 0.5503 0.6529 0.5205 +vn 0.6901 0.0033 0.7238 +vn 0.6847 0.0837 0.7240 +vn -0.2299 -0.3238 0.9178 +vn 0.2674 -0.2507 0.9304 +vn 0.2557 0.2699 0.9283 +vn 0.1050 0.4212 0.9009 +vn 0.3550 0.9268 0.1225 +vn 0.0941 -0.9776 0.1884 +vn 0.5042 0.1518 0.8502 +vn 0.3158 0.3174 0.8942 +vn 0.0793 0.5520 0.8301 +vn 0.0685 0.7731 0.6306 +vn 0.4334 -0.5798 0.6899 +vn 0.3940 0.0548 0.9175 +vn 0.6412 0.1122 0.7592 +vn 0.6288 -0.0505 0.7759 +vn 0.1145 -0.4416 0.8899 +vn 0.4994 0.7045 0.5043 +vn -0.0421 -0.2131 0.9761 +vn 0.3299 -0.2823 0.9008 +vn 0.2658 -0.2472 0.9318 +vn 0.3341 -0.2287 0.9144 +vn 0.3807 -0.0843 0.9209 +vn 0.7645 -0.3068 0.5669 +vn 0.7350 0.1384 0.6638 +vn 0.3281 0.2518 0.9105 +vn 0.1076 0.5879 0.8018 +vn -0.9938 0.1028 0.0433 +vn 0.3229 0.9375 -0.1298 +vn 0.1838 0.5426 0.8196 +vn -0.0329 0.7163 0.6970 +vn 0.3970 -0.7728 -0.4952 +vn 0.6097 -0.1256 -0.7826 +vn 0.3330 0.5228 0.7847 +vn 0.3034 -0.5744 0.7603 +vn 0.6517 -0.2709 0.7084 +vn 0.4076 0.0045 0.9132 +vn 0.5238 0.3394 0.7813 +vn 0.1902 0.5143 0.8363 +vn 0.7127 -0.2549 0.6535 +vn 0.6692 0.2941 0.6825 +vn 0.4507 0.1242 0.8840 +vn 0.5377 0.6426 0.5459 +vn 0.0472 -0.4801 0.8760 +vn 0.1182 -0.3724 0.9205 +vn 0.3128 -0.7717 -0.5537 +vn 0.6626 -0.2105 0.7188 +vn 0.1723 -0.3251 0.9298 +vn 0.2661 -0.0953 0.9592 +vn 0.3739 0.0496 0.9261 +vn 0.4504 0.1103 0.8860 +vn 0.3590 0.8257 0.4352 +vn 0.3169 0.1663 0.9338 +vn 0.3779 0.2138 0.9008 +vn 0.3250 0.4316 0.8415 +vn 0.2278 0.4460 0.8656 +vn 0.0212 0.8150 0.5791 +vn 0.6663 0.4839 0.5674 +vn 0.4203 0.5392 0.7298 +vn 0.3878 0.2844 0.8768 +vn 0.1485 -0.3644 0.9193 +vn 0.1595 -0.3228 0.9329 +vn 0.2912 -0.1316 0.9476 +vn 0.1706 -0.3235 0.9307 +vn 0.3221 -0.2242 0.9198 +vn 0.3290 -0.1645 0.9299 +vn 0.3916 0.3109 0.8660 +vn 0.2992 0.5740 0.7622 +vn 0.8041 0.0879 -0.5879 +vn 0.5513 0.1157 0.8262 +vn 0.0733 0.8202 0.5673 +vn 0.7492 -0.3331 0.5725 +vn 0.4286 -0.1494 0.8911 +vn 0.4831 0.0774 0.8721 +vn 0.4963 0.5327 0.6855 +vn 0.4678 -0.6512 -0.5975 +vn 0.2506 -0.4181 0.8732 +vn 0.2064 0.9593 0.1928 +vn 0.2653 0.9635 -0.0363 +vn 0.5537 0.1426 0.8204 +vn 0.5577 0.1617 0.8141 +vn 0.7246 0.2744 -0.6322 +vn 0.5159 0.2085 0.8309 +vn 0.4843 0.0447 0.8738 +vn 0.3365 0.2220 0.9151 +vn 0.2057 0.7014 0.6825 +vn -0.8964 -0.1378 0.4213 +vn 0.6364 0.5790 0.5097 +vn -0.7220 -0.2651 -0.6391 +vn 0.2909 0.5607 0.7752 +vn 0.3256 0.4752 0.8174 +vn 0.2901 0.5503 0.7830 +vn 0.2999 0.5848 0.7537 +vn 0.4250 -0.4169 0.8034 +vn 0.3231 -0.7164 0.6183 +vn 0.4927 0.1719 0.8531 +vn 0.4337 0.6514 0.6225 +vn 0.5735 0.0373 0.8184 +vn 0.2862 -0.6669 0.6880 +vn -0.0817 0.9835 0.1615 +vn 0.2998 -0.0621 0.9520 +vn 0.3192 -0.0304 0.9472 +vn 0.1959 -0.1348 0.9713 +vn 0.4523 -0.1142 0.8845 +vn 0.4567 0.0679 0.8870 +vn 0.4809 0.1768 0.8587 +vn 0.2005 -0.0778 0.9766 +vn 0.3243 0.4731 0.8191 +vn 0.5062 -0.2216 -0.8335 +vn 0.6717 -0.0197 0.7406 +vn 0.6643 -0.0912 0.7419 +vn 0.2509 -0.6914 0.6775 +vn 0.1173 -0.3338 0.9353 +vn 0.1662 -0.3245 0.9312 +vn 0.2008 -0.1750 0.9639 +vn 0.4774 0.0519 0.8772 +vn 0.4187 0.1411 0.8971 +vn 0.4168 0.1457 0.8973 +vn 0.4033 0.5065 0.7621 +vn 0.0754 0.8688 0.4894 +vn 0.4331 0.3277 0.8397 +vn 0.1997 0.7559 0.6235 +vn 0.1793 0.7797 0.6000 +vn 0.7120 0.3074 0.6313 +vn 0.7360 0.3106 0.6015 +vn 0.3211 -0.0483 0.9458 +vn 0.7148 0.0350 0.6984 +vn 0.4704 0.3352 0.8163 +vn 0.0945 0.0127 -0.9954 +vn 0.1220 0.9564 0.2653 +vn 0.3050 0.5845 0.7519 +vn 0.5964 0.2012 -0.7770 +vn 0.7439 0.1308 0.6554 +vn 0.2813 -0.6904 0.6665 +vn 0.2584 -0.4139 0.8729 +vn 0.4683 -0.4630 0.7525 +vn 0.4672 -0.1351 0.8737 +vn 0.2742 -0.4730 0.8373 +vn 0.6758 0.1802 0.7147 +vn -0.1344 -0.9602 -0.2450 +vn 0.5824 0.0977 0.8070 +vn 0.2364 -0.0523 0.9703 +vn 0.5039 -0.4237 0.7527 +vn 0.2562 -0.1157 0.9597 +vn 0.3402 0.0282 0.9399 +vn 0.3430 0.0675 0.9369 +vn 0.4865 0.1423 0.8620 +vn -0.8158 0.2864 0.5024 +vn 0.6252 0.2126 0.7510 +vn 0.5582 0.2081 0.8032 +vn 0.7998 -0.0864 0.5941 +vn 0.9598 -0.2665 0.0876 +vn 0.7984 -0.0808 0.5967 +vn -0.0428 0.8050 0.5917 +vn 0.8127 0.4104 0.4137 +vn 0.8404 -0.2850 0.4609 +vn 0.7892 -0.3183 0.5253 +vn 0.4496 -0.7887 0.4194 +vn 0.7940 0.3837 0.4715 +vn -0.1637 -0.1867 -0.9687 +vn 0.8209 0.2366 0.5198 +vn 0.7295 -0.3229 0.6029 +vn 0.9018 -0.0750 0.4256 +vn 0.9877 -0.1488 0.0484 +vn 0.7218 0.0327 -0.6914 +vn 0.6843 0.1988 0.7016 +vn 0.9763 -0.0178 0.2156 +vn 0.8921 -0.2552 0.3729 +vn -0.5167 -0.5213 -0.6792 +vn 0.7253 -0.5396 0.4275 +vn 0.8849 0.0788 0.4591 +vn 0.7311 0.3108 0.6074 +vn 0.2958 -0.7965 -0.5273 +vn 0.1948 -0.3911 -0.8995 +vn 0.5981 0.1184 -0.7926 +vn 0.4381 0.7922 0.4248 +vn 0.8415 -0.2899 0.4558 +vn 0.8918 0.3271 -0.3126 +vn -0.5420 0.7199 -0.4336 +vn 0.8000 0.3181 0.5087 +vn 0.6700 0.4110 0.6182 +vn 0.8719 -0.3105 0.3787 +vn 0.9869 -0.1017 -0.1256 +vn 0.3771 -0.6743 0.6349 +vn 0.8206 0.3310 0.4659 +vn 0.8621 0.2799 0.4223 +vn 0.5222 0.4863 -0.7006 +vn 0.8753 0.3422 0.3416 +vn -0.6796 0.2666 0.6834 +vn 0.6476 0.4426 0.6203 +vn 0.8214 0.3259 0.4681 +vn 0.7623 -0.1871 0.6195 +vn 0.4755 0.7407 0.4746 +vn 0.5247 -0.7106 0.4687 +vn -0.4599 -0.6220 -0.6338 +vn 0.8454 -0.5086 0.1628 +vn -0.6444 -0.7377 0.2015 +vn 0.9447 0.0849 0.3168 +vn 0.9401 0.3290 0.0897 +vn 0.7558 0.3271 0.5673 +vn 0.9186 -0.1100 0.3796 +vn 0.7876 0.4512 0.4196 +vn 0.8370 -0.5390 0.0946 +vn 0.9166 -0.3604 0.1734 +vn 0.8895 0.2972 0.3471 +vn 0.2359 0.9063 0.3507 +vn 0.9914 0.0347 0.1264 +vn 0.9655 0.1880 0.1801 +vn 0.9671 0.0427 -0.2506 +vn 0.6998 -0.7073 0.1001 +vn 0.9947 -0.1028 0.0021 +vn 0.9881 -0.1539 -0.0013 +vn 0.9713 0.2274 0.0695 +vn 0.9086 0.3792 0.1749 +vn 0.9013 0.3994 0.1678 +vn 0.9807 -0.1679 0.1000 +vn 0.9816 -0.0356 0.1876 +vn 0.9786 -0.1166 0.1695 +vn 0.9401 0.3393 0.0319 +vn 0.6419 0.4399 0.6281 +vn -0.6019 0.2212 -0.7673 +vn 0.6272 -0.7787 -0.0142 +vn 0.8292 -0.5561 -0.0560 +vn 0.9777 0.1829 0.1035 +vn 0.7139 -0.2394 -0.6581 +vn 0.9290 0.2928 0.2263 +vn 0.9882 -0.0517 0.1439 +vn 0.9630 0.0837 0.2562 +vn 0.8129 0.2281 0.5359 +vn 0.8029 0.4629 0.3755 +vn 0.7812 -0.6199 -0.0739 +vn 0.9277 -0.3447 -0.1433 +vn 0.9121 0.4095 0.0223 +vn 0.9483 -0.0954 0.3027 +vn 0.9935 -0.0648 0.0937 +vn 0.9774 0.2113 0.0082 +vn 0.9854 0.0936 0.1420 +vn -0.4416 0.2948 -0.8474 +vn 0.8945 -0.2529 0.3687 +vn 0.8050 -0.0453 0.5915 +vn 0.9624 0.2698 0.0323 +vn 0.8686 -0.0072 0.4955 +vn 0.9948 -0.0825 -0.0602 +vn 0.9270 0.3732 0.0376 +vn 0.9923 0.0800 -0.0947 +vn 0.7278 0.3013 0.6161 +vn 0.8496 -0.2956 0.4369 +vn 0.8388 -0.5151 0.1761 +vn 0.8257 0.3734 0.4229 +vn 0.5579 -0.8295 0.0266 +vn 0.7181 -0.1784 0.6726 +vn 0.9435 0.3259 -0.0606 +vn 0.9996 -0.0038 0.0287 +vn 0.7904 -0.6119 -0.0290 +vn 0.9968 0.0649 -0.0468 +vn -0.5980 0.3005 -0.7431 +vn 0.9961 -0.0838 -0.0293 +vn 0.8005 -0.4520 0.3936 +vn 0.9120 -0.1727 0.3719 +vn 0.8669 0.2074 0.4532 +vn 0.8889 0.1251 0.4407 +vn 0.8848 -0.3575 0.2988 +vn 0.1884 -0.6994 -0.6894 +vn 0.9117 -0.4105 0.0151 +vn 0.8351 -0.5411 0.0991 +vn 0.9923 0.0415 0.1164 +vn 0.8411 0.3086 0.4442 +vn 0.8498 0.4356 0.2968 +vn 0.8662 0.4083 0.2882 +vn 0.8561 0.4750 0.2036 +vn 0.9542 0.2671 0.1349 +vn 0.9896 -0.1376 0.0418 +vn 0.9957 0.0604 0.0698 +vn 0.8205 -0.4583 0.3417 +vn 0.9816 -0.1909 0.0079 +vn 0.3545 -0.6761 -0.6459 +vn 0.8310 -0.1877 0.5237 +vn 0.8092 -0.5843 -0.0621 +vn 0.7936 -0.1351 0.5932 +vn -0.5698 0.1725 -0.8035 +vn 0.7504 0.6052 0.2657 +vn 0.7240 0.2337 0.6490 +vn 0.8732 -0.2417 0.4232 +vn 0.8820 0.2642 0.3903 +vn 0.1425 0.7611 0.6328 +vn 0.5202 0.1614 0.8386 +vn 0.5839 0.0908 0.8067 +vn 0.1727 -0.6528 -0.7375 +vn -0.9414 -0.3227 -0.0981 +vn 0.7792 0.4861 0.3957 +vn 0.5002 0.1693 0.8492 +vn 0.8317 -0.0273 0.5546 +vn 0.6533 -0.7571 0.0020 +vn 0.8208 0.5051 0.2668 +vn -0.4298 -0.7273 -0.5351 +vn 0.7668 -0.4723 0.4347 +vn 0.7064 -0.5185 0.4818 +vn 0.7619 -0.4799 0.4350 +vn 0.9731 -0.0401 0.2270 +vn 0.6728 -0.6101 0.4185 +vn 0.6194 0.6128 0.4907 +vn 0.6112 0.4562 0.6467 +vn 0.8999 0.2288 0.3713 +vn 0.7758 0.4021 0.4863 +vn 0.8361 0.1816 0.5177 +vn 0.9700 -0.1391 0.1992 +vn 0.9132 -0.3648 0.1818 +vn 0.9266 -0.1955 0.3212 +vn 0.8850 0.1919 0.4241 +vn 0.3072 -0.8614 -0.4044 +vn 0.6343 -0.7569 0.1572 +vn 0.6034 0.6566 0.4525 +vn 0.7410 -0.4971 0.4514 +vn 0.8850 -0.2671 0.3813 +vn 0.8857 -0.2634 0.3822 +vn 0.8054 0.4386 0.3987 +vn 0.7628 0.4366 0.4770 +vn 0.8451 0.3722 0.3837 +vn 0.6159 0.6349 0.4665 +vn 0.7736 0.4974 0.3926 +vn 0.9089 0.2162 0.3567 +vn 0.8676 0.3036 0.3939 +vn 0.9208 0.1688 0.3516 +vn 0.9908 -0.0212 0.1337 +vn 0.9904 -0.0044 0.1382 +vn 0.3802 0.3122 -0.8706 +vn -0.2712 -0.7255 -0.6325 +vn 0.9318 -0.1668 0.3225 +vn 0.9385 0.1214 0.3232 +vn 0.9960 -0.0836 0.0313 +vn 0.3001 -0.6398 0.7075 +vn 0.7767 0.2613 0.5731 +vn 0.6015 0.4985 0.6242 +vn 0.6972 0.3029 0.6497 +vn 0.6175 -0.7847 0.0534 +vn 0.5147 0.7526 0.4106 +vn 0.8252 0.4575 -0.3313 +vn 0.9459 0.2581 0.1964 +vn 0.8566 0.4404 0.2689 +vn 0.4081 -0.7984 -0.4427 +vn 0.6556 0.6076 0.4483 +vn 0.9445 0.0960 0.3141 +vn 0.7393 -0.4065 -0.5368 +vn 0.8213 0.1988 0.5348 +vn 0.7492 -0.0527 0.6602 +vn 0.8419 -0.5310 0.0958 +vn 0.8409 0.4500 0.3008 +vn 0.9640 -0.1313 0.2312 +vn 0.1717 -0.9702 0.1712 +vn 0.4965 -0.6026 -0.6248 +vn 0.8197 0.2904 0.4938 +vn 0.6402 0.6207 0.4526 +vn 0.8462 0.3167 0.4285 +vn 0.7519 0.3986 -0.5251 +vn 0.8982 -0.2861 0.3337 +vn -0.7435 0.3213 -0.5865 +vn 0.8462 0.0815 0.5265 +vn 0.9333 0.2560 0.2520 +vn 0.9855 0.1177 0.1220 +vn 0.7420 0.0401 0.6692 +vn 0.7378 0.0997 0.6677 +vn 0.9360 0.2385 0.2588 +vn 0.8639 -0.5035 -0.0073 +vn 0.8853 0.4493 0.1199 +vn 0.9786 -0.1336 0.1565 +vn 0.8829 -0.2006 0.4246 +vn 0.9327 -0.2444 0.2653 +vn 0.8140 -0.5397 0.2150 +vn 0.8746 -0.0104 0.4847 +vn 0.9223 -0.2997 0.2440 +vn 0.8587 0.1884 0.4766 +vn 0.9689 -0.1416 0.2028 +vn 0.7411 0.0422 0.6700 +vn 0.8230 -0.2833 0.4924 +vn 0.9998 0.0210 -0.0015 +vn -0.4279 -0.9038 0.0024 +vn 0.8755 -0.2164 0.4320 +vn 0.8865 -0.1821 0.4255 +vn 0.8217 0.2020 0.5329 +vn 0.9590 -0.1792 0.2195 +vn 0.9897 0.0529 0.1329 +vn 0.9936 0.1109 0.0233 +vn 0.9974 0.0721 0.0082 +vn 0.7475 -0.5898 0.3054 +vn 0.8968 -0.0572 0.4386 +vn 0.9300 0.1026 0.3530 +vn 0.3435 0.7138 0.6103 +vn 0.7396 0.5495 0.3886 +vn 0.9479 -0.3046 0.0930 +vn 0.8451 -0.2730 0.4596 +vn 0.7977 0.1997 0.5691 +vn 0.6544 0.4212 0.6280 +vn 0.7746 0.4238 0.4694 +vn 0.9953 -0.0715 0.0657 +vn -0.8329 0.4263 0.3530 +vn 0.9418 -0.2572 0.2164 +vn 0.9323 0.2960 0.2077 +vn 0.9042 0.2705 0.3305 +vn -0.1260 -0.5707 -0.8114 +vn 0.9159 -0.1012 0.3884 +vn 0.8138 -0.0831 0.5752 +vn 0.8883 0.0813 0.4521 +vn 0.1241 -0.7263 -0.6761 +vn -0.0056 0.5217 0.8531 +vn 0.9361 0.2406 0.2566 +vn 0.8001 0.1623 0.5774 +vn 0.9035 -0.0555 0.4250 +vn 0.8648 0.4822 0.1400 +vn 0.9695 -0.1274 -0.2093 +vn 0.8719 0.3532 0.3392 +vn 0.8629 -0.1471 0.4835 +vn 0.8100 0.4266 -0.4023 +vn 0.8885 0.0841 -0.4511 +vn 0.9619 -0.0348 0.2713 +vn 0.7411 -0.3272 0.5862 +vn 0.8752 -0.2442 0.4176 +vn 0.8062 0.1892 0.5606 +vn 0.9772 -0.1808 0.1113 +vn -0.1466 -0.7917 -0.5930 +vn 0.9166 0.1215 0.3809 +vn -0.9953 -0.0048 -0.0965 +vn 0.9865 0.0350 0.1599 +vn 0.9726 0.1964 0.1245 +vn 0.9336 0.2958 0.2024 +vn 0.8950 0.4406 0.0693 +vn 0.9772 0.1607 0.1389 +vn 0.7975 -0.4880 0.3547 +vn 0.9294 0.0254 0.3681 +vn 0.8699 -0.2915 0.3979 +vn 0.8695 0.2886 0.4009 +vn 0.9001 0.1310 0.4156 +vn 0.9159 -0.2501 0.3141 +vn 0.9042 -0.0421 0.4251 +vn 0.8858 0.4575 0.0784 +vn 0.8965 -0.0507 0.4401 +vn 0.9378 -0.2146 0.2730 +vn 0.8813 0.2601 0.3946 +vn 0.9255 0.0820 0.3698 +vn 0.7850 0.4914 0.3772 +vn 0.7261 -0.2876 0.6246 +vn 0.9852 0.1335 -0.1076 +vn -0.5834 -0.5697 0.5789 +vn 0.7949 -0.0546 0.6042 +vn 0.9873 0.1575 -0.0192 +vn -0.0405 0.7943 0.6062 +vn 0.7879 0.3444 0.5105 +vn 0.6035 -0.5559 -0.5716 +vn 0.7699 0.3931 0.5027 +vn 0.8979 -0.0503 0.4374 +vn -0.7791 -0.1901 0.5974 +vn 0.8738 0.1997 0.4434 +vn 0.9336 0.1262 0.3354 +vn 0.9111 -0.1014 0.3996 +vn 0.8579 0.0908 0.5058 +vn 0.9961 0.0879 -0.0043 +vn 0.9993 0.0174 -0.0325 +vn 0.9015 0.4307 -0.0425 +vn 0.6843 0.0352 0.7283 +vn 0.8311 -0.3942 0.3923 +vn 0.9036 0.4216 0.0763 +vn 0.7790 -0.5038 0.3734 +vn 0.9082 0.0181 0.4182 +vn 0.8913 0.0125 0.4532 +vn 0.8935 0.3605 0.2677 +vn 0.9432 -0.3185 0.0950 +vn 0.9985 -0.0389 0.0377 +vn 0.9419 0.0351 0.3340 +vn 0.2559 -0.0292 -0.9663 +vn 0.5443 -0.5654 -0.6197 +vn 0.9985 0.0326 -0.0449 +vn -0.5838 0.8072 -0.0875 +vn -0.6293 -0.4193 -0.6544 +vn 0.7999 -0.4382 0.4101 +vn 0.9221 0.1132 0.3699 +vn 0.6502 0.4085 0.6406 +vn 0.9075 -0.3940 0.1455 +vn 0.8694 -0.2566 0.4223 +vn 0.9905 0.1375 -0.0063 +vn 0.8842 -0.3119 0.3477 +vn 0.8797 -0.2833 0.3819 +vn -0.8926 0.1960 -0.4060 +vn 0.9635 0.2487 -0.0994 +vn -0.0522 -0.9129 -0.4048 +vn 0.6096 0.0736 0.7893 +vn 0.7047 0.4328 0.5622 +vn 0.6177 -0.0467 0.7850 +vn 0.9977 -0.0043 0.0672 +vn 0.9882 -0.0992 0.1166 +vn 0.2961 -0.7104 -0.6385 +vn 0.8323 -0.2544 0.4926 +vn 0.7739 0.4282 0.4666 +vn 0.9555 0.2843 0.0792 +vn 0.7406 0.4557 0.4939 +vn 0.7393 -0.4046 -0.5383 +vn 0.6954 0.0566 0.7164 +vn 0.6981 -0.7043 0.1287 +vn 0.8715 0.0915 0.4818 +vn 0.9051 -0.0757 0.4184 +vn -0.7021 -0.2228 -0.6764 +vn -0.3408 -0.1758 0.9236 +vn 0.6953 -0.6678 0.2657 +vn 0.9111 0.2830 0.2996 +vn -0.8731 -0.1390 0.4673 +vn 0.9970 -0.0490 -0.0607 +vn 0.6853 0.0318 0.7275 +vn 0.8552 -0.0067 0.5182 +vn 0.7072 0.1055 0.6991 +vn 0.9500 0.2786 0.1412 +vn 0.9020 0.3816 0.2019 +vn 0.9220 -0.2551 0.2912 +vn -0.3841 -0.6177 -0.6862 +vn 0.8851 -0.3094 0.3477 +vn 0.8233 -0.1853 0.5365 +vn 0.9474 -0.3188 0.0300 +vn 0.8754 -0.0184 -0.4831 +vn 0.7724 0.1270 -0.6223 +vn 0.8067 0.0485 -0.5889 +vn 0.7429 -0.5420 0.3928 +vn 0.9188 0.3861 0.0824 +vn 0.1855 -0.9222 -0.3394 +vn 0.8882 -0.3766 0.2633 +vn 0.9334 0.2940 0.2058 +vn -0.6765 0.3318 -0.6575 +vn 0.5342 0.7412 0.4065 +vn 0.9048 -0.0531 0.4224 +vn -0.2678 -0.9040 -0.3332 +vn 0.8432 0.5334 0.0680 +vn 0.9022 0.1665 0.3978 +vn 0.8520 0.0361 -0.5222 +vn 0.6003 0.6478 -0.4690 +vn 0.9385 0.0084 0.3452 +vn 0.4429 -0.4895 0.7511 +vn 0.5458 0.0335 0.8373 +vn 0.4430 0.2167 0.8699 +vn 0.4459 0.2244 0.8665 +vn 0.7493 -0.6255 0.2173 +vn 0.6154 -0.5109 -0.6002 +vn 0.4495 0.8207 0.3527 +vn 0.7716 0.1280 0.6231 +vn -0.7497 -0.2521 0.6119 +vn 0.4432 0.7460 -0.4970 +vn 0.8073 -0.0494 0.5880 +vn 0.9410 0.1006 0.3231 +vn 0.8320 -0.4460 0.3299 +vn 0.5632 0.6887 0.4567 +vn 0.9566 -0.2854 -0.0585 +vn 0.6310 0.4759 0.6127 +vn 0.9163 -0.2302 0.3277 +vn 0.6262 0.6254 0.4656 +vn 0.9971 0.0757 0.0031 +vn 0.7372 0.3232 0.5933 +vn 0.9264 -0.3521 -0.1336 +vn 0.9695 -0.2166 0.1149 +vn 0.1097 0.8410 -0.5298 +vn 0.7278 -0.5232 -0.4433 +vn 0.7461 0.4886 -0.4524 +vn 0.0066 -0.4375 -0.8992 +vn 0.6256 0.5480 0.5553 +vn 0.9479 0.2816 -0.1487 +vn 0.9918 -0.0791 -0.1001 +vn 0.6332 0.7556 0.1680 +vn 0.3175 0.4109 -0.8546 +vn 0.7585 0.0314 0.6510 +vn 0.0420 -0.9979 0.0500 +vn -0.4399 0.7392 0.5099 +vn 0.7162 0.3962 0.5746 +vn 0.6093 0.3469 -0.7130 +vn 0.7292 -0.2381 0.6415 +vn 0.8595 0.4608 0.2210 +vn 0.9621 -0.2541 0.0986 +vn 0.9714 -0.0666 0.2278 +vn 0.6321 0.6429 0.4327 +vn 0.9397 -0.1198 0.3202 +vn 0.5595 0.5196 0.6457 +vn 0.7422 -0.0420 0.6689 +vn 0.6336 0.2093 0.7448 +vn 0.9938 -0.0457 -0.1010 +vn 0.8494 -0.3483 0.3966 +vn 0.9894 -0.0364 0.1402 +vn 0.6321 -0.3115 -0.7095 +vn 0.9965 -0.0455 0.0708 +vn 0.8820 0.0671 0.4664 +vn 0.7253 0.3092 0.6151 +vn 0.5331 0.7421 0.4063 +vn 0.9939 0.0398 0.1025 +vn 0.8676 -0.1583 0.4714 +vn 0.9700 -0.0923 0.2248 +vn 0.9353 0.2434 0.2570 +vn 0.8198 -0.5707 0.0471 +vn 0.6482 0.1160 -0.7525 +vn 0.8812 -0.2707 0.3876 +vn -0.5259 0.0681 -0.8478 +vn -0.8717 0.1719 -0.4589 +vn 0.9817 -0.1866 -0.0377 +vn 0.9886 -0.1096 -0.1036 +vn 0.9936 0.1129 -0.0017 +vn 0.4645 0.2959 0.8347 +vn 0.9171 0.3806 0.1185 +vn -0.7220 -0.4446 0.5301 +vn 0.9912 0.0204 0.1310 +vn 0.9849 -0.0720 0.1575 +vn 0.8972 -0.3778 0.2285 +vn 0.8622 0.2076 0.4621 +vn 0.4662 0.4954 -0.7329 +vn 0.1413 -0.6843 -0.7154 +vn 0.8299 0.2854 -0.4793 +vn 0.7829 0.1316 0.6081 +vn 0.8558 -0.2826 0.4333 +vn 0.9230 0.2384 -0.3021 +vn 0.7051 -0.0907 0.7033 +vn -0.0088 -0.5950 -0.8037 +vn -0.4860 -0.6067 -0.6291 +vn 0.9432 -0.1001 0.3168 +vn 0.9356 0.2000 0.2909 +vn 0.4336 -0.6643 -0.6088 +vn 0.5863 0.2807 -0.7599 +vn 0.6614 -0.7314 -0.1662 +vn 0.7698 0.2576 0.5840 +vn 0.8743 -0.2085 0.4384 +vn 0.3969 -0.3250 -0.8584 +vn -0.6212 0.1857 -0.7613 +vn 0.9996 -0.0054 0.0280 +vn 0.8436 -0.4015 0.3564 +vn 0.9894 0.0371 0.1403 +vn 0.8814 -0.1615 0.4439 +vn 0.6395 0.6529 0.4058 +vn 0.6610 0.5134 0.5473 +vn 0.8382 -0.2233 0.4976 +vn 0.9194 0.0944 0.3818 +vn 0.6613 -0.5836 0.4712 +vn 0.7899 -0.1750 0.5877 +vn 0.3677 0.9271 0.0723 +vn 0.7653 -0.5341 0.3593 +vn 0.8297 0.0212 0.5578 +vn 0.9063 0.2640 -0.3300 +vn 0.4639 -0.8072 -0.3651 +vn 0.8199 -0.0420 0.5710 +vn 0.9822 -0.1248 0.1407 +vn 0.3917 -0.3531 -0.8496 +vn 0.7654 -0.5202 0.3788 +vn -0.7259 0.0140 0.6877 +vn -0.5675 0.6386 -0.5197 +vn 0.7537 -0.1575 0.6381 +vn 0.9936 -0.0318 -0.1081 +vn 0.9549 0.2945 -0.0374 +vn 0.7855 0.2033 0.5845 +vn 0.2327 0.4420 0.8663 +vn 0.3672 0.8669 0.3372 +vn 0.7929 -0.1059 0.6001 +vn 0.9806 0.0729 0.1818 +vn 0.9952 -0.0493 0.0846 +vn 0.7040 -0.2188 0.6756 +vn 0.9850 0.1666 -0.0454 +vn 0.9127 0.2290 0.3384 +vn 0.9072 0.1412 0.3964 +vn 0.5267 -0.7106 0.4664 +vn 0.9775 -0.1956 0.0789 +vn 0.9693 0.0215 -0.2449 +vn 0.8454 -0.4506 0.2869 +vn 0.7160 0.3422 0.6085 +vn 0.6051 0.7340 0.3083 +vn -0.5971 -0.1231 -0.7927 +vn 0.5795 0.3113 -0.7531 +vn 0.7679 0.0204 0.6402 +vn 0.9678 -0.2179 0.1263 +vn 0.7847 0.4483 0.4281 +vn 0.9342 -0.0549 0.3525 +vn 0.9499 -0.2705 0.1564 +vn 0.8742 0.3240 0.3617 +vn 0.9583 -0.2054 0.1987 +vn 0.0048 -0.9996 -0.0284 +vn 0.6514 0.2427 -0.7189 +vn -0.6438 -0.4665 -0.6065 +vn 0.8704 -0.1350 0.4735 +vn 0.7270 0.3114 0.6120 +vn 0.8391 -0.4028 0.3657 +vn 0.7141 0.1958 0.6721 +vn 0.9562 0.0505 -0.2882 +vn -0.4835 0.7653 -0.4249 +vn 0.9840 0.0311 0.1753 +vn 0.9333 0.3570 0.0388 +vn 0.7735 0.2286 0.5911 +vn 0.3946 -0.6168 -0.6810 +vn 0.6315 -0.7572 -0.1670 +vn 0.2786 -0.8493 -0.4483 +vn 0.7565 0.0069 0.6540 +vn 0.9262 -0.1458 0.3478 +vn 0.8124 -0.1468 0.5643 +vn 0.8787 -0.4548 0.1448 +vn 0.7953 -0.1358 0.5909 +vn 0.9161 0.0805 0.3927 +vn 0.9578 -0.0464 0.2838 +vn 0.9884 0.1491 0.0295 +vn 0.7962 0.4360 -0.4195 +vn 0.9082 -0.1572 0.3879 +vn 0.9742 -0.1604 0.1586 +vn 0.8972 0.2459 0.3667 +vn 0.7845 0.1124 0.6098 +vn 0.4298 -0.0991 -0.8975 +vn 0.9939 0.1083 -0.0213 +vn 0.8206 -0.1810 0.5421 +vn 0.8774 -0.0225 0.4792 +vn 0.8377 -0.2475 0.4868 +vn 0.7107 0.5037 0.4912 +vn 0.9422 0.3124 0.1212 +vn 0.8374 -0.4421 0.3215 +vn 0.8469 -0.0648 0.5278 +vn 0.6625 -0.6297 0.4057 +vn 0.4954 -0.0046 -0.8687 +vn -0.6542 0.7456 -0.1267 +vn 0.8124 0.2261 0.5376 +vn 0.8731 -0.1475 0.4647 +vn 0.1426 -0.7204 -0.6787 +vn 0.6677 -0.7214 -0.1838 +vn 0.6095 -0.0802 -0.7887 +vn 0.8713 -0.3982 0.2870 +vn 0.6124 -0.0374 -0.7897 +vn -0.5386 0.0908 -0.8376 +vn 0.8130 -0.3711 0.4487 +vn 0.7078 -0.6755 0.2068 +vn 0.4706 -0.0580 0.8805 +vn 0.7930 -0.5523 0.2574 +vn 0.4185 0.6682 0.6151 +vn 0.7383 0.3983 0.5442 +vn 0.2971 0.8132 0.5004 +vn 0.8218 -0.3682 0.4347 +vn 0.7575 0.0981 0.6454 +vn 0.7380 -0.0518 0.6728 +vn 0.8065 0.1600 0.5692 +vn 0.5149 0.7509 0.4136 +vn 0.8867 -0.0323 0.4611 +vn 0.9300 -0.2964 0.2176 +vn 0.7761 -0.5867 0.2311 +vn 0.9363 -0.2297 0.2657 +vn 0.8843 0.3648 0.2914 +vn 0.5086 0.0108 -0.8609 +vn 0.8911 -0.0842 0.4460 +vn 0.8994 -0.0478 0.4346 +vn 0.9955 -0.0776 -0.0543 +vn 0.7711 -0.0868 0.6308 +vn -0.2545 -0.8411 -0.4773 +vn 0.8529 -0.3481 0.3891 +vn 0.8407 -0.1190 0.5282 +vn 0.9952 -0.0795 -0.0570 +vn 0.3001 -0.0568 -0.9522 +vn 0.9695 -0.2364 0.0651 +vn 0.7479 -0.0783 0.6592 +vn 0.7498 0.5104 0.4210 +vn 0.7652 0.0212 -0.6434 +vn 0.9439 -0.2933 0.1519 +vn 0.2352 -0.9219 -0.3078 +vn 0.7346 -0.2068 0.6462 +vn 0.8905 0.4061 0.2050 +vn 0.6602 0.4052 0.6324 +vn 0.6421 -0.7662 -0.0254 +vn 0.6462 0.5922 0.4814 +vn 0.9606 -0.1543 0.2310 +vn 0.9692 -0.1207 0.2147 +vn 0.9160 0.0468 -0.3984 +vn -0.0319 -0.0700 0.9970 +vn 0.7143 0.4923 0.4975 +vn 0.4903 0.4375 0.7538 +vn 0.6276 0.5103 0.5879 +vn 0.8814 0.0094 0.4723 +vn 0.8763 0.1235 0.4657 +vn 0.5137 0.8153 0.2672 +vn 0.9349 -0.2313 0.2693 +vn 0.9459 0.1347 0.2953 +vn 0.9470 -0.3100 0.0839 +vn 0.8024 -0.5650 0.1920 +vn -0.4600 -0.8879 0.0029 +vn -0.2520 0.1769 -0.9514 +vn 0.9335 -0.3131 0.1746 +vn 0.8580 -0.4188 0.2974 +vn 0.9522 -0.0908 0.2916 +vn 0.9216 0.1174 0.3699 +vn 0.1292 0.8299 0.5427 +vn -0.5896 0.4617 0.6628 +vn 0.9629 -0.0120 0.2694 +vn 0.9076 -0.3939 0.1455 +vn 0.9517 0.1941 0.2379 +vn 0.8868 0.3905 0.2473 +vn -0.6068 0.1259 -0.7848 +vn 0.8568 -0.1173 0.5021 +vn 0.9281 -0.3382 0.1558 +vn 0.8283 0.4051 0.3870 +vn 0.8251 0.2858 0.4874 +vn 0.7232 0.3217 0.6111 +vn 0.6665 0.7446 -0.0354 +vn 0.9782 -0.0399 0.2038 +vn 0.3585 0.7992 0.4825 +vn 0.8972 -0.4260 0.1161 +vn 0.2924 0.8128 0.5038 +vn 0.9843 -0.1560 0.0832 +vn -0.5771 -0.7031 0.4155 +vn 0.7075 0.4390 -0.5539 +vn 0.9370 -0.2264 0.2662 +vn 0.9637 -0.2255 0.1433 +vn 0.9260 0.0735 0.3702 +vn 0.9860 0.0340 0.1632 +vn 0.9499 0.2086 0.2328 +vn 0.7593 0.1832 0.6244 +vn 0.7499 -0.3783 0.5427 +vn 0.9115 -0.1853 0.3672 +vn 0.7876 0.2082 0.5800 +vn -0.4625 -0.0583 -0.8847 +vn 0.4169 0.2565 0.8720 +vn 0.7631 0.5266 0.3745 +vn 0.7699 0.5194 0.3707 +vn 0.8703 -0.0131 0.4924 +vn 0.9677 0.1881 0.1681 +vn 0.7637 -0.1861 0.6182 +vn 0.6940 0.2961 0.6562 +vn 0.8594 0.1033 0.5007 +vn 0.4835 0.3131 0.8174 +vn -0.6127 0.3436 0.7117 +vn 0.6679 0.5945 0.4478 +vn 0.8167 0.3678 0.4446 +vn 0.7280 0.4138 0.5467 +vn 0.7191 -0.4359 -0.5412 +vn 0.9581 -0.2065 0.1985 +vn 0.6791 0.1550 -0.7175 +vn -0.6141 -0.4160 0.6707 +vn -0.8135 0.2775 0.5110 +vn -0.8623 0.0428 0.5047 +vn 0.8133 -0.1575 -0.5601 +vn 0.8222 -0.1738 -0.5420 +vn 0.8306 0.3249 -0.4522 +vn 0.2344 -0.9137 -0.3319 +vn -0.8843 -0.2201 0.4117 +vn -0.8348 0.4490 0.3186 +vn -0.2128 0.0934 0.9726 +vn -0.5064 -0.5366 0.6750 +vn 0.0577 -0.0004 0.9983 +vn -0.9096 0.0214 0.4148 +vn 0.0569 -0.9983 0.0146 +vn -0.6448 0.2287 0.7294 +vn -0.7466 0.0630 0.6623 +vn -0.7545 0.3014 0.5830 +vn -0.4405 0.8923 -0.0986 +vn -0.5237 0.8483 0.0778 +vn 0.1577 -0.8186 -0.5523 +vn -0.7044 0.4246 0.5688 +vn 0.8462 0.3176 -0.4279 +vn -0.7974 0.2644 0.5425 +vn 0.2320 0.0526 -0.9713 +vn -0.8407 -0.3612 0.4035 +vn -0.6740 -0.1606 0.7211 +vn 0.3411 -0.1873 -0.9212 +vn 0.4694 -0.8453 0.2551 +vn -0.0376 -0.9781 -0.2046 +vn 0.0005 0.1243 -0.9922 +vn 0.9229 0.1901 -0.3349 +vn -0.9518 0.0436 0.3036 +vn -0.8922 -0.2032 0.4033 +vn -0.3913 0.7400 0.5470 +vn -0.4786 0.6583 0.5810 +vn 0.7691 -0.0256 -0.6386 +vn -0.6204 0.3795 0.6863 +vn 0.5519 -0.4292 -0.7150 +vn -0.6830 0.7228 -0.1052 +vn -0.7122 -0.3733 0.5945 +vn 0.6705 -0.3253 -0.6668 +vn 0.8936 0.1408 -0.4263 +vn 0.6056 -0.5136 -0.6078 +vn -0.9133 0.4066 -0.0254 +vn -0.4057 -0.6441 -0.6485 +vn -0.9653 0.2167 0.1457 +vn 0.9352 0.3517 0.0421 +vn -0.9240 -0.3718 -0.0897 +vn 0.3318 -0.6646 -0.6695 +vn 0.9201 0.2396 -0.3098 +vn -0.0558 0.8870 -0.4585 +vn 0.4729 -0.2055 -0.8568 +vn 0.4351 -0.2118 -0.8751 +vn -0.4104 -0.2208 -0.8848 +vn 0.3583 -0.5171 -0.7773 +vn -0.5025 -0.8094 -0.3039 +vn 0.7464 -0.6253 -0.2277 +vn 0.1712 -0.6424 -0.7470 +vn 0.8880 0.0773 -0.4533 +vn 0.8652 0.4170 -0.2783 +vn -0.9369 0.2756 0.2153 +vn 0.3017 0.0416 -0.9525 +vn 0.3547 -0.8739 -0.3324 +vn 0.6592 -0.5305 -0.5329 +vn 0.9328 0.1374 -0.3333 +vn -0.4361 0.5648 -0.7006 +vn -0.5579 -0.4089 0.7222 +vn -0.7908 -0.6076 0.0743 +vn 0.8573 -0.1257 -0.4992 +vn 0.3413 -0.2554 -0.9046 +vn -0.5466 0.6916 0.4722 +vn -0.6823 -0.4924 0.5403 +vn 0.4719 0.0072 -0.8816 +vn 0.0004 -0.9319 -0.3627 +vn 0.6736 -0.4008 -0.6210 +vn 0.3929 0.2733 -0.8780 +vn -0.4227 0.2792 -0.8622 +vn 0.8296 0.3585 -0.4282 +vn 0.5402 -0.6935 -0.4767 +vn -0.8437 0.2296 -0.4852 +vn 0.4781 -0.5244 -0.7046 +vn 0.1142 0.0761 -0.9905 +vn -0.4683 0.8487 0.2457 +vn 0.9260 0.3740 0.0510 +vn 0.1477 -0.0612 -0.9871 +vn 0.3423 0.1277 -0.9309 +vn 0.4690 -0.6498 -0.5981 +vn -0.8124 -0.4821 0.3280 +vn 0.5079 -0.4753 0.7184 +vn -0.9771 -0.1860 0.1037 +vn -0.8616 -0.5016 0.0774 +vn 0.4016 -0.3252 -0.8561 +vn 0.7816 -0.0866 -0.6177 +vn -0.9707 -0.0799 0.2265 +vn 0.3148 -0.1866 -0.9306 +vn 0.1442 -0.1218 -0.9820 +vn -0.9928 -0.0422 0.1118 +vn -0.9036 -0.3917 0.1732 +vn -0.9206 -0.1434 0.3632 +vn -0.6171 -0.3795 0.6894 +vn 0.0268 0.9557 -0.2931 +vn -0.2651 0.7249 -0.6358 +vn -0.6263 -0.4569 -0.6317 +vn 0.3283 -0.3391 -0.8816 +vn 0.2017 0.7317 0.6511 +vn 0.8393 -0.5435 0.0128 +vn 0.3004 0.0621 -0.9518 +vn 0.8519 -0.2171 -0.4766 +vn -0.8533 0.0495 0.5190 +vn 0.3091 0.0701 -0.9484 +vn 0.3571 0.2475 -0.9007 +vn 0.7821 -0.0962 -0.6157 +vn -0.2179 -0.7311 -0.6465 +vn 0.9526 0.2983 0.0596 +vn 0.7453 -0.1109 -0.6574 +vn 0.4889 -0.1662 -0.8564 +vn -0.7513 0.3269 0.5733 +vn 0.4183 -0.4603 -0.7830 +vn -0.7015 0.0677 0.7094 +vn 0.3002 -0.6348 -0.7120 +vn 0.9069 0.3480 -0.2375 +vn 0.0953 -0.4250 0.9002 +vn -0.4481 0.8886 -0.0977 +vn -0.8947 0.0590 0.4428 +vn -0.4855 0.8405 -0.2404 +vn 0.3139 0.0324 -0.9489 +vn 0.3461 -0.0254 -0.9378 +vn 0.6632 0.3117 0.6805 +vn 0.8824 -0.4705 0.0039 +vn -0.8822 0.3390 0.3267 +vn -0.8978 0.3173 -0.3054 +vn 0.5266 -0.2668 -0.8072 +vn -0.9973 0.0630 0.0374 +vn -0.9532 0.2157 0.2118 +vn 0.3228 -0.4591 -0.8277 +vn 0.4871 -0.5836 -0.6497 +vn 0.6088 -0.5266 -0.5933 +vn 0.9037 0.0402 -0.4263 +vn 0.9118 0.0490 -0.4076 +vn 0.5401 -0.7523 -0.3773 +vn -0.8068 -0.2695 0.5257 +vn 0.9587 0.1776 -0.2220 +vn 0.8403 -0.1538 -0.5199 +vn -0.9581 0.1389 0.2506 +vn -0.4558 0.6022 0.6554 +vn -0.8614 -0.3825 0.3341 +vn -0.9850 0.1515 -0.0831 +vn 0.5250 -0.2744 -0.8056 +vn 0.8630 -0.3210 0.3901 +vn 0.5705 -0.5642 -0.5968 +vn 0.5772 -0.8056 -0.1337 +vn 0.2946 -0.3650 -0.8832 +vn 0.3865 -0.1896 -0.9026 +vn -0.0481 0.8230 0.5659 +vn -0.9171 0.2744 0.2893 +vn -0.9433 -0.0503 0.3280 +vn 0.4353 -0.7401 -0.5127 +vn 0.4906 0.6208 0.6115 +vn 0.3172 -0.9158 -0.2463 +vn -0.9245 -0.0034 0.3812 +vn 0.8909 0.0865 -0.4459 +vn -0.6439 -0.5737 0.5062 +vn -0.1168 -0.9200 -0.3742 +vn -0.7937 0.1230 0.5957 +vn 0.3174 -0.2397 -0.9175 +vn 0.2849 0.1193 -0.9511 +vn -0.5968 -0.3739 -0.7100 +vn -0.2536 0.8784 0.4050 +vn -0.9675 0.0115 0.2527 +vn 0.5478 -0.8161 0.1841 +vn 0.7463 -0.6258 -0.2267 +vn -0.5304 -0.7126 -0.4592 +vn -0.8869 0.4486 -0.1097 +vn -0.9644 -0.2642 -0.0064 +vn 0.3234 -0.2732 -0.9060 +vn -0.9989 -0.0302 0.0365 +vn 0.8775 -0.4794 -0.0165 +vn -0.6010 0.5505 -0.5795 +vn 0.2560 0.3285 -0.9092 +vn 0.0769 -0.4965 -0.8646 +vn 0.4656 0.2355 -0.8531 +vn -0.6349 0.1888 -0.7492 +vn -0.5677 -0.4503 0.6892 +vn 0.9855 0.1440 -0.0893 +vn -0.1130 -0.3480 0.9307 +vn -0.5777 0.0761 -0.8127 +vn -0.2117 -0.8484 -0.4852 +vn 0.3487 -0.1270 -0.9286 +vn 0.7318 0.0560 0.6792 +vn -0.9853 -0.0502 0.1635 +vn 0.1825 -0.0150 -0.9831 +vn -0.3294 -0.3787 -0.8649 +vn 0.7437 -0.6532 -0.1421 +vn 0.9151 0.3959 -0.0767 +vn -0.4926 0.4227 -0.7607 +vn 0.8839 0.3553 -0.3040 +vn 0.3875 -0.6791 -0.6234 +vn -0.6199 0.7376 0.2676 +vn 0.5193 -0.0443 -0.8535 +vn 0.4907 0.0256 -0.8710 +vn 0.7486 0.1696 -0.6409 +vn -0.9927 -0.0355 0.1149 +vn -0.5984 -0.3908 -0.6994 +vn 0.2804 0.0693 -0.9574 +vn 0.8701 0.3537 -0.3431 +vn 0.5817 0.1554 -0.7984 +vn 0.4878 0.3070 -0.8172 +vn 0.5621 -0.2302 -0.7944 +vn -0.2219 0.9039 -0.3657 +vn -0.4457 0.4982 0.7437 +vn -0.1784 0.7336 0.6558 +vn 0.2590 -0.0437 -0.9649 +vn 0.7258 0.0781 -0.6834 +vn -0.0039 0.7415 0.6710 +vn -0.7877 -0.6000 0.1401 +vn 0.3704 -0.5311 -0.7621 +vn -0.0582 0.3346 -0.9406 +vn 0.0123 -0.1895 -0.9818 +vn 0.8023 0.3057 -0.5127 +vn 0.8415 -0.1524 -0.5182 +vn 0.3123 -0.1045 -0.9442 +vn 0.4521 -0.1057 -0.8857 +vn -0.8089 -0.1401 0.5710 +vn -0.6556 0.1979 0.7287 +vn 0.8678 0.3940 -0.3029 +vn -0.5046 0.5213 0.6882 +vn 0.8961 -0.4209 0.1411 +vn 0.5778 0.5266 -0.6236 +vn 0.8770 -0.2529 0.4085 +vn 0.9280 0.3306 -0.1720 +vn 0.0715 -0.4328 -0.8987 +vn 0.1356 -0.9613 0.2396 +vn 0.2401 -0.9504 0.1977 +vn 0.3071 -0.1127 -0.9450 +vn 0.4098 -0.6296 -0.6601 +vn 0.6038 -0.4547 -0.6547 +vn 0.5401 -0.5863 -0.6038 +vn 0.8001 -0.1573 -0.5789 +vn -0.5551 0.8291 0.0667 +vn 0.5975 0.1805 -0.7813 +vn -0.7108 0.3928 -0.5835 +vn 0.4765 -0.3807 -0.7924 +vn 0.1466 -0.0213 -0.9890 +vn -0.0506 -0.8816 -0.4693 +vn 0.4622 -0.1240 -0.8781 +vn 0.7769 0.1025 -0.6212 +vn -0.8808 -0.4605 -0.1103 +vn -0.8371 0.0821 -0.5408 +vn -0.9326 0.1657 0.3206 +vn 0.0057 -0.0825 -0.9966 +vn 0.3341 -0.2369 -0.9123 +vn -0.8365 0.4499 0.3129 +vn 0.9114 -0.1409 -0.3866 +vn -0.9280 0.1171 0.3538 +vn 0.1834 0.0833 -0.9795 +vn 0.8856 0.3008 -0.3539 +vn 0.8470 -0.1011 -0.5219 +vn -0.9487 -0.2859 0.1354 +vn -0.9316 0.2925 0.2157 +vn -0.9922 -0.1217 -0.0272 +vn -0.9865 -0.1186 0.1130 +vn -0.9965 -0.0552 -0.0626 +vn 0.4263 -0.7409 -0.5190 +vn 0.5207 -0.0426 -0.8527 +vn 0.2920 0.0920 -0.9520 +vn 0.9509 0.0156 -0.3090 +vn -0.9848 0.1538 -0.0805 +vn 0.5836 0.0378 -0.8111 +vn 0.4187 -0.6509 -0.6332 +vn 0.4132 -0.1709 -0.8945 +vn 0.8217 -0.0824 -0.5640 +vn 0.9991 0.0093 -0.0416 +vn 0.7717 -0.2703 -0.5757 +vn 0.4334 -0.4655 -0.7716 +vn -0.8889 0.1559 -0.4308 +vn -0.7705 -0.3121 0.5559 +vn 0.5649 -0.4682 -0.6794 +vn 0.5299 -0.3806 -0.7579 +vn 0.3387 -0.8387 -0.4264 +vn 0.9493 0.2906 -0.1196 +vn 0.3261 -0.2328 -0.9162 +vn -0.1292 -0.7227 -0.6790 +vn 0.5103 0.3325 -0.7931 +vn 0.1475 0.0654 -0.9869 +vn 0.9700 0.0847 -0.2278 +vn 0.3164 0.0624 -0.9466 +vn 0.1075 -0.5202 0.8473 +vn -0.9714 -0.0614 0.2294 +vn 0.9837 0.1584 -0.0856 +vn 0.9532 0.2595 -0.1550 +vn 0.9258 0.3484 -0.1464 +vn 0.6603 0.5243 -0.5378 +vn -0.1882 -0.7860 -0.5889 +vn -0.1075 0.7184 0.6873 +vn 0.9349 0.1652 -0.3140 +vn 0.5381 -0.5660 -0.6246 +vn -0.3231 -0.6380 -0.6990 +vn -0.2731 0.5700 -0.7750 +vn 0.5280 -0.1970 -0.8261 +vn 0.4863 -0.2589 -0.8345 +vn 0.9062 0.1637 -0.3899 +vn -0.9363 -0.3268 0.1285 +vn 0.8760 0.4592 -0.1475 +vn 0.9794 0.0333 -0.1990 +vn -0.4330 -0.5891 -0.6823 +vn 0.4880 -0.2621 -0.8326 +vn -0.2354 -0.1889 -0.9534 +vn 0.4922 -0.3024 -0.8163 +vn 0.5802 -0.4344 -0.6889 +vn 0.3254 -0.1851 -0.9273 +vn -0.9697 0.1009 0.2225 +vn 0.9759 0.1054 -0.1909 +vn 0.9735 0.0788 -0.2148 +vn 0.9221 0.2657 -0.2813 +vn 0.8871 0.3883 -0.2494 +vn 0.5953 -0.7173 -0.3619 +vn -0.8461 -0.2510 -0.4702 +vn 0.8992 0.4094 -0.1545 +vn 0.9346 0.1714 -0.3118 +vn 0.7375 -0.4069 -0.5390 +vn 0.7367 -0.6624 0.1359 +vn 0.3209 -0.4588 -0.8286 +vn 0.3109 -0.2256 -0.9233 +vn -0.8726 -0.1637 0.4601 +vn -0.5930 -0.5286 0.6074 +vn -0.8344 -0.0582 0.5481 +vn 0.9165 0.2701 -0.2949 +vn 0.8740 0.3568 -0.3300 +vn 0.9442 0.0537 -0.3250 +vn 0.9475 0.0367 -0.3176 +vn 0.6754 -0.2253 -0.7022 +vn -0.6257 -0.5098 0.5905 +vn 0.8463 0.5066 -0.1645 +vn 0.1649 -0.9235 -0.3462 +vn -0.7084 -0.3050 0.6366 +vn 0.9538 0.0796 -0.2897 +vn 0.8696 0.3792 -0.3162 +vn 0.8444 0.3090 -0.4377 +vn -0.7013 -0.3603 -0.6152 +vn -0.6917 -0.3099 -0.6523 +vn 0.9246 0.3414 -0.1690 +vn -0.1156 0.5578 -0.8219 +vn 0.7022 0.3263 0.6327 +vn 0.9323 -0.3386 -0.1275 +vn 0.6628 -0.5147 -0.5438 +vn 0.7110 -0.4681 0.5247 +vn 0.9299 0.3626 0.0613 +vn 0.7407 -0.4344 -0.5125 +vn 0.9104 0.2459 -0.3327 +vn -0.7353 -0.0379 -0.6767 +vn 0.6444 -0.1093 -0.7568 +vn 0.9008 0.3975 -0.1751 +vn 0.7227 0.2753 -0.6340 +vn 0.6381 -0.7593 -0.1274 +vn 0.7260 -0.6732 -0.1402 +vn 0.9583 -0.0689 -0.2773 +vn 0.3010 -0.8773 -0.3740 +vn 0.9097 0.1194 -0.3978 +vn 0.5971 -0.7020 -0.3882 +vn -0.6491 -0.4033 0.6450 +vn -0.9664 0.2157 -0.1396 +vn -0.0153 -0.9999 -0.0020 +vn -0.7602 -0.5854 -0.2818 +vn 0.6693 -0.7179 0.1913 +vn 0.8870 0.4374 -0.1480 +vn 0.9449 0.1399 -0.2960 +vn 0.9482 0.0973 -0.3023 +vn 0.9528 0.2461 -0.1779 +vn 0.8471 -0.4259 -0.3179 +vn 0.9583 -0.0659 -0.2780 +vn 0.4667 0.0568 -0.8826 +vn 0.5658 -0.7571 -0.3267 +vn 0.8789 0.0805 -0.4702 +vn 0.2978 -0.8086 -0.5074 +vn 0.8290 0.4473 -0.3356 +vn 0.2365 0.7056 0.6680 +vn 0.7237 -0.6422 -0.2526 +vn 0.7954 -0.5060 -0.3338 +vn 0.8670 0.1368 -0.4791 +vn 0.0265 0.9880 0.1520 +vn 0.8619 -0.1788 -0.4745 +vn 0.8647 0.0891 -0.4944 +vn 0.9263 0.3327 -0.1767 +vn -0.9526 -0.2767 -0.1267 +vn 0.8481 -0.3383 -0.4078 +vn 0.9065 -0.2035 -0.3699 +vn 0.9057 0.1887 -0.3797 +vn 0.8954 0.1128 -0.4308 +vn 0.8782 0.2396 -0.4140 +vn 0.8122 0.4312 -0.3929 +vn 0.7926 0.4874 -0.3663 +vn 0.7686 -0.2595 -0.5848 +vn 0.8109 0.5074 -0.2916 +vn 0.8938 -0.2167 -0.3927 +vn 0.6826 0.7193 0.1294 +vn 0.8249 0.5505 -0.1284 +vn 0.2250 0.9307 0.2884 +vn 0.6912 0.7226 -0.0050 +vn 0.4919 -0.7661 0.4137 +vn -0.5457 -0.8144 -0.1976 +vn -0.1233 0.7862 0.6055 +vn 0.8928 0.3999 -0.2073 +vn 0.7403 0.6103 -0.2821 +vn 0.1169 0.8985 0.4232 +vn 0.8685 0.4049 -0.2858 +vn 0.3172 -0.0641 0.9462 +vn 0.8679 0.4916 -0.0712 +vn 0.7596 0.6135 0.2162 +vn 0.7837 0.6105 0.1145 +vn 0.8504 0.4444 -0.2817 +vn 0.6180 0.5574 -0.5544 +vn 0.5520 0.5667 -0.6117 +vn 0.7851 0.3728 0.4946 +vn 0.6870 0.6794 -0.2578 +vn 0.6362 0.7714 0.0137 +vn 0.7345 0.6752 0.0684 +vn 0.7035 0.6766 0.2174 +vn 0.0248 0.9754 0.2190 +vn -0.1990 0.8840 0.4229 +vn -0.0765 0.5143 0.8542 +vn 0.6189 0.4900 -0.6139 +vn 0.5653 -0.4486 0.6923 +vn 0.2283 0.9230 0.3098 +vn 0.7809 0.6207 -0.0698 +vn 0.4285 0.7921 -0.4347 +vn 0.4199 0.8698 -0.2591 +vn 0.4363 0.8649 -0.2480 +vn 0.4068 0.9124 -0.0450 +vn 0.5755 0.8133 0.0854 +vn 0.7469 0.5837 -0.3184 +vn 0.1279 -0.0645 -0.9897 +vn 0.3036 0.8870 0.3479 +vn 0.2385 0.9064 0.3487 +vn 0.2873 0.6881 0.6663 +vn 0.3266 0.8369 0.4392 +vn 0.1350 0.8806 -0.4542 +vn 0.0948 0.9822 -0.1624 +vn 0.1151 0.9923 0.0468 +vn 0.0941 0.9621 0.2559 +vn 0.0926 0.9218 0.3765 +vn 0.0365 0.9789 -0.2011 +vn 0.0788 0.9969 0.0076 +vn -0.0222 0.9441 0.3290 +vn 0.0923 0.8586 0.5042 +vn -0.1402 0.9477 0.2868 +vn -0.4133 0.9080 0.0684 +vn -0.0740 0.8991 0.4314 +vn 0.8256 0.5608 0.0625 +vn 0.8104 0.5732 0.1212 +vn -0.2978 0.9489 0.1046 +vn 0.8912 0.4457 0.0845 +vn 0.5696 0.6497 0.5035 +vn 0.9696 0.2192 -0.1090 +vn -0.2192 0.8967 0.3847 +vn -0.6763 -0.0691 0.7333 +vn -0.8969 0.2586 -0.3588 +vn -0.4289 -0.8462 0.3163 +vn -0.0327 0.9856 -0.1661 +vn -0.1921 0.9558 -0.2227 +vn 0.1348 0.9777 0.1607 +vn 0.5702 0.7771 -0.2664 +vn -0.8061 0.1041 0.5825 +vn 0.9529 0.0085 0.3032 +vn -0.7361 -0.5424 0.4050 +vn -0.9523 0.1691 0.2540 +vn 0.3298 0.8973 0.2934 +vn -0.7672 0.3531 0.5354 +vn -0.7670 0.3470 0.5397 +vn -0.4159 0.4666 -0.7806 +vn 0.7214 0.2967 -0.6257 +vn 0.9234 0.1466 -0.3549 +vn 0.9759 0.2164 0.0283 +vn -0.0701 0.8101 0.5821 +vn 0.1855 0.9823 -0.0243 +vn 0.4898 0.8591 -0.1486 +vn 0.7764 0.5968 0.2022 +vn -0.3891 -0.6816 -0.6197 +vn 0.2029 0.9654 -0.1636 +vn 0.7811 0.5241 -0.3395 +vn 0.1706 0.8815 0.4403 +vn 0.0972 0.8249 0.5569 +vn -0.7842 0.0085 -0.6205 +vn -0.9614 0.2103 0.1776 +vn -0.9217 0.3219 -0.2163 +vn 0.0081 0.7513 0.6599 +vn -0.3779 0.9258 -0.0059 +vn -0.3155 0.9483 0.0347 +vn 0.1720 0.9825 -0.0713 +vn 0.2144 0.9722 0.0940 +vn 0.0870 0.9804 0.1765 +vn -0.2860 0.9523 0.1062 +vn -0.3004 0.9447 0.1313 +vn -0.2901 0.9438 0.1585 +vn 0.1955 0.8800 0.4329 +vn 0.6706 0.7409 -0.0374 +vn 0.2262 0.9669 0.1181 +vn -0.2732 0.8767 0.3959 +vn -0.2006 0.9702 0.1357 +vn -0.1188 0.9838 0.1342 +vn 0.1749 0.9060 -0.3854 +vn -0.0598 0.9982 -0.0049 +vn -0.1199 0.8681 0.4817 +vn -0.7085 0.6822 0.1805 +vn -0.1381 0.9862 0.0910 +vn -0.0662 0.9932 -0.0956 +vn 0.5289 0.8487 0.0084 +vn 0.6254 0.7802 -0.0084 +vn 0.2357 0.9717 -0.0136 +vn 0.1862 0.9594 0.2120 +vn 0.7456 0.6490 -0.1510 +vn 0.7531 0.6362 -0.1675 +vn 0.7751 0.6279 -0.0698 +vn 0.6126 0.7857 0.0862 +vn 0.6023 0.7901 0.1143 +vn 0.2581 0.9285 0.2670 +vn -0.6663 -0.2700 0.6950 +vn 0.2671 0.9189 -0.2903 +vn 0.9228 0.1797 -0.3407 +vn 0.7809 0.6243 0.0213 +vn -0.4730 0.7070 0.5257 +vn -0.2881 -0.4321 0.8546 +vn -0.4146 0.9099 -0.0089 +vn -0.5026 0.7380 0.4503 +vn -0.1558 0.9874 -0.0283 +vn 0.2105 0.9485 -0.2366 +vn 0.8321 0.5247 -0.1796 +vn 0.9123 0.3868 -0.1347 +vn 0.5138 0.6611 0.5468 +vn 0.3196 0.9233 0.2129 +vn 0.9469 0.2984 -0.1198 +vn 0.7560 0.5649 0.3306 +vn -0.0013 0.9552 0.2960 +vn 0.0713 0.9968 -0.0370 +vn -0.2556 0.9437 0.2098 +vn 0.8094 -0.1200 0.5749 +vn 0.8984 0.3967 -0.1886 +vn 0.9591 0.2370 -0.1546 +vn 0.6322 0.3407 -0.6958 +vn -0.7133 0.1662 0.6808 +vn 0.2268 0.9220 0.3139 +vn 0.0608 0.8287 0.5564 +vn -0.1353 0.9689 0.2071 +vn 0.9496 0.2983 -0.0962 +vn -0.2441 0.8521 0.4630 +vn 0.0625 0.9723 0.2252 +vn -0.8474 -0.2140 0.4860 +vn 0.3672 0.9148 -0.1684 +vn 0.1232 0.9189 0.3748 +vn 0.0553 0.9903 0.1274 +vn -0.0331 0.9983 -0.0489 +vn 0.2022 0.9746 0.0960 +vn -0.7122 0.2376 0.6605 +vn 0.2609 0.9651 -0.0219 +vn 0.2327 0.9111 -0.3401 +vn 0.0416 0.9978 -0.0514 +vn 0.2866 0.9527 -0.1010 +vn 0.7061 0.4680 0.5315 +vn 0.3851 0.9166 0.1076 +vn 0.1319 0.9497 0.2841 +vn 0.0217 0.9991 -0.0353 +vn 0.4576 0.8554 0.2426 +vn -0.7022 0.4692 0.5355 +vn 0.3015 0.9481 0.1006 +vn 0.0648 0.9742 -0.2162 +vn 0.2434 0.8232 0.5130 +vn 0.2608 0.6718 0.6933 +vn -0.1494 0.9524 0.2658 +vn 0.6893 0.7157 -0.1125 +vn 0.3113 0.9499 -0.0263 +vn -0.2680 0.9599 -0.0826 +vn -0.1901 0.7530 0.6299 +vn -0.0439 0.9772 -0.2079 +vn -0.8287 -0.0856 -0.5531 +vn 0.6686 0.7412 -0.0605 +vn 0.7317 0.5469 -0.4069 +vn 0.6975 0.6686 -0.2578 +vn -0.6500 -0.0181 0.7597 +vn -0.1103 0.8166 0.5666 +vn 0.6125 0.2278 0.7570 +vn 0.2931 0.9411 0.1686 +vn 0.2542 0.9424 0.2176 +vn -0.7640 -0.3331 0.5526 +vn 0.2899 0.7937 0.5348 +vn -0.4220 0.8950 0.1443 +vn -0.6666 0.1923 0.7202 +vn 0.7273 -0.4384 -0.5281 +vn 0.6196 0.7619 0.1886 +vn -0.1042 0.9903 0.0915 +vn -0.0685 0.9934 -0.0923 +vn 0.0622 0.9842 -0.1660 +vn -0.0390 0.9982 0.0446 +vn -0.7616 0.6041 0.2346 +vn -0.8163 0.2627 0.5144 +vn 0.2465 0.8623 0.4424 +vn 0.7678 -0.1093 0.6313 +vn 0.8640 0.4885 0.1224 +vn -0.9030 0.3659 -0.2250 +vn -0.0599 0.8288 0.5563 +vn 0.1887 0.8708 0.4541 +vn 0.1893 0.8489 0.4934 +vn -0.1653 0.9368 0.3085 +vn 0.6034 0.6810 -0.4150 +vn 0.8727 0.4323 -0.2270 +vn 0.9961 0.0021 -0.0886 +vn -0.1869 0.9497 0.2513 +vn -0.0868 0.9949 0.0519 +vn 0.2721 0.8640 0.4238 +vn 0.6987 0.5550 -0.4514 +vn 0.6804 0.4736 0.5592 +vn 0.2580 0.9567 0.1346 +vn 0.9116 0.4003 -0.0936 +vn 0.0569 0.9923 0.1102 +vn -0.5180 0.3733 0.7696 +vn 0.6844 0.5605 -0.4664 +vn 0.7307 -0.3982 0.5545 +vn 0.7157 0.5811 -0.3874 +vn 0.8058 0.5291 -0.2659 +vn 0.1091 0.8748 0.4720 +vn 0.6451 0.7535 -0.1270 +vn -0.6869 0.3244 0.6504 +vn 0.0878 0.9961 0.0099 +vn 0.6407 0.7516 0.1569 +vn -0.0145 0.9997 -0.0187 +vn 0.4529 0.8448 0.2850 +vn 0.0220 0.9989 -0.0415 +vn -0.6094 0.7906 0.0596 +vn 0.7187 0.5744 -0.3918 +vn 0.7348 0.5829 -0.3469 +vn 0.7764 0.3715 -0.5091 +vn 0.1012 0.9937 0.0486 +vn -0.6076 0.7930 0.0449 +vn -0.5638 0.8219 0.0809 +vn 0.2225 0.7555 0.6161 +vn -0.4498 -0.3613 0.8168 +vn 0.2258 0.9455 -0.2346 +vn 0.2191 0.9461 -0.2383 +vn -0.0725 0.9416 0.3289 +vn 0.5186 0.8528 0.0611 +vn 0.2780 0.9018 0.3308 +vn 0.1501 0.9335 0.3256 +vn 0.4084 -0.5399 -0.7360 +vn 0.8137 0.5791 -0.0498 +vn -0.3794 -0.2677 -0.8856 +vn 0.1880 0.8977 -0.3985 +vn 0.7255 0.6825 -0.0878 +vn 0.9682 0.2430 0.0599 +vn -0.0980 0.9153 0.3906 +vn 0.2478 0.8015 0.5443 +vn -0.2946 0.9510 0.0936 +vn -0.5782 0.6916 0.4328 +vn 0.5619 0.5389 -0.6275 +vn 0.7942 0.5702 0.2099 +vn 0.7408 0.6554 0.1472 +vn -0.1507 0.6440 0.7501 +vn -0.9861 0.1573 -0.0538 +vn -0.4316 0.3558 -0.8289 +vn 0.0878 0.7594 0.6446 +vn -0.0563 0.8626 0.5027 +vn 0.0247 0.9919 -0.1244 +vn 0.6877 0.6060 -0.3998 +vn 0.6824 0.6635 -0.3067 +vn 0.7376 0.6679 -0.0992 +vn 0.7395 0.6467 -0.1871 +vn 0.7772 0.6249 -0.0740 +vn 0.7379 0.6731 0.0491 +vn -0.8755 0.4679 -0.1209 +vn -0.4477 0.8306 0.3310 +vn 0.1729 0.9744 -0.1437 +vn 0.6708 0.7406 -0.0382 +vn 0.7611 0.5959 -0.2562 +vn 0.6613 0.5903 -0.4628 +vn 0.2406 0.9121 -0.3319 +vn 0.6611 0.5937 -0.4587 +vn 0.6357 0.6903 -0.3456 +vn 0.6361 0.6947 -0.3357 +vn 0.5779 0.8121 0.0809 +vn 0.6274 0.7538 -0.1953 +vn -0.1391 0.8524 0.5040 +vn -0.8160 0.5675 -0.1101 +vn 0.5728 0.4718 -0.6703 +vn 0.5127 0.5837 -0.6296 +vn 0.5545 0.7272 -0.4046 +vn 0.5897 0.7566 -0.2825 +vn 0.5201 0.6522 -0.5515 +vn 0.2699 0.9398 0.2097 +vn 0.4769 0.8429 0.2490 +vn 0.4234 0.6813 0.5971 +vn -0.9557 0.2253 0.1895 +vn 0.5634 0.8261 -0.0094 +vn 0.0865 0.9706 -0.2245 +vn 0.8091 0.5713 -0.1378 +vn -0.3021 0.9514 -0.0598 +vn -0.6550 0.7303 -0.1941 +vn 0.7355 0.2096 0.6442 +vn -0.6910 0.6522 -0.3118 +vn 0.0729 0.7661 0.6386 +vn 0.5054 0.7280 -0.4632 +vn 0.5735 0.7144 -0.4008 +vn 0.7433 0.6535 0.1431 +vn 0.2610 -0.1591 0.9521 +vn 0.2981 0.9543 -0.0231 +vn 0.6852 0.7197 -0.1121 +vn 0.6663 0.7391 0.0985 +vn 0.3539 0.7367 -0.5762 +vn 0.5566 0.6286 0.5432 +vn -0.7324 -0.3802 0.5648 +vn -0.7289 -0.1053 -0.6765 +vn 0.5664 0.8094 0.1550 +vn -0.2893 0.9549 -0.0673 +vn -0.2148 0.8362 0.5046 +vn -0.7944 0.3881 0.4673 +vn 0.3398 0.8902 0.3036 +vn 0.5290 0.7610 -0.3755 +vn 0.5719 0.7705 -0.2815 +vn 0.5795 0.8031 -0.1387 +vn 0.5595 0.8123 0.1650 +vn 0.5457 0.7738 0.3215 +vn 0.2341 0.9270 0.2932 +vn 0.4164 0.7605 0.4983 +vn 0.3411 0.7256 -0.5977 +vn 0.4032 0.7750 -0.4866 +vn 0.4074 0.7667 -0.4962 +vn 0.5439 0.7819 -0.3047 +vn 0.5423 0.8170 -0.1961 +vn 0.3628 0.7795 0.5106 +vn 0.1050 0.9771 -0.1853 +vn 0.6764 -0.0646 0.7337 +vn 0.1221 0.9916 0.0432 +vn 0.2263 0.9402 0.2546 +vn 0.4160 0.7491 0.5156 +vn 0.6285 0.7754 -0.0609 +vn 0.4498 0.7912 -0.4143 +vn 0.4901 0.8691 0.0676 +vn 0.4617 0.7584 0.4600 +vn -0.8859 -0.2234 0.4066 +vn 0.1626 0.9426 0.2918 +vn -0.3248 0.8413 0.4322 +vn -0.2518 0.8961 0.3656 +vn 0.3177 0.8950 0.3130 +vn 0.7063 -0.3807 -0.5968 +vn 0.2787 -0.5634 -0.7777 +vn 0.4634 0.8649 -0.1932 +vn -0.8834 0.2764 0.3783 +vn 0.9437 0.0315 0.3293 +vn 0.1768 0.8659 0.4679 +vn -0.3641 0.8309 0.4207 +vn -0.9974 0.0618 0.0367 +vn 0.3887 0.8495 -0.3567 +vn 0.4931 0.8600 0.1315 +vn 0.6982 0.6577 0.2828 +vn 0.3646 0.8067 -0.4651 +vn -0.4235 0.8429 0.3319 +vn 0.3252 0.7024 0.6331 +vn 0.3907 0.8609 -0.3258 +vn 0.4293 0.8579 -0.2821 +vn 0.4261 0.8761 -0.2255 +vn 0.5063 0.8602 0.0604 +vn 0.1733 0.8605 0.4790 +vn 0.1754 0.8612 0.4771 +vn 0.9989 0.0159 0.0434 +vn 0.3723 0.7842 -0.4963 +vn 0.4141 0.9096 -0.0333 +vn 0.5686 0.8196 0.0698 +vn 0.5610 0.7692 0.3059 +vn 0.5007 0.7333 0.4599 +vn -0.6529 -0.7300 0.2020 +vn 0.9072 0.3268 -0.2648 +vn -0.8275 -0.1776 0.5326 +vn -0.6701 -0.2262 -0.7070 +vn -0.4260 0.1373 -0.8943 +vn 0.3815 0.9022 -0.2014 +vn 0.5156 0.8220 0.2418 +vn 0.0019 0.8739 0.4862 +vn -0.0616 0.8636 0.5004 +vn 0.3542 0.8468 -0.3969 +vn 0.4505 0.8919 -0.0400 +vn 0.4454 0.8953 -0.0010 +vn 0.2664 0.7320 0.6271 +vn 0.0254 0.8899 0.4555 +vn 0.1088 0.9940 0.0063 +vn -0.1777 0.9834 -0.0358 +vn 0.4523 0.8561 0.2499 +vn 0.6092 -0.4400 -0.6597 +vn 0.8332 0.4991 -0.2379 +vn -0.4560 0.6381 0.6205 +vn -0.8452 0.5344 0.0081 +vn 0.3589 0.9236 -0.1345 +vn 0.8243 0.4948 -0.2750 +vn 0.4667 0.8839 0.0313 +vn 0.3034 0.6592 0.6881 +vn -0.9156 -0.4019 0.0111 +vn -0.6917 -0.5342 0.4860 +vn -0.5232 0.0313 0.8516 +vn -0.8974 0.4352 0.0729 +vn 0.2630 0.8798 -0.3960 +vn 0.8963 0.4371 0.0745 +vn -0.3109 0.5105 0.8017 +vn -0.3977 -0.0546 -0.9159 +vn -0.5070 0.1836 0.8422 +vn -0.5255 0.5005 0.6880 +vn -0.6197 0.5519 0.5580 +vn 0.0908 -0.7680 0.6339 +vn -0.2975 0.4022 0.8659 +vn -0.4504 0.3755 0.8100 +vn 0.6534 -0.6628 0.3656 +vn -0.1184 0.8446 0.5221 +vn -0.2595 0.6459 0.7180 +vn -0.1061 0.8719 0.4780 +vn 0.4308 0.3711 0.8226 +vn 0.3072 0.0026 0.9517 +vn -0.7318 0.1744 0.6588 +vn 0.3214 0.1293 0.9381 +vn -0.8159 0.0767 -0.5731 +vn -0.8905 0.1090 -0.4417 +vn 0.0604 0.6377 0.7679 +vn 0.1180 0.4697 0.8749 +vn 0.2000 0.0040 0.9798 +vn -0.4839 -0.3251 0.8125 +vn -0.2162 0.4339 0.8746 +vn -0.4138 -0.8062 -0.4227 +vn -0.5017 -0.0420 0.8640 +vn -0.3673 -0.3119 0.8762 +vn -0.3956 0.7032 0.5908 +vn -0.4689 -0.2924 0.8334 +vn -0.4171 -0.0088 0.9088 +vn -0.3919 0.7090 0.5863 +vn -0.7368 -0.4210 0.5291 +vn -0.0304 0.4231 0.9056 +vn -0.2776 0.7221 0.6336 +vn -0.4400 0.3651 0.8204 +vn -0.2918 0.1450 -0.9454 +vn -0.5331 -0.3631 -0.7642 +vn 0.4699 0.1787 0.8644 +vn -0.0087 -0.9992 -0.0384 +vn -0.8912 0.4537 0.0021 +vn 0.1219 -0.3515 -0.9282 +vn -0.1812 -0.0025 0.9834 +vn -0.0436 0.4139 0.9093 +vn 0.0501 0.2674 0.9623 +vn -0.2514 -0.2645 0.9310 +vn -0.4329 0.1232 -0.8930 +vn 0.8912 0.3528 -0.2850 +vn -0.3557 0.5339 0.7671 +vn -0.8101 0.3697 -0.4551 +vn -0.3738 -0.0391 0.9267 +vn -0.3750 0.6938 0.6148 +vn -0.3842 0.3249 0.8642 +vn -0.4679 -0.3726 0.8014 +vn -0.4408 0.7822 0.4403 +vn -0.4208 -0.4720 0.7747 +vn -0.2950 0.5846 0.7557 +vn -0.1963 -0.8616 -0.4681 +vn -0.6445 0.3373 0.6862 +vn -0.6583 0.4344 0.6148 +vn 0.0020 0.3860 0.9225 +vn -0.2294 0.3446 0.9103 +vn 0.1327 -0.4314 0.8923 +vn -0.5532 -0.0770 0.8295 +vn -0.6858 0.1322 -0.7157 +vn -0.7956 -0.0425 -0.6043 +vn -0.5030 -0.3361 0.7963 +vn -0.7609 0.1030 -0.6406 +vn -0.9526 -0.2231 -0.2069 +vn -0.4174 -0.0677 0.9062 +vn -0.4555 -0.2810 0.8447 +vn 0.0432 -0.3933 0.9184 +vn 0.3624 0.5823 0.7277 +vn -0.1796 0.2997 0.9370 +vn -0.7763 -0.2376 0.5839 +vn -0.1913 -0.8063 0.5597 +vn -0.0008 -0.8815 0.4722 +vn -0.1770 -0.8321 0.5256 +vn -0.1965 0.0143 0.9804 +vn -0.1716 0.2879 0.9422 +vn -0.0791 0.3669 0.9269 +vn -0.6739 0.2669 0.6890 +vn -0.0168 -0.1345 0.9908 +vn -0.0564 0.8116 0.5814 +vn 0.2998 -0.2274 0.9265 +vn 0.8100 0.1322 0.5713 +vn 0.6709 -0.4736 -0.5706 +vn 0.1109 0.8026 0.5861 +vn -0.1275 0.6571 0.7430 +vn 0.7967 0.4508 -0.4025 +vn -0.0407 0.7306 0.6816 +vn -0.6000 0.1662 0.7825 +vn -0.2993 0.5820 0.7561 +vn -0.0597 -0.1821 0.9815 +vn 0.6842 -0.7219 -0.1032 +vn 0.5166 0.2499 0.8189 +vn 0.5667 -0.4595 -0.6839 +vn -0.2214 0.5768 0.7864 +vn 0.1638 0.0678 0.9842 +vn -0.0631 -0.8852 -0.4608 +vn 0.0926 -0.8253 0.5570 +vn -0.8322 0.3896 0.3946 +vn -0.0279 0.3085 0.9508 +vn -0.0825 -0.1701 0.9820 +vn -0.0261 0.2614 0.9649 +vn -0.0625 -0.2750 0.9594 +vn 0.3667 0.2758 0.8885 +vn 0.7533 -0.0784 0.6530 +vn -0.6215 -0.1939 0.7590 +vn -0.4444 0.6531 0.6132 +vn -0.1443 0.1390 0.9797 +vn -0.0941 0.5989 0.7953 +vn -0.0093 0.6642 0.7475 +vn 0.0837 -0.2639 0.9609 +vn -0.2601 -0.9613 -0.0913 +vn -0.1406 0.8242 0.5485 +vn 0.3135 0.7258 -0.6123 +vn -0.5900 0.4416 0.6760 +vn 0.0965 0.5979 0.7957 +vn 0.2972 -0.3399 0.8923 +vn 0.0658 0.2237 0.9724 +vn -0.4197 0.0098 0.9076 +vn 0.0315 0.3092 0.9505 +vn -0.3151 0.8857 0.3409 +vn -0.7826 0.1524 0.6036 +vn -0.2769 0.3286 0.9029 +vn -0.7733 0.0822 -0.6287 +vn -0.8189 0.3978 0.4137 +vn -0.3170 -0.3237 0.8915 +vn 0.1437 -0.1320 0.9808 +vn 0.2971 0.0702 0.9523 +vn -0.4839 -0.2758 0.8306 +vn -0.0629 0.3216 0.9448 +vn -0.1707 -0.0658 0.9831 +vn -0.2897 0.9546 0.0696 +vn 0.0803 -0.4815 0.8728 +vn -0.2387 -0.2929 0.9259 +vn -0.9520 -0.2171 0.2156 +vn -0.1480 -0.4455 0.8830 +vn -0.2064 -0.0366 0.9778 +vn -0.3228 0.2274 0.9187 +vn -0.8019 0.4527 0.3899 +vn -0.8309 -0.0359 -0.5552 +vn -0.2825 -0.6645 -0.6918 +vn -0.0244 -0.2341 0.9719 +vn 0.2154 -0.1377 0.9668 +vn -0.0156 -0.2353 0.9718 +vn -0.2194 0.1939 0.9562 +vn -0.4066 0.2548 0.8774 +vn -0.0688 0.0806 0.9944 +vn 0.4045 0.7610 0.5072 +vn -0.4199 -0.2799 0.8634 +vn -0.2174 0.6315 0.7442 +vn -0.8056 0.3672 -0.4650 +vn -0.0635 -0.3065 0.9497 +vn -0.2446 -0.0053 0.9696 +vn 0.0138 -0.1801 0.9835 +vn 0.5259 -0.1567 0.8360 +vn 0.0967 -0.3856 0.9176 +vn -0.1897 -0.2362 0.9530 +vn -0.8578 -0.2349 -0.4571 +vn 0.3407 -0.8252 0.4505 +vn -0.5975 0.0762 -0.7982 +vn -0.6881 -0.1403 0.7120 +vn -0.8759 0.4291 0.2207 +vn -0.3795 -0.3640 0.8506 +vn -0.8402 0.3130 -0.4428 +vn -0.2515 0.4374 0.8634 +vn -0.9200 0.3555 0.1649 +vn -0.1656 0.2441 -0.9555 +vn -0.9605 -0.1550 0.2311 +vn -0.5007 -0.4932 -0.7114 +vn -0.5919 -0.0447 -0.8048 +vn -0.3060 0.0120 0.9519 +vn -0.9112 0.3129 -0.2680 +vn -0.8152 0.0930 0.5716 +vn 0.9536 -0.0509 0.2966 +vn -0.0646 -0.3433 0.9370 +vn -0.1304 0.0049 0.9914 +vn 0.0064 -0.0976 0.9952 +vn -0.1783 0.9032 0.3905 +vn 0.0347 0.7446 0.6666 +vn -0.6723 0.2676 0.6902 +vn -0.6020 0.4864 0.6333 +vn -0.7617 0.5617 0.3229 +vn 0.7757 0.2353 0.5857 +vn -0.1854 0.0870 0.9788 +vn -0.5270 0.7872 0.3203 +vn -0.4819 -0.3683 -0.7951 +vn -0.1149 -0.8163 -0.5661 +vn 0.5255 -0.1565 0.8363 +vn 0.0669 -0.2966 0.9526 +vn -0.9130 -0.1355 -0.3848 +vn -0.3277 0.1586 0.9314 +vn -0.2705 0.4169 0.8678 +vn 0.9219 0.3863 -0.0285 +vn -0.5979 0.1791 0.7813 +vn -0.7921 0.1856 -0.5815 +vn -0.0179 -0.3782 0.9256 +vn -0.4924 0.1412 0.8589 +vn -0.9090 -0.0961 0.4057 +vn -0.1900 0.2261 0.9554 +vn -0.4284 -0.7830 0.4510 +vn -0.1242 0.8147 0.5664 +vn -0.2782 0.5554 0.7837 +vn -0.2718 0.5799 0.7680 +vn 0.0051 -0.0543 0.9985 +vn -0.5596 -0.0875 0.8241 +vn -0.5496 -0.1309 0.8251 +vn -0.5496 0.2317 0.8027 +vn -0.5613 0.1164 0.8194 +vn -0.0347 0.7181 0.6951 +vn -0.3672 -0.3117 0.8764 +vn -0.1130 0.4881 0.8654 +vn 0.4831 -0.8543 -0.1918 +vn -0.3133 0.0140 0.9496 +vn -0.6589 0.2298 0.7162 +vn -0.0981 0.8763 0.4717 +vn -0.2467 0.3054 0.9197 +vn -0.1992 0.4270 0.8820 +vn -0.2386 0.5547 0.7971 +vn -0.0999 0.6406 0.7614 +vn -0.7672 0.6388 0.0577 +vn 0.3021 0.0278 0.9529 +vn -0.5420 0.4829 0.6878 +vn -0.8421 0.4316 0.3235 +vn -0.2544 0.3227 0.9117 +vn -0.6300 0.2276 0.7425 +vn -0.0058 0.6414 0.7671 +vn -0.2654 0.7247 0.6359 +vn 0.0841 -0.5210 -0.8494 +vn -0.4544 0.0181 0.8906 +vn -0.3480 -0.3174 -0.8821 +vn -0.5988 0.3475 0.7216 +vn -0.5376 -0.0958 0.8377 +vn -0.0508 -0.8119 0.5816 +vn -0.1848 0.1175 0.9757 +vn -0.4739 -0.3536 0.8064 +vn -0.4652 0.0746 0.8821 +vn -0.7246 -0.0800 -0.6845 +vn -0.5103 -0.3325 0.7931 +vn -0.4578 -0.1662 0.8734 +vn -0.3717 0.2122 0.9038 +vn -0.4321 -0.8870 -0.1629 +vn -0.2924 -0.1005 0.9510 +vn 0.0201 0.2737 0.9616 +vn -0.3588 0.4589 0.8128 +vn -0.1443 0.3079 0.9404 +vn -0.4017 0.0096 0.9157 +vn -0.4413 0.3962 0.8051 +vn -0.4537 0.1481 0.8788 +vn 0.7646 -0.1432 0.6284 +vn -0.2599 0.7596 0.5962 +vn -0.3984 -0.0526 0.9157 +vn -0.2840 0.4545 0.8443 +vn -0.8929 0.1063 -0.4376 +vn -0.2950 0.3763 -0.8783 +vn -0.2402 0.0523 0.9693 +vn 0.0830 0.5249 0.8471 +vn -0.3579 -0.1181 0.9263 +vn 0.1534 -0.8840 -0.4416 +vn -0.5779 0.0210 -0.8158 +vn -0.1340 0.1580 0.9783 +vn -0.1379 0.1787 0.9742 +vn -0.1672 0.5458 0.8211 +vn -0.4567 0.1622 0.8747 +vn 0.0888 -0.5939 0.7996 +vn -0.6404 0.0767 -0.7642 +vn -0.7267 -0.2721 -0.6308 +vn -0.5610 -0.2166 0.7990 +vn -0.3529 -0.0915 0.9312 +vn -0.3532 -0.0958 0.9306 +vn -0.4262 -0.0783 0.9012 +vn 0.8362 0.5327 -0.1303 +vn -0.5903 0.2280 -0.7743 +vn 0.2560 0.7643 -0.5919 +vn -0.1807 0.8030 0.5680 +vn -0.4251 0.5448 0.7228 +vn -0.3017 0.1791 0.9364 +vn -0.5612 0.4870 0.6692 +vn -0.0968 0.7955 0.5982 +vn -0.4981 -0.2410 0.8330 +vn -0.3141 0.1409 0.9389 +vn -0.3160 0.1947 0.9286 +vn -0.3315 0.1760 0.9269 +vn -0.2075 0.1088 0.9722 +vn -0.4384 -0.3065 0.8449 +vn -0.3148 0.7305 0.6061 +vn -0.6540 0.2494 -0.7142 +vn -0.0114 0.9858 0.1675 +vn 0.0062 -0.0550 0.9985 +vn -0.3417 0.2175 0.9143 +vn -0.1368 0.5921 0.7942 +vn -0.2594 0.4765 0.8400 +vn -0.6312 0.2543 0.7328 +vn -0.4279 0.5382 0.7261 +vn -0.2864 0.6971 0.6573 +vn 0.6967 -0.3167 -0.6437 +vn -0.1706 0.4197 0.8915 +vn -0.1616 0.5406 0.8256 +vn -0.0865 0.8335 0.5457 +vn -0.3467 0.3572 0.8673 +vn -0.7991 0.3596 -0.4818 +vn -0.4548 -0.2120 0.8650 +vn -0.4021 -0.0125 0.9155 +vn -0.2973 0.2584 0.9192 +vn -0.4062 0.2923 0.8658 +vn -0.3698 -0.1022 0.9235 +vn -0.1968 0.7982 0.5693 +vn -0.2735 0.2542 -0.9277 +vn -0.8263 0.0302 -0.5625 +vn -0.6451 0.0705 0.7608 +vn -0.4410 -0.2804 0.8526 +vn -0.0298 -0.1489 0.9884 +vn -0.0962 0.5273 0.8442 +vn -0.4454 -0.5273 0.7236 +vn -0.2371 -0.6361 -0.7343 +vn -0.7064 0.1826 -0.6838 +vn -0.4373 0.2123 -0.8739 +vn -0.3227 0.2273 0.9188 +vn -0.5588 0.1772 0.8102 +vn -0.5461 0.1949 -0.8147 +vn -0.4183 -0.2590 0.8706 +vn 0.3012 0.1900 0.9344 +vn -0.3010 0.7657 0.5684 +vn -0.2474 0.7590 0.6023 +vn -0.3032 0.7001 0.6465 +vn -0.3621 0.2555 0.8964 +vn -0.3461 0.2172 0.9127 +vn -0.4668 -0.0815 0.8806 +vn -0.9360 -0.1899 -0.2962 +vn -0.2513 0.0561 0.9663 +vn -0.2523 0.0676 0.9653 +vn -0.8404 -0.0591 -0.5388 +vn 0.7164 -0.2508 -0.6511 +vn -0.5018 0.2651 0.8233 +vn 0.0297 -0.9963 -0.0809 +vn -0.5029 0.3732 0.7797 +vn -0.3863 0.5365 0.7503 +vn -0.6085 0.7565 0.2395 +vn 0.1889 -0.2506 -0.9495 +vn -0.2525 0.4059 0.8784 +vn -0.2155 0.5364 0.8160 +vn -0.8132 0.3409 -0.4717 +vn -0.2323 -0.4378 0.8685 +vn -0.2848 -0.2836 0.9157 +vn -0.3903 -0.2139 0.8955 +vn -0.3785 -0.1303 0.9164 +vn -0.5234 0.2959 0.7991 +vn -0.4368 0.4325 0.7888 +vn -0.1766 0.6768 0.7147 +vn -0.1428 0.8104 0.5683 +vn -0.1095 0.5117 0.8522 +vn 0.4583 0.3923 0.7975 +vn -0.2488 0.7754 0.5804 +vn -0.2290 0.6089 0.7595 +vn -0.1014 -0.5182 0.8492 +vn -0.3234 0.0595 0.9444 +vn 0.6382 -0.5288 -0.5595 +vn -0.1608 0.5622 0.8112 +vn -0.0251 0.4717 0.8814 +vn -0.5977 0.5089 -0.6195 +vn -0.2221 0.2537 0.9414 +vn -0.2137 0.2099 0.9541 +vn -0.3781 -0.2560 0.8897 +vn -0.3797 0.2695 0.8850 +vn -0.1953 0.6466 0.7374 +vn 0.5985 -0.6815 -0.4211 +vn 0.0013 -0.5772 0.8166 +vn 0.0252 0.7421 0.6698 +vn 0.7568 0.5702 0.3196 +vn -0.6543 0.3768 -0.6557 +vn -0.8467 -0.3699 -0.3825 +vn -0.7286 -0.0308 -0.6842 +vn -0.9694 0.0943 -0.2268 +vn -0.2584 -0.2330 0.9375 +vn -0.2941 -0.0468 0.9546 +vn 0.0375 -0.5980 -0.8006 +vn 0.3637 0.0045 0.9315 +vn -0.2736 0.3265 0.9047 +vn -0.8289 0.2953 0.4750 +vn -0.2193 0.8365 0.5021 +vn -0.1261 0.7059 0.6970 +vn -0.1732 0.0868 0.9811 +vn -0.4343 0.1906 0.8804 +vn -0.4857 0.2930 0.8236 +vn -0.6957 -0.1927 -0.6920 +vn -0.1348 0.3505 -0.9268 +vn -0.4477 0.6250 -0.6395 +vn -0.6082 0.3424 -0.7162 +vn -0.4427 0.5900 -0.6753 +vn -0.2372 0.9054 -0.3522 +vn -0.1928 0.9102 -0.3666 +vn -0.3397 0.6936 -0.6352 +vn 0.2865 -0.4396 0.8513 +vn -0.0834 0.6760 -0.7322 +vn -0.1005 0.8246 -0.5567 +vn 0.0628 0.3710 -0.9265 +vn 0.1953 -0.0161 0.9806 +vn -0.7987 -0.0094 0.6016 +vn -0.9805 -0.1488 0.1286 +vn -0.6769 0.5174 -0.5236 +vn -0.9402 0.2007 -0.2751 +vn -0.8133 -0.5681 -0.1255 +vn -0.8432 -0.3516 -0.4067 +vn 0.1957 -0.8105 -0.5521 +vn -0.8926 -0.4144 -0.1775 +vn -0.9746 0.0336 -0.2212 +vn -0.9671 0.0105 0.2543 +vn -0.8121 -0.5543 -0.1824 +vn -0.9780 0.0036 0.2084 +vn -0.9644 0.0586 0.2578 +vn -0.9650 -0.2028 0.1664 +vn -0.7979 -0.5271 -0.2925 +vn -0.6255 -0.6720 -0.3965 +vn -0.9157 -0.3997 0.0426 +vn -0.7438 -0.6238 -0.2403 +vn -0.8057 0.2397 0.5417 +vn -0.9258 0.1336 0.3537 +vn -0.8736 -0.4714 -0.1205 +vn -0.5940 0.5525 0.5847 +vn -0.9513 -0.0929 0.2940 +vn -0.9646 -0.2119 0.1572 +vn -0.8679 -0.4952 0.0387 +vn -0.4133 0.9106 0.0012 +vn -0.6190 -0.7246 -0.3029 +vn -0.8261 -0.5586 -0.0750 +vn -0.8282 -0.5562 -0.0690 +vn -0.9343 -0.0623 0.3510 +vn -0.7245 -0.6307 -0.2780 +vn -0.9072 0.0364 0.4191 +vn -0.9276 0.1494 0.3424 +vn -0.7517 -0.6575 -0.0511 +vn -0.6506 -0.7390 -0.1747 +vn -0.6036 -0.3107 0.7343 +vn -0.9219 0.1516 0.3566 +vn -0.9201 -0.3229 0.2216 +vn -0.8718 -0.4566 0.1773 +vn -0.9184 -0.3955 0.0106 +vn -0.7302 -0.6668 -0.1490 +vn -0.3245 0.7614 -0.5612 +vn -0.6719 0.5388 0.5082 +vn -0.9033 -0.3552 0.2406 +vn -0.7923 0.1863 0.5809 +vn -0.8102 -0.5717 0.1296 +vn -0.7074 0.3188 0.6308 +vn -0.3261 0.5449 -0.7725 +vn -0.6656 0.6871 -0.2912 +vn -0.9028 -0.1680 0.3959 +vn -0.5711 -0.8029 0.1712 +vn -0.8890 0.2213 0.4009 +vn -0.9334 -0.0704 0.3518 +vn -0.4785 0.6634 -0.5753 +vn -0.2208 -0.8502 0.4779 +vn -0.9245 0.1260 0.3598 +vn -0.1116 -0.9937 0.0113 +vn -0.4476 0.6087 -0.6551 +vn -0.4769 0.3870 -0.7892 +vn -0.9092 -0.3578 -0.2130 +vn -0.9249 -0.1881 -0.3304 +vn -0.9860 0.0637 -0.1540 +vn -0.9784 0.1175 -0.1702 +vn -0.8818 0.3095 0.3560 +vn -0.8372 -0.5380 0.0979 +vn 0.1342 0.6632 -0.7363 +vn -0.9315 -0.3631 -0.0213 +vn -0.9466 -0.3212 0.0294 +vn -0.7264 0.6542 -0.2105 +vn -0.9702 0.2307 0.0748 +vn -0.6697 -0.7399 -0.0630 +vn -0.8691 -0.4691 0.1565 +vn -0.6444 0.1907 0.7406 +vn -0.1970 0.5613 -0.8038 +vn -0.5095 0.4926 -0.7055 +vn 0.7516 0.5354 -0.3853 +vn -0.9498 -0.3117 0.0264 +vn -0.9292 -0.3681 -0.0339 +vn -0.9582 -0.2613 0.1165 +vn -0.9924 0.0006 0.1227 +vn -0.9917 0.0081 0.1281 +vn -0.9108 0.4054 0.0782 +vn -0.9046 0.4210 0.0677 +vn -0.8608 0.0751 0.5034 +vn -0.5137 0.3192 -0.7964 +vn -0.3990 0.7108 -0.5793 +vn -0.9564 -0.2678 -0.1167 +vn -0.9665 0.0406 0.2534 +vn -0.9692 0.2463 0.0075 +vn 0.5958 0.6753 0.4347 +vn -0.6866 -0.7262 -0.0349 +vn -0.5877 0.8076 0.0491 +vn -0.8028 -0.3642 0.4720 +vn -0.1801 0.7665 -0.6165 +vn -0.1914 0.5678 -0.8006 +vn -0.9661 -0.2394 -0.0963 +vn -0.9335 -0.3573 -0.0319 +vn -0.9217 0.3426 0.1819 +vn -0.7162 0.0142 0.6978 +vn -0.8065 -0.5805 0.1118 +vn -0.9039 -0.2955 0.3093 +vn -0.4454 0.7546 -0.4819 +vn -0.9357 -0.2760 0.2199 +vn -0.9573 -0.2636 -0.1190 +vn -0.9473 -0.2658 0.1788 +vn -0.7608 0.6321 0.1474 +vn -0.7243 -0.6787 0.1215 +vn -0.8603 -0.1883 0.4736 +vn -0.9721 -0.0338 0.2322 +vn -0.7388 0.6265 0.2484 +vn -0.8545 -0.0925 0.5112 +vn 0.3929 0.7819 0.4841 +vn 0.7485 -0.2735 0.6041 +vn -0.2054 0.6839 -0.7000 +vn -0.9733 -0.1367 -0.1844 +vn -0.9308 -0.2981 0.2113 +vn -0.9377 -0.3083 0.1601 +vn -0.9266 -0.0451 0.3733 +vn -0.5540 -0.3532 0.7539 +vn 0.4300 0.2762 0.8595 +vn -0.9928 -0.0988 0.0684 +vn -0.8737 0.4864 -0.0031 +vn -0.8895 0.4562 -0.0268 +vn -0.8482 0.5205 -0.0985 +vn -0.3256 0.3197 0.8898 +vn -0.9583 -0.1891 0.2141 +vn -0.9315 -0.2965 0.2106 +vn -0.9876 -0.0564 0.1464 +vn -0.9344 0.3558 -0.0154 +vn -0.9318 0.3618 -0.0288 +vn -0.5842 0.1770 0.7921 +vn -0.4480 -0.1638 0.8789 +vn -0.6992 0.2935 0.6519 +vn -0.4176 -0.3204 0.8502 +vn -0.9316 -0.2936 0.2143 +vn -0.9304 -0.2652 0.2529 +vn -0.9923 0.0708 0.1019 +vn -0.9930 -0.0323 0.1132 +vn -0.9089 0.3030 -0.2866 +vn -0.7981 -0.5976 0.0775 +vn -0.7487 0.1085 0.6540 +vn -0.5757 0.0705 -0.8146 +vn -0.9707 -0.2179 -0.1017 +vn -0.9395 -0.2208 0.2620 +vn 0.7954 0.0700 -0.6021 +vn -0.7458 -0.5061 0.4332 +vn 0.0425 -0.9935 0.1057 +vn -0.5987 -0.7476 0.2874 +vn -0.8984 0.1085 0.4256 +vn -0.0727 0.8090 -0.5832 +vn -0.3663 0.5394 -0.7582 +vn -0.8934 0.4313 -0.1259 +vn -0.9032 0.4040 -0.1449 +vn -0.4854 0.8091 0.3313 +vn -0.9978 -0.0246 0.0620 +vn -0.9542 -0.2576 0.1524 +vn -0.9509 -0.2316 0.2055 +vn -0.4800 0.7655 -0.4284 +vn -0.6688 -0.2766 0.6901 +vn -0.6727 -0.0453 0.7385 +vn -0.6395 -0.7200 0.2696 +vn -0.6996 -0.6455 0.3064 +vn -0.8974 -0.2372 0.3720 +vn -0.8675 0.3214 0.3796 +vn -0.9219 -0.0687 0.3814 +vn -0.9754 0.1386 0.1714 +vn -0.9332 -0.2957 0.2041 +vn -0.7328 0.5423 0.4109 +vn -0.9227 0.0024 0.3856 +vn -0.8053 -0.5864 0.0873 +vn -0.9417 0.0084 -0.3364 +vn -0.0870 0.8333 0.5460 +vn -0.9689 0.1381 0.2051 +vn -0.2113 -0.7748 -0.5958 +vn -0.4477 0.8936 -0.0332 +vn -0.9342 -0.2946 0.2013 +vn -0.9489 -0.2274 0.2188 +vn -0.7704 -0.1314 0.6239 +vn -0.7849 -0.6137 0.0861 +vn -0.7934 -0.6082 0.0242 +vn -0.9383 0.3011 -0.1701 +vn -0.8732 0.4095 -0.2641 +vn -0.8260 0.5181 0.2219 +vn -0.8551 0.4990 0.1406 +vn -0.9783 -0.0462 0.2020 +vn -0.7099 0.2773 -0.6474 +vn -0.5330 -0.7029 -0.4711 +vn -0.6686 0.7364 -0.1034 +vn -0.8476 0.2438 0.4713 +vn -0.8048 0.0362 0.5925 +vn -0.8587 -0.3755 0.3487 +vn -0.7661 0.1756 0.6183 +vn -0.8324 0.4200 0.3617 +vn -0.7704 0.5890 0.2440 +vn -0.9528 -0.1138 0.2816 +vn -0.9364 -0.3510 -0.0034 +vn -0.7680 -0.6402 0.0190 +vn -0.7661 0.3440 0.5429 +vn -0.9705 -0.1818 0.1583 +vn -0.9484 -0.2531 0.1911 +vn -0.9485 -0.2525 0.1915 +vn 0.0727 0.2545 -0.9643 +vn -0.6645 0.1517 -0.7318 +vn -0.8486 0.2511 0.4656 +vn -0.8596 -0.1897 0.4744 +vn -0.5723 0.4331 0.6963 +vn -0.7818 -0.5660 0.2615 +vn -0.7699 0.0223 0.6377 +vn -0.6678 0.7442 -0.0132 +vn -0.9023 0.3945 0.1740 +vn -0.9357 -0.1135 0.3342 +vn 0.1024 0.5898 -0.8011 +vn 0.0693 -0.9878 0.1396 +vn -0.7542 0.5241 0.3957 +vn -0.7188 -0.6619 -0.2126 +vn -0.4426 -0.6528 0.6148 +vn -0.8191 0.1820 0.5441 +vn -0.7266 0.5383 0.4269 +vn -0.7892 0.4723 0.3925 +vn -0.8156 0.0956 0.5707 +vn -0.5263 -0.5050 0.6841 +vn -0.9398 0.1754 0.2933 +vn -0.9017 0.4102 0.1367 +vn -0.8105 0.5716 0.1279 +vn -0.6258 0.6235 0.4687 +vn -0.8549 0.4492 0.2597 +vn -0.9679 -0.0152 0.2509 +vn -0.1665 0.3309 -0.9289 +vn -0.4130 0.6031 -0.6825 +vn -0.8999 0.4361 0.0056 +vn -0.9219 0.2975 0.2482 +vn -0.7126 0.5035 0.4886 +vn -0.7097 0.7043 0.0164 +vn -0.6719 0.7391 -0.0485 +vn -0.7622 -0.6461 0.0408 +vn -0.9054 -0.0110 0.4244 +vn -0.3816 -0.0635 0.9222 +vn 0.1314 0.7573 0.6397 +vn -0.8226 0.1509 0.5482 +vn -0.8750 0.4102 -0.2572 +vn -0.9337 -0.2484 0.2580 +vn -0.0546 0.5312 -0.8455 +vn 0.0219 0.9604 -0.2778 +vn 0.0092 0.3861 -0.9224 +vn -0.6989 -0.5373 0.4721 +vn -0.7007 0.7110 0.0591 +vn -0.7465 0.2792 -0.6040 +vn -0.8077 -0.5020 0.3094 +vn -0.8180 -0.4635 0.3406 +vn -0.6321 0.0059 0.7749 +vn -0.7758 -0.1477 0.6134 +vn -0.6243 0.7811 -0.0138 +vn -0.9964 -0.0362 0.0770 +vn -0.9369 -0.2498 0.2447 +vn -0.0943 0.5011 -0.8602 +vn -0.9191 -0.3187 -0.2316 +vn -0.0562 -0.9904 0.1262 +vn -0.3307 0.9208 -0.2066 +vn -0.9768 0.0138 0.2136 +vn -0.9879 0.0877 0.1276 +vn -0.2689 -0.7295 0.6289 +vn -0.6155 0.5507 0.5638 +vn 0.4953 -0.6708 0.5520 +vn -0.6850 0.7248 0.0739 +vn -0.9084 0.4041 0.1074 +vn -0.8038 0.5793 0.1353 +vn -0.9969 0.0647 0.0454 +vn -0.6816 0.4543 0.5737 +vn -0.0632 0.8142 -0.5771 +vn -0.8376 -0.5460 -0.0178 +vn -0.8914 0.2508 0.3774 +vn -0.7817 -0.5671 0.2595 +vn -0.7484 -0.1452 0.6472 +vn 0.9980 -0.0068 -0.0626 +vn -0.7682 -0.3318 0.5475 +vn -0.8347 -0.0846 0.5442 +vn 0.5729 0.6151 0.5417 +vn -0.1006 0.7188 0.6879 +vn -0.0462 0.7485 0.6616 +vn -0.8563 0.2684 -0.4412 +vn -0.9770 -0.0238 -0.2117 +vn -0.9743 0.0365 -0.2222 +vn 0.1433 -0.7139 -0.6854 +vn -0.3988 0.5244 -0.7523 +vn -0.7399 -0.6718 0.0350 +vn -0.8806 -0.2222 0.4185 +vn -0.7303 0.6811 -0.0533 +vn 0.0766 0.8308 0.5513 +vn -0.8703 -0.1045 0.4812 +vn -0.0460 0.9016 -0.4301 +vn -0.9679 -0.1510 -0.2009 +vn -0.9299 0.3084 -0.2006 +vn 0.0685 0.4490 -0.8909 +vn -0.8174 -0.3518 0.4561 +vn -0.8383 0.2534 0.4828 +vn -0.8334 -0.4737 0.2849 +vn -0.7494 -0.3071 0.5866 +vn -0.6985 -0.4495 0.5569 +vn -0.5130 0.5586 -0.6517 +vn -0.9891 -0.1079 -0.1006 +vn -0.9494 0.2015 -0.2411 +vn -0.0968 0.9653 -0.2427 +vn -0.9441 0.0348 0.3279 +vn -0.5982 0.3010 0.7426 +vn -0.7654 -0.5886 0.2602 +vn -0.8397 0.2452 0.4846 +vn -0.8437 -0.3541 0.4035 +vn -0.6374 0.7558 0.1497 +vn -0.8881 0.3658 -0.2785 +vn -0.8156 0.5629 -0.1339 +vn -0.3092 -0.1422 -0.9403 +vn -0.7614 0.1764 0.6239 +vn -0.7837 -0.0882 0.6148 +vn -0.0634 0.7765 -0.6269 +vn 0.0659 0.3128 -0.9475 +vn -0.2453 -0.1839 -0.9518 +vn -0.9782 0.0476 -0.2023 +vn 0.0061 0.5378 -0.8431 +vn -0.8659 -0.4933 0.0827 +vn -0.6250 0.2648 0.7343 +vn -0.8017 0.5835 -0.1293 +vn -0.7381 0.1242 0.6632 +vn -0.6072 0.4370 0.6636 +vn 0.1395 0.1768 -0.9743 +vn 0.0209 0.3471 -0.9376 +vn -0.4555 0.3324 -0.8258 +vn -0.9929 -0.0564 -0.1048 +vn -0.9700 0.1876 -0.1546 +vn -0.3327 0.6273 -0.7041 +vn -0.0070 -0.9998 -0.0204 +vn -0.3577 0.3487 -0.8663 +vn -0.9047 -0.3469 0.2471 +vn -0.7035 0.2160 0.6770 +vn -0.8167 -0.4782 0.3231 +vn -0.1647 0.8417 -0.5142 +vn 0.6440 0.0330 0.7643 +vn -0.5391 0.6280 -0.5612 +vn -0.9319 -0.1902 0.3088 +vn -0.9512 -0.1745 -0.2543 +vn -0.9829 -0.0280 -0.1817 +vn 0.0020 -0.9996 -0.0276 +vn -0.5336 0.6459 -0.5459 +vn -0.4619 0.7913 -0.4006 +vn -0.3868 0.3629 -0.8478 +vn -0.3531 0.3578 -0.8645 +vn -0.3653 0.8168 -0.4466 +vn -0.1842 0.4174 -0.8899 +vn -0.2309 0.8945 -0.3829 +vn -0.0969 0.6145 0.7830 +vn -0.5888 0.7183 -0.3706 +vn -0.9982 -0.0577 0.0145 +vn -0.7779 -0.5787 -0.2449 +vn -0.6526 -0.7489 -0.1154 +vn -0.9554 -0.1905 -0.2256 +vn -0.3854 0.9093 -0.1570 +vn -0.3941 0.5488 -0.7372 +vn -0.4564 0.7346 -0.5020 +vn -0.8216 -0.3440 -0.4546 +vn -0.8648 -0.4874 0.1211 +vn -0.9674 0.2148 0.1343 +vn -0.9661 -0.1877 -0.1774 +vn -0.7364 -0.5118 0.4425 +vn -0.7249 0.6472 -0.2359 +vn -0.9288 -0.3609 -0.0843 +vn -0.8870 -0.4610 0.0271 +vn -0.9487 -0.2039 -0.2416 +vn -0.9996 -0.0028 -0.0288 +vn -0.9713 0.1938 -0.1382 +vn -0.9664 0.2153 -0.1408 +vn -0.9095 0.3685 -0.1921 +vn 0.4314 0.3765 -0.8198 +vn -0.2551 -0.1726 -0.9514 +vn -0.1187 0.9364 -0.3304 +vn -0.9765 -0.0337 -0.2129 +vn -0.8657 0.1057 0.4893 +vn -0.8435 0.1284 0.5215 +vn -0.6927 0.7120 0.1150 +vn -0.7309 0.5937 0.3367 +vn -0.3159 0.6313 -0.7083 +vn -0.6697 -0.7256 -0.1578 +vn -0.7165 -0.6901 -0.1016 +vn -0.9616 -0.2744 -0.0043 +vn -0.9842 -0.1768 -0.0014 +vn -0.9966 0.0729 0.0382 +vn -0.9656 0.1531 -0.2104 +vn -0.9435 0.2231 -0.2450 +vn -0.4423 0.1761 -0.8794 +vn -0.5433 0.4131 -0.7308 +vn -0.3605 0.6283 -0.6894 +vn -0.8540 0.1287 -0.5040 +vn -0.9483 -0.1209 0.2936 +vn -0.9629 0.0964 0.2520 +vn -0.8487 0.5289 0.0014 +vn -0.8220 0.5669 -0.0538 +vn -0.5801 0.8030 -0.1367 +vn -0.9949 0.1005 -0.0103 +vn -0.9545 -0.2755 0.1141 +vn -0.7670 -0.6201 -0.1648 +vn -0.6917 -0.7124 0.1184 +vn -0.7860 -0.6005 0.1470 +vn -0.8970 -0.4340 0.0835 +vn -0.9773 -0.2003 0.0692 +vn -0.9946 0.0756 0.0717 +vn -0.9230 0.3486 -0.1629 +vn 0.0701 0.8611 -0.5036 +vn -0.5902 0.2454 -0.7690 +vn -0.9775 0.1311 -0.1650 +vn -0.9667 0.1707 -0.1905 +vn -0.8878 0.2947 0.3536 +vn -0.5042 -0.8165 -0.2811 +vn 0.7872 0.5917 0.1740 +vn 0.5106 0.4681 -0.7212 +vn -0.7025 0.6559 -0.2763 +vn 0.0049 -0.9994 -0.0334 +vn -0.9745 -0.2240 0.0107 +vn -0.9630 -0.0010 0.2694 +vn -0.9759 0.1910 0.1052 +vn -0.9536 0.2831 0.1024 +vn -0.9354 0.3536 0.0054 +vn -0.4778 0.7965 -0.3706 +vn 0.2652 -0.9629 -0.0507 +vn -0.9952 0.0855 -0.0478 +vn -0.9663 0.1893 -0.1745 +vn -0.9432 0.2857 -0.1695 +vn -0.9118 0.3699 -0.1784 +vn -0.7310 0.6795 -0.0626 +vn -0.5749 0.8035 -0.1546 +vn -0.5525 0.8219 -0.1385 +vn -0.9897 -0.0266 -0.1405 +vn -0.9210 -0.3318 0.2040 +vn -0.9768 0.1764 0.1211 +vn -0.9951 -0.0419 -0.0901 +vn -0.9949 0.0292 -0.0963 +vn 0.0623 0.1619 -0.9848 +vn -0.9214 0.1604 -0.3540 +vn -0.9715 0.2327 -0.0446 +vn -0.9314 0.2619 -0.2528 +vn -0.9183 0.3692 -0.1431 +vn -0.9326 0.1166 0.3415 +vn -0.7834 -0.6115 0.1113 +vn -0.9336 -0.3059 0.1863 +vn -0.8337 -0.5218 0.1807 +vn -0.9709 0.0736 0.2278 +vn -0.8755 -0.4159 -0.2461 +vn -0.8633 -0.4383 -0.2503 +vn -0.9982 -0.0587 -0.0082 +vn -0.9487 0.2291 -0.2181 +vn 0.0787 0.4544 -0.8873 +vn -0.9624 0.2450 -0.1172 +vn -0.9615 0.2698 -0.0526 +vn -0.8748 0.4840 0.0211 +vn -0.7871 0.6059 0.1158 +vn -0.5905 0.7306 0.3428 +vn -0.8034 0.5308 0.2699 +vn -0.7664 0.1355 0.6279 +vn -0.4774 0.6590 0.5812 +vn -0.7253 0.6530 0.2181 +vn -0.9302 0.1258 0.3450 +vn -0.8250 -0.4743 0.3072 +vn -0.6604 -0.7499 0.0378 +vn -0.6944 -0.7105 0.1141 +vn -0.7800 -0.6152 0.1147 +vn -0.9483 -0.2918 0.1243 +vn -0.9784 0.0659 0.1960 +vn -0.9856 -0.0155 0.1684 +vn -0.9758 0.1732 0.1332 +vn -0.9419 0.3358 -0.0057 +vn -0.9914 0.1309 0.0043 +vn -0.9860 0.1613 0.0424 +vn -0.9765 0.2125 0.0355 +vn -0.9365 0.2782 -0.2135 +vn -0.9141 0.3115 -0.2598 +vn -0.9908 0.1311 -0.0334 +vn -0.8019 0.5543 0.2227 +vn -0.7924 0.5416 0.2807 +vn -0.9141 0.0678 0.3997 +vn -0.9763 -0.0622 0.2074 +vn -0.8722 -0.4269 -0.2389 +vn -0.9665 0.1777 -0.1850 +vn -0.6673 0.7253 -0.1693 +vn -0.0272 0.1246 -0.9918 +vn -0.5584 -0.4264 -0.7116 +vn -0.5725 0.8097 0.1289 +vn -0.5663 0.7400 0.3628 +vn -0.4567 0.8896 0.0030 +vn -0.4847 0.8747 0.0043 +vn -0.5178 0.4738 -0.7123 +vn -0.7622 -0.6026 0.2367 +vn -0.9313 -0.3075 0.1952 +vn -0.9859 0.1129 0.1233 +vn -0.9857 -0.0267 0.1666 +vn -0.9753 0.1815 0.1258 +vn -0.9429 0.2962 0.1522 +vn -0.9895 0.0543 0.1341 +vn -0.9456 0.3247 0.0183 +vn 0.0233 -0.1900 0.9815 +vn -0.7178 0.3186 0.6191 +vn -0.6070 0.7317 0.3100 +vn -0.7626 0.1728 0.6234 +vn -0.3393 0.9358 0.0962 +vn -0.7961 0.1793 0.5780 +vn -0.7499 -0.2091 0.6277 +vn -0.4883 -0.4124 -0.7691 +vn -0.4796 -0.2881 -0.8288 +vn -0.7068 -0.0866 -0.7021 +vn -0.7884 -0.5975 0.1462 +vn -0.8351 -0.5058 0.2163 +vn -0.8815 -0.3966 0.2562 +vn -0.8967 -0.4305 -0.1027 +vn -0.8990 -0.4173 -0.1326 +vn -0.9915 -0.1300 0.0101 +vn -0.0638 0.5459 -0.8354 +vn -0.1061 0.2704 -0.9569 +vn 0.0575 0.5375 -0.8413 +vn 0.1897 -0.2492 -0.9497 +vn -0.0826 0.2922 -0.9528 +vn -0.3905 0.7589 -0.5212 +vn 0.4170 0.7480 -0.5163 +vn -0.3584 0.7378 -0.5720 +vn -0.6048 0.6048 -0.5181 +vn 0.4365 -0.6932 -0.5736 +vn -0.4548 0.6905 -0.5625 +vn -0.0963 0.8865 -0.4526 +vn -0.4444 0.8904 -0.0984 +vn 0.2207 0.6189 -0.7538 +vn 0.1785 0.6354 -0.7513 +vn -0.6230 0.0189 -0.7820 +vn 0.2807 0.1531 -0.9475 +vn -0.4247 0.9047 -0.0331 +vn -0.3412 0.9103 -0.2343 +vn -0.0964 0.3222 -0.9417 +vn -0.3352 0.3493 -0.8750 +vn 0.8005 0.5428 -0.2542 +vn 0.8835 0.1038 -0.4567 +vn 0.0479 -0.9721 -0.2295 +vn 0.1282 0.7309 -0.6703 +vn 0.1227 0.5456 -0.8290 +vn -0.0333 0.3735 -0.9270 +vn -0.4819 0.4723 -0.7380 +vn 0.6006 -0.1019 -0.7930 +vn 0.7088 -0.4388 0.5523 +vn 0.3066 0.4303 -0.8490 +vn 0.5876 -0.1263 -0.7992 +vn 0.2460 0.2882 -0.9254 +vn 0.2970 0.4295 -0.8528 +vn -0.3228 -0.9465 -0.0047 +vn 0.1383 0.1599 -0.9774 +vn -0.2794 0.4729 -0.8357 +vn -0.0990 0.6477 -0.7555 +vn -0.3700 0.8344 -0.4085 +vn -0.3048 0.9076 -0.2889 +vn 0.0168 0.7629 -0.6463 +vn 0.0114 0.3321 -0.9432 +vn -0.0349 0.4627 -0.8859 +vn 0.0534 0.7191 -0.6929 +vn 0.2075 0.6876 -0.6958 +vn -0.0293 0.3805 -0.9243 +vn -0.0913 0.4143 -0.9055 +vn -0.1422 0.2902 -0.9463 +vn -0.1048 0.7689 -0.6307 +vn -0.1059 0.5339 -0.8389 +vn 0.0431 0.6441 -0.7637 +vn -0.2961 0.4235 -0.8562 +vn -0.2827 0.3557 -0.8908 +vn -0.5744 0.2313 -0.7852 +vn 0.2236 0.2281 -0.9476 +vn -0.4758 0.8569 -0.1981 +vn -0.2472 0.5819 0.7747 +vn -0.8225 0.5194 -0.2318 +vn 0.0616 -0.9975 0.0353 +vn -0.0154 0.6181 -0.7860 +vn -0.1713 0.2630 -0.9495 +vn 0.1779 0.2057 -0.9623 +vn -0.8995 0.0538 -0.4335 +vn -0.2806 -0.1314 0.9508 +vn 0.3885 0.4736 -0.7904 +vn -0.0619 0.2111 -0.9755 +vn 0.1061 -0.1440 -0.9839 +vn -0.5996 0.2559 -0.7583 +vn 0.3577 0.5923 -0.7220 +vn -0.4498 0.7184 -0.5307 +vn -0.3146 0.8796 -0.3567 +vn -0.1578 0.4808 -0.8625 +vn 0.0879 0.5323 -0.8420 +vn 0.3233 0.4247 -0.8456 +vn -0.2286 0.8984 -0.3750 +vn -0.4929 0.5489 -0.6751 +vn 0.0896 0.5112 -0.8548 +vn -0.0263 0.8112 -0.5841 +vn 0.0526 -0.9984 0.0202 +vn 0.0636 0.5962 -0.8003 +vn -0.2076 0.7858 -0.5826 +vn -0.4632 0.4726 -0.7498 +vn 0.8130 -0.5807 0.0411 +vn -0.2041 0.9251 -0.3202 +vn -0.3481 0.9063 -0.2397 +vn 0.1354 0.2481 -0.9592 +vn -0.1415 0.5602 -0.8162 +vn -0.0451 0.2842 -0.9577 +vn -0.0702 0.4928 -0.8673 +vn 0.3662 0.0105 -0.9305 +vn 0.0892 0.7943 -0.6010 +vn -0.3486 0.1106 -0.9307 +vn 0.3203 -0.1164 -0.9401 +vn -0.0711 0.9752 -0.2096 +vn -0.0621 0.9670 -0.2472 +vn -0.3217 0.5573 -0.7655 +vn -0.4462 0.6327 -0.6330 +vn -0.4790 0.7233 -0.4973 +vn -0.2981 0.7179 -0.6291 +vn 0.3336 0.4908 -0.8049 +vn 0.1372 0.9899 0.0346 +vn -0.8613 0.4819 0.1609 +vn 0.4036 0.6218 -0.6712 +vn -0.5431 0.7072 -0.4526 +vn 0.2703 0.5463 -0.7928 +vn -0.0023 0.6077 -0.7941 +vn -0.0502 0.7643 -0.6429 +vn -0.0750 0.7180 -0.6920 +vn 0.0351 -0.9992 0.0200 +vn -0.4865 0.4014 -0.7760 +vn -0.7330 0.1701 -0.6586 +vn -0.5044 0.5198 -0.6895 +vn 0.0336 -0.9994 -0.0030 +vn -0.5371 0.5531 -0.6369 +vn -0.9700 -0.1120 0.2157 +vn -0.4097 0.7907 -0.4550 +vn 0.0669 0.5078 -0.8589 +vn 0.2117 0.5748 -0.7904 +vn -0.1687 0.5611 -0.8104 +vn -0.3827 0.5828 -0.7169 +vn -0.7808 0.6228 0.0492 +vn -0.7862 0.2927 -0.5443 +vn -0.7543 0.3418 -0.5606 +vn 0.2298 0.1950 -0.9535 +vn -0.4666 0.2002 -0.8615 +vn -0.2232 0.3542 -0.9081 +vn -0.4840 0.8724 -0.0685 +vn -0.6401 0.5148 -0.5703 +vn -0.9093 0.3259 -0.2587 +vn -0.0404 0.4641 -0.8849 +vn -0.2543 0.9428 -0.2154 +vn -0.3404 0.8939 -0.2917 +vn -0.3865 0.8908 -0.2390 +vn -0.3993 0.5227 -0.7532 +vn 0.2077 0.0275 -0.9778 +vn -0.4581 0.4383 -0.7734 +vn -0.2636 0.7805 -0.5669 +vn -0.4945 0.4778 -0.7260 +vn -0.4103 0.6952 -0.5902 +vn -0.4245 0.6169 -0.6627 +vn -0.0306 -0.6243 -0.7806 +vn -0.0678 0.3145 -0.9468 +vn -0.0527 0.4451 -0.8939 +vn -0.3892 0.1472 -0.9093 +vn -0.3695 0.6565 -0.6576 +vn -0.5228 0.8077 -0.2724 +vn -0.8744 -0.1560 -0.4594 +vn -0.5192 -0.5214 -0.6772 +vn 0.7705 -0.2700 -0.5775 +vn 0.3221 0.0051 -0.9467 +vn -0.6160 0.7283 -0.3003 +vn -0.3905 0.5445 -0.7423 +vn -0.1361 -0.7529 -0.6439 +vn -0.3639 0.6975 -0.6174 +vn -0.6046 0.7936 -0.0684 +vn -0.5260 0.6488 -0.5498 +vn 0.3166 -0.5937 -0.7398 +vn -0.4792 0.4372 -0.7611 +vn 0.1044 0.1588 0.9818 +vn -0.3843 0.6768 -0.6279 +vn -0.3811 0.5653 -0.7315 +vn -0.3955 0.5455 -0.7389 +vn -0.0100 0.2910 -0.9567 +vn -0.0261 0.2589 -0.9656 +vn -0.3971 0.4364 -0.8074 +vn 0.0767 0.0077 -0.9970 +vn -0.1735 0.6056 -0.7766 +vn 0.0851 0.2679 -0.9597 +vn -0.7250 -0.6813 0.1013 +vn 0.1375 0.9689 -0.2059 +vn -0.4691 0.5934 -0.6541 +vn -0.1689 0.9370 -0.3058 +vn -0.4589 0.5835 -0.6700 +vn 0.4516 -0.8899 0.0646 +vn -0.4712 0.5510 -0.6888 +vn 0.5369 -0.1203 -0.8351 +vn -0.1688 0.4729 -0.8648 +vn -0.0836 0.8025 -0.5908 +vn -0.5909 -0.6564 -0.4690 +vn -0.4725 0.8279 -0.3023 +vn -0.3389 0.3325 -0.8801 +vn 0.0718 0.8085 -0.5841 +vn -0.3376 0.8963 -0.2875 +vn -0.2928 0.2084 -0.9332 +vn 0.4105 -0.2994 -0.8613 +vn 0.2122 0.3056 -0.9282 +vn -0.3369 0.8018 -0.4936 +vn -0.3194 0.7978 -0.5114 +vn -0.2691 0.6376 -0.7219 +vn 0.9927 -0.0621 0.1035 +vn -0.3609 0.0073 -0.9326 +vn -0.2460 0.7942 -0.5557 +vn 0.3624 0.3736 -0.8539 +vn -0.4498 0.4368 -0.7790 +vn -0.5353 0.7155 -0.4489 +vn -0.6015 0.6226 -0.5006 +vn -0.6021 0.5713 -0.5577 +vn 0.3596 0.1595 -0.9194 +vn -0.1872 0.9375 0.2933 +vn -0.7194 0.4831 -0.4990 +vn -0.1902 0.9233 -0.3336 +vn 0.0909 0.8003 -0.5927 +vn -0.3753 -0.2032 -0.9044 +vn -0.1001 0.6458 -0.7569 +vn -0.6606 0.6562 -0.3648 +vn -0.4105 0.7934 -0.4493 +vn -0.0621 0.4800 -0.8751 +vn -0.4626 0.7743 -0.4318 +vn 0.8444 0.4014 -0.3547 +vn 0.1931 0.8285 -0.5256 +vn -0.1790 0.7793 -0.6005 +vn 0.0306 0.2700 -0.9624 +vn -0.2368 0.2450 -0.9402 +vn -0.1626 0.4646 -0.8705 +vn -0.3493 0.6418 -0.6827 +vn -0.7018 0.6547 -0.2808 +vn -0.6701 0.6520 -0.3546 +vn 0.6664 0.5953 -0.4489 +vn -0.0162 0.6730 -0.7395 +vn -0.2287 0.7895 -0.5695 +vn 0.1491 0.3551 -0.9228 +vn 0.1448 0.3138 -0.9384 +vn 0.1402 0.3075 -0.9411 +vn -0.5690 0.6103 -0.5511 +vn -0.5688 0.8193 0.0725 +vn 0.5114 0.4627 -0.7241 +vn -0.0118 0.1889 -0.9819 +vn 0.0628 0.3735 -0.9255 +vn -0.4872 0.7590 -0.4319 +vn -0.5096 0.7260 -0.4618 +vn -0.5693 0.4196 -0.7070 +vn -0.3006 0.6648 -0.6839 +vn -0.2381 0.8408 -0.4861 +vn -0.4353 0.5161 -0.7377 +vn -0.5754 0.6068 -0.5484 +vn -0.4598 0.7925 -0.4006 +vn 0.3938 0.3783 -0.8377 +vn 0.3895 0.3704 -0.8432 +vn -0.4456 0.7492 -0.4900 +vn -0.4041 0.4478 -0.7976 +vn -0.3434 0.8267 -0.4456 +vn -0.8051 0.5888 -0.0709 +vn 0.6277 0.4175 -0.6570 +vn -0.3257 0.8033 -0.4987 +vn 0.0923 0.5383 -0.8377 +vn -0.2976 0.8409 -0.4521 +vn -0.4827 0.6832 -0.5479 +vn -0.3988 0.9013 -0.1694 +vn -0.4165 0.5153 -0.7490 +vn -0.4828 0.5306 -0.6967 +vn 0.0839 0.3129 -0.9461 +vn -0.4083 0.8976 -0.1660 +vn -0.2023 0.9135 -0.3529 +vn 0.0518 0.2725 -0.9608 +vn 0.3094 0.1751 -0.9347 +vn -0.5720 0.6805 -0.4579 +vn 0.6528 0.3996 -0.6436 +vn 0.2274 0.8462 -0.4818 +vn -0.5113 0.4383 -0.7392 +vn 0.2245 0.6862 -0.6919 +vn -0.2749 0.8342 -0.4781 +vn -0.3662 0.7427 -0.5607 +vn -0.3869 0.5960 -0.7036 +vn -0.4679 0.3518 -0.8108 +vn -0.3431 0.8255 -0.4482 +vn -0.3659 0.9024 -0.2274 +vn -0.0465 0.9021 -0.4289 +vn 0.1428 0.1095 -0.9837 +vn -0.8255 0.5581 -0.0845 +vn -0.0400 0.9567 -0.2882 +vn -0.0788 0.9234 -0.3756 +vn -0.2681 0.8365 -0.4779 +vn -0.4374 0.4385 -0.7851 +vn -0.4324 0.4163 -0.7998 +vn -0.0287 -0.5429 0.8393 +vn -0.4479 0.5376 -0.7144 +vn 0.4247 0.5740 -0.7001 +vn -0.3053 0.8252 -0.4752 +vn -0.4554 -0.1835 -0.8712 +vn 0.1358 0.7439 -0.6543 +vn -0.5029 0.1995 -0.8410 +vn -0.3884 0.6736 -0.6288 +vn 0.1405 -0.3052 0.9419 +vn -0.5561 0.0854 -0.8267 +vn 0.0144 0.9577 -0.2874 +vn -0.2875 0.5968 -0.7491 +vn 0.2390 -0.9017 -0.3602 +vn 0.7474 -0.2036 0.6324 +vn -0.2952 0.3771 -0.8779 +vn 0.1170 0.4582 -0.8811 +vn -0.5477 0.5528 -0.6280 +vn -0.3157 0.6623 -0.6795 +vn -0.3799 0.5325 -0.7564 +vn -0.3061 0.4241 -0.8523 +vn -0.4772 0.6627 -0.5772 +vn -0.1978 0.8378 -0.5089 +vn 0.1166 0.5213 -0.8454 +vn 0.1653 0.8033 -0.5722 +vn 0.2553 0.7613 -0.5960 +vn 0.4634 0.7344 0.4959 +vn -0.1125 0.8026 -0.5859 +vn -0.5368 0.4488 -0.7144 +vn -0.1043 0.2868 -0.9523 +vn -0.2804 0.7982 -0.5332 +vn -0.2784 0.6174 -0.7357 +vn -0.1077 0.4577 -0.8826 +vn 0.1993 0.5331 -0.8223 +vn -0.4208 0.8884 -0.1834 +vn -0.1664 0.3934 -0.9042 +vn 0.1432 0.2987 -0.9435 +vn -0.5474 -0.7746 0.3168 +vn -0.3188 0.7950 -0.5161 +vn 0.2392 0.4700 -0.8497 +vn -0.2103 0.2479 -0.9457 +vn -0.0477 0.7362 -0.6751 +vn -0.5111 0.8181 -0.2637 +vn -0.6223 0.7787 0.0792 +vn 0.2281 0.4185 -0.8791 +vn -0.8222 0.5674 -0.0451 +vn -0.1994 0.7661 -0.6110 +vn -0.3629 0.4155 -0.8340 +vn -0.2372 0.8035 -0.5460 +vn 0.2361 -0.8304 -0.5047 +vn -0.1058 0.7325 -0.6725 +vn -0.4679 0.5117 -0.7205 +vn -0.4735 0.5699 -0.6716 +vn -0.5464 0.4877 -0.6809 +vn -0.5416 0.4071 -0.7355 +vn -0.3385 0.8429 -0.4183 +vn -0.3513 0.9110 -0.2160 +vn -0.1000 0.3832 -0.9182 +vn -0.3373 0.7890 -0.5136 +vn -0.9115 0.3043 -0.2765 +vn 0.0777 0.0788 -0.9939 +vn -0.1742 0.3088 -0.9350 +vn 0.0525 0.9167 -0.3962 +vn 0.0376 0.9010 -0.4323 +vn -0.0257 0.6880 -0.7253 +vn -0.1284 0.6786 -0.7232 +vn -0.1337 0.4791 -0.8675 +vn -0.2196 0.6675 -0.7115 +vn -0.2161 0.6823 -0.6984 +vn -0.4381 0.6269 -0.6442 +vn 0.0090 0.6879 -0.7257 +vn -0.7340 0.6447 -0.2137 +vn -0.3892 0.5899 -0.7075 +vn 0.4034 0.5822 -0.7059 +vn -0.7312 0.2043 -0.6508 +vn 0.0338 0.9006 -0.4333 +vn -0.3924 0.5679 -0.7235 +vn -0.0869 0.5492 -0.8311 +vn -0.1730 0.8650 -0.4711 +vn -0.3817 0.6199 -0.6856 +vn 0.2069 -0.9440 -0.2568 +vn -0.6389 0.7388 0.2142 +vn -0.8079 -0.5348 -0.2474 +vn 0.0965 0.8318 -0.5466 +vn 0.0320 0.7403 -0.6715 +vn -0.4380 0.3927 -0.8086 +vn -0.8535 0.4221 -0.3054 +vn 0.1275 0.9560 0.2643 +vn 0.0152 0.1537 -0.9880 +vn -0.1913 0.6489 -0.7364 +vn -0.5810 0.2136 -0.7854 +vn -0.5078 0.3211 -0.7994 +vn -0.9067 0.1795 -0.3816 +vn -0.4338 0.8064 0.4019 +vn -0.8963 0.3437 -0.2801 +vn -0.7819 0.1744 -0.5985 +vn -0.8233 0.1334 -0.5517 +vn -0.8176 0.4334 -0.3790 +vn -0.9572 0.1623 -0.2397 +vn -0.7103 0.5350 -0.4575 +vn -0.8028 0.3984 -0.4437 +vn -0.7977 -0.1245 -0.5900 +vn 0.2964 0.8521 0.4313 +vn -0.3442 -0.5833 -0.7357 +vn -0.7994 -0.0881 -0.5943 +vn -0.8088 -0.1077 -0.5782 +vn 0.1844 -0.2309 -0.9554 +vn -0.8379 0.0674 -0.5416 +vn 0.0095 -0.1603 -0.9870 +vn 0.0100 -0.1608 -0.9869 +vn -0.5985 0.2689 -0.7547 +vn -0.8391 0.1988 -0.5063 +vn -0.1767 -0.0746 -0.9814 +vn -0.3355 0.1251 -0.9337 +vn -0.6984 0.4668 -0.5426 +vn -0.0324 -0.3474 -0.9372 +vn -0.0036 -0.4124 -0.9110 +vn -0.3419 -0.6050 -0.7191 +vn 0.1580 -0.0571 -0.9858 +vn -0.8381 -0.3335 -0.4318 +vn -0.7099 -0.3947 -0.5834 +vn -0.6202 -0.7004 -0.3533 +vn -0.1496 -0.8891 -0.4325 +vn -0.9955 -0.0397 0.0859 +vn -0.1859 -0.1887 -0.9643 +vn -0.9314 -0.1848 -0.3137 +vn -0.9271 -0.1334 -0.3502 +vn -0.7796 0.0986 -0.6184 +vn -0.6938 -0.6467 -0.3169 +vn -0.9134 0.0547 -0.4034 +vn -0.7562 -0.6080 -0.2421 +vn -0.7261 -0.6636 -0.1797 +vn -0.0479 -0.6759 -0.7354 +vn -0.2664 -0.4617 -0.8461 +vn -0.1660 -0.5166 -0.8400 +vn -0.5992 0.4102 -0.6875 +vn -0.6734 -0.7157 -0.1852 +vn -0.8698 -0.4311 -0.2400 +vn -0.6929 0.2366 -0.6811 +vn -0.7921 0.2693 -0.5477 +vn -0.5348 0.4962 -0.6839 +vn -0.8786 -0.2952 -0.3753 +vn -0.4303 -0.1679 -0.8869 +vn -0.4232 -0.1347 -0.8960 +vn -0.5070 0.1553 -0.8478 +vn -0.4858 0.1182 -0.8660 +vn -0.1190 -0.9032 -0.4123 +vn -0.0589 -0.8865 -0.4590 +vn -0.4116 -0.5694 -0.7116 +vn -0.5390 -0.3722 -0.7556 +vn -0.0270 -0.9973 -0.0678 +vn -0.9375 0.2884 -0.1946 +vn -0.6476 0.4836 -0.5889 +vn -0.4981 0.4471 -0.7430 +vn -0.2833 0.2704 -0.9201 +vn -0.6373 -0.0088 -0.7706 +vn -0.7128 0.1641 -0.6819 +vn -0.7208 0.1114 -0.6841 +vn -0.8289 -0.3382 -0.4457 +vn -0.8541 -0.2636 -0.4483 +vn -0.6007 0.0414 -0.7984 +vn -0.3024 0.1039 -0.9475 +vn -0.7003 0.7077 -0.0936 +vn -0.7861 -0.0162 -0.6179 +vn -0.6333 -0.0891 -0.7688 +vn -0.0527 -0.6234 -0.7801 +vn -0.8879 0.1253 -0.4427 +vn -0.6211 0.2740 -0.7343 +vn -0.8367 -0.3375 -0.4312 +vn -0.4927 -0.4283 -0.7575 +vn -0.2465 0.2458 -0.9374 +vn -0.2360 0.0690 -0.9693 +vn -0.8831 0.1490 -0.4450 +vn -0.2506 -0.5241 -0.8139 +vn -0.2773 -0.4830 -0.8305 +vn -0.7501 -0.6423 0.1574 +vn -0.8103 0.4017 -0.4267 +vn -0.4214 0.0240 -0.9066 +vn -0.4529 -0.1511 -0.8787 +vn -0.7561 0.1953 -0.6247 +vn -0.7865 0.2851 -0.5479 +vn -0.7372 0.0878 -0.6700 +vn -0.1770 0.1588 -0.9713 +vn -0.7455 -0.0068 -0.6665 +vn -0.7519 0.0684 -0.6557 +vn -0.5112 -0.3349 -0.7915 +vn -0.9612 -0.0408 -0.2728 +vn -0.9477 -0.2663 -0.1758 +vn -0.8304 0.0187 -0.5568 +vn -0.4864 -0.1440 -0.8618 +vn -0.4384 0.1595 -0.8845 +vn -0.3676 -0.3207 -0.8730 +vn -0.6824 0.3690 -0.6310 +vn -0.3813 -0.5166 -0.7667 +vn -0.7144 0.2528 -0.6524 +vn 0.1810 0.0202 -0.9833 +vn -0.4349 0.2886 -0.8530 +vn -0.4624 0.0563 -0.8849 +vn -0.4752 -0.0381 -0.8791 +vn -0.7852 -0.1140 -0.6087 +vn -0.4382 0.1881 -0.8790 +vn -0.3797 -0.4282 -0.8201 +vn 0.0506 -0.8878 -0.4573 +vn -0.5393 0.4411 -0.7173 +vn -0.5061 -0.1079 -0.8557 +vn -0.8412 0.0486 -0.5385 +vn -0.3101 -0.4575 -0.8334 +vn -0.4732 -0.1015 -0.8751 +vn -0.7983 0.0084 -0.6022 +vn -0.4515 -0.3815 -0.8066 +vn -0.0937 -0.0183 -0.9954 +vn -0.5058 0.2011 -0.8389 +vn -0.2882 -0.3012 -0.9090 +vn -0.9836 -0.1684 0.0643 +vn -0.7819 0.1031 -0.6148 +vn 0.0616 0.1618 -0.9849 +vn -0.7091 -0.4182 -0.5677 +vn -0.6056 -0.1066 -0.7886 +vn -0.6436 -0.4754 -0.5998 +vn -0.5180 -0.6903 -0.5051 +vn -0.8675 0.2760 -0.4138 +vn -0.4054 0.3498 -0.8446 +vn -0.9658 -0.0584 -0.2528 +vn -0.6153 -0.7833 0.0891 +vn -0.3612 -0.4355 -0.8245 +vn -0.4871 -0.4727 -0.7344 +vn 0.8478 0.4985 -0.1810 +vn -0.9074 -0.3838 -0.1710 +vn -0.6973 -0.6697 -0.2555 +vn -0.4381 -0.6097 -0.6606 +vn 0.4398 -0.1507 0.8854 +vn -0.6819 -0.1854 -0.7075 +vn -0.5164 -0.7169 -0.4683 +vn -0.5447 -0.7193 -0.4313 +vn -0.5991 -0.1235 -0.7911 +vn 0.2005 0.2522 -0.9467 +vn 0.0818 0.0098 -0.9966 +vn 0.2294 -0.9481 0.2201 +vn -0.6970 -0.2606 -0.6680 +vn 0.1099 -0.9938 -0.0174 +vn -0.8004 -0.1207 -0.5872 +vn -0.4264 -0.8632 -0.2705 +vn -0.6252 -0.3689 -0.6878 +vn 0.1063 0.0523 -0.9930 +vn -0.5796 -0.0760 -0.8113 +vn -0.8080 -0.2979 -0.5083 +vn -0.6263 -0.0286 -0.7791 +vn -0.0905 -0.6848 -0.7231 +vn -0.3161 -0.4656 -0.8266 +vn -0.8787 -0.2251 -0.4210 +vn 0.7985 -0.1762 -0.5756 +vn -0.7905 -0.2289 -0.5681 +vn -0.3938 0.2468 -0.8854 +vn -0.4399 0.0812 -0.8944 +vn -0.8689 -0.2317 -0.4374 +vn -0.0074 -0.4454 -0.8953 +vn -0.3532 0.3354 -0.8734 +vn -0.6033 -0.0968 -0.7916 +vn 0.2677 -0.5577 -0.7857 +vn 0.0745 -0.9919 0.1031 +vn 0.0833 0.0999 -0.9915 +vn 0.0381 0.1270 -0.9912 +vn -0.6245 -0.3686 -0.6885 +vn -0.4882 0.1034 -0.8666 +vn -0.6908 -0.1233 -0.7125 +vn 0.2564 -0.2617 -0.9305 +vn -0.0364 0.0657 -0.9972 +vn -0.5064 0.2741 -0.8175 +vn -0.8234 0.3513 -0.4457 +vn -0.8365 -0.3378 -0.4315 +vn -0.8342 0.1547 0.5293 +vn 0.0762 -0.4982 -0.8637 +vn 0.0829 -0.1575 -0.9840 +vn -0.8914 0.4315 -0.1385 +vn 0.3141 -0.1156 -0.9423 +vn 0.1249 -0.0800 -0.9889 +vn -0.2809 0.3955 -0.8744 +vn -0.5462 0.1869 -0.8165 +vn -0.4775 0.1373 -0.8678 +vn -0.9986 -0.0210 -0.0476 +vn -0.6648 -0.3423 -0.6640 +vn -0.7627 -0.3067 -0.5694 +vn 0.1882 -0.3994 -0.8973 +vn -0.0035 -0.0260 -0.9997 +vn -0.0785 0.0773 -0.9939 +vn -0.7337 -0.5570 -0.3891 +vn -0.4964 -0.0351 -0.8674 +vn -0.5671 -0.2329 -0.7900 +vn 0.0206 -0.5793 -0.8149 +vn 0.2060 -0.4098 -0.8886 +vn 0.0993 -0.1306 -0.9864 +vn -0.0126 0.0878 -0.9961 +vn 0.0328 -0.1881 -0.9816 +vn 0.0336 -0.1887 -0.9815 +vn 0.0300 -0.0204 -0.9993 +vn -0.0199 0.0048 -0.9998 +vn -0.0956 0.1541 -0.9834 +vn -0.1107 0.0627 -0.9919 +vn -0.4298 -0.2528 -0.8668 +vn -0.0087 -0.9991 0.0427 +vn -0.7184 -0.3661 -0.5915 +vn -0.5363 -0.7244 -0.4332 +vn -0.6634 0.2198 -0.7153 +vn -0.6940 0.4287 -0.5784 +vn -0.1598 -0.5842 -0.7957 +vn -0.2025 -0.0777 -0.9762 +vn -0.0701 0.0426 -0.9966 +vn -0.3595 0.9249 0.1236 +vn -0.5708 -0.8030 0.1713 +vn -0.7156 0.3193 -0.6212 +vn -0.4688 -0.5914 -0.6560 +vn -0.8156 0.5613 0.1405 +vn -0.8899 0.0627 -0.4519 +vn -0.3370 -0.5771 -0.7439 +vn -0.1666 0.0384 -0.9853 +vn -0.1787 0.0637 -0.9818 +vn -0.7350 -0.1331 -0.6649 +vn -0.5289 -0.2569 -0.8089 +vn -0.4029 0.2042 -0.8922 +vn -0.6495 0.3947 -0.6499 +vn -0.8801 0.2604 -0.3970 +vn -0.1560 -0.2029 -0.9667 +vn -0.1227 0.0721 -0.9898 +vn 0.1261 0.0880 -0.9881 +vn -0.6940 0.0602 -0.7174 +vn -0.5808 -0.4359 -0.6875 +vn -0.5229 -0.3220 -0.7892 +vn -0.8085 -0.3081 -0.5015 +vn -0.4219 -0.7459 0.5154 +vn -0.4537 -0.7984 -0.3960 +vn -0.1839 -0.4424 -0.8778 +vn -0.5959 -0.3947 -0.6994 +vn -0.4577 -0.2602 -0.8502 +vn -0.4747 -0.3146 -0.8220 +vn -0.1890 -0.3458 -0.9191 +vn -0.0758 0.0055 -0.9971 +vn 0.0386 -0.3883 -0.9207 +vn -0.1479 -0.1842 -0.9717 +vn -0.1980 -0.1171 -0.9732 +vn -0.1233 0.0190 -0.9922 +vn -0.8499 0.4973 -0.1743 +vn -0.0586 0.2425 -0.9684 +vn -0.3828 0.2815 -0.8799 +vn -0.5088 0.3618 -0.7812 +vn -0.9051 -0.3895 -0.1705 +vn -0.5804 -0.7547 0.3059 +vn -0.9003 0.1184 -0.4189 +vn -0.5798 -0.5637 -0.5882 +vn -0.6392 0.1183 -0.7599 +vn 0.0036 -0.3854 -0.9228 +vn -0.2094 -0.4400 -0.8732 +vn -0.2999 0.0124 -0.9539 +vn -0.1457 0.0712 -0.9868 +vn -0.6572 -0.0602 -0.7513 +vn -0.6309 0.3261 -0.7040 +vn -0.6393 0.0452 -0.7676 +vn -0.8175 -0.4124 -0.4020 +vn 0.0184 -0.3704 -0.9287 +vn -0.4486 -0.2830 -0.8478 +vn -0.1596 -0.1389 -0.9774 +vn -0.1688 0.1143 -0.9790 +vn -0.0802 -0.0020 -0.9968 +vn -0.0695 0.1109 -0.9914 +vn -0.1296 0.0283 -0.9912 +vn -0.8516 -0.1079 -0.5130 +vn -0.6146 0.7446 -0.2605 +vn -0.6844 0.3294 -0.6505 +vn 0.0105 -0.9993 -0.0361 +vn -0.2921 -0.3463 -0.8915 +vn -0.3433 -0.4976 -0.7965 +vn -0.2179 -0.2180 -0.9513 +vn -0.2472 -0.0359 -0.9683 +vn -0.2708 -0.2084 -0.9398 +vn 0.1121 -0.7753 -0.6216 +vn -0.9268 0.1859 0.3264 +vn 0.1214 0.0930 -0.9882 +vn -0.4388 -0.0458 -0.8974 +vn -0.2519 -0.5746 -0.7787 +vn -0.1589 -0.3583 -0.9200 +vn -0.2347 -0.0637 -0.9700 +vn 0.0205 -0.7266 -0.6867 +vn -0.2580 -0.0556 -0.9645 +vn -0.1418 0.0864 -0.9861 +vn -0.1026 -0.0387 -0.9940 +vn -0.5283 0.4398 -0.7263 +vn -0.6181 0.1206 -0.7768 +vn -0.6914 0.3147 -0.6503 +vn 0.5019 -0.8414 -0.2005 +vn -0.4120 -0.4239 -0.8066 +vn -0.1959 -0.0803 -0.9773 +vn -0.4436 -0.3486 -0.8256 +vn -0.5209 0.3735 -0.7675 +vn -0.9376 0.2225 -0.2671 +vn -0.3329 -0.1542 -0.9303 +vn -0.4989 -0.2950 -0.8149 +vn -0.2404 0.0326 -0.9701 +vn -0.2459 -0.3823 -0.8907 +vn -0.2639 -0.3343 -0.9048 +vn 0.1306 -0.3515 -0.9270 +vn -0.1980 0.0796 -0.9770 +vn 0.0794 0.0001 -0.9968 +vn -0.0995 0.1271 -0.9869 +vn -0.1342 0.0277 -0.9906 +vn -0.6578 0.0673 -0.7502 +vn -0.5562 -0.0810 -0.8271 +vn -0.7251 0.0603 -0.6860 +vn 0.1433 -0.3648 0.9200 +vn -0.8168 0.2572 -0.5165 +vn -0.3513 0.1946 -0.9158 +vn 0.0536 -0.6885 -0.7232 +vn -0.9055 0.2661 -0.3307 +vn -0.1399 0.2356 -0.9617 +vn -0.3421 -0.3580 -0.8688 +vn -0.3686 -0.1542 -0.9167 +vn -0.0433 0.0524 -0.9977 +vn -0.0559 0.1538 -0.9865 +vn -0.1483 0.0530 -0.9875 +vn 0.0168 -0.9996 0.0214 +vn -0.8526 -0.1220 -0.5081 +vn -0.8141 0.0088 -0.5807 +vn -0.6893 -0.3058 -0.6567 +vn -0.3477 0.1077 -0.9314 +vn -0.1585 -0.8804 -0.4470 +vn -0.7379 0.1427 -0.6596 +vn -0.8376 0.3311 -0.4345 +vn -0.7142 -0.2932 -0.6356 +vn -0.8236 0.3142 -0.4721 +vn -0.3471 -0.0150 -0.9377 +vn -0.3866 -0.5391 -0.7483 +vn -0.3370 -0.3631 -0.8687 +vn -0.3353 -0.0499 -0.9408 +vn -0.2285 -0.1572 -0.9608 +vn -0.2546 0.0237 -0.9667 +vn -0.2787 -0.0026 -0.9604 +vn -0.7466 0.3278 -0.5789 +vn -0.7414 0.2324 -0.6296 +vn -0.8003 0.3296 -0.5009 +vn -0.4223 0.2846 -0.8606 +vn -0.5256 0.4740 -0.7064 +vn -0.7258 0.2130 -0.6541 +vn -0.2052 -0.4619 -0.8629 +vn -0.3338 -0.3317 -0.8823 +vn -0.6334 -0.3059 -0.7108 +vn -0.4015 0.1252 -0.9073 +vn -0.4051 0.0796 -0.9108 +vn -0.9169 0.0307 -0.3978 +vn -0.1955 -0.9752 -0.1038 +vn 0.1588 -0.4735 -0.8663 +vn -0.7698 -0.2436 -0.5900 +vn -0.3533 -0.0241 -0.9352 +vn -0.1246 -0.2842 -0.9506 +vn -0.3017 0.0448 -0.9524 +vn -0.2004 0.1564 -0.9671 +vn -0.7404 -0.2024 -0.6410 +vn -0.2115 0.2752 -0.9378 +vn -0.7336 -0.1957 -0.6508 +vn -0.7401 -0.2798 -0.6116 +vn -0.1446 -0.2370 -0.9607 +vn -0.3241 -0.3591 -0.8752 +vn -0.3457 -0.2343 -0.9086 +vn -0.3691 -0.0016 -0.9294 +vn -0.2018 0.1778 -0.9631 +vn -0.9541 0.1876 -0.2333 +vn -0.3887 0.2460 -0.8879 +vn -0.6851 -0.2748 -0.6746 +vn -0.6524 -0.0697 -0.7546 +vn -0.9646 -0.2554 -0.0656 +vn -0.2388 -0.2465 -0.9392 +vn -0.2779 0.0106 -0.9606 +vn -0.3777 -0.3567 -0.8545 +vn -0.2200 -0.2022 -0.9543 +vn -0.1311 -0.2920 -0.9474 +vn -0.4896 0.1197 -0.8637 +vn -0.4462 0.1511 -0.8821 +vn -0.5061 0.5699 -0.6474 +vn -0.9361 -0.0537 -0.3476 +vn -0.9960 -0.0604 0.0659 +vn -0.4268 -0.3493 -0.8341 +vn -0.2246 -0.7294 -0.6462 +vn -0.2724 0.0244 -0.9619 +vn -0.2658 0.0620 -0.9620 +vn -0.2482 -0.7134 -0.6553 +vn -0.2693 -0.6701 -0.6917 +vn -0.2725 -0.2724 -0.9228 +vn -0.2412 -0.2256 -0.9439 +vn -0.3066 -0.1484 -0.9402 +vn -0.2757 0.0213 -0.9610 +vn -0.3364 -0.4476 -0.8286 +vn -0.8091 0.0528 -0.5853 +vn -0.3839 -0.1436 -0.9121 +vn -0.2248 -0.7005 -0.6773 +vn -0.3243 -0.3550 -0.8768 +vn -0.3653 -0.3626 -0.8574 +vn -0.3412 -0.2392 -0.9090 +vn 0.1081 -0.0858 -0.9904 +vn -0.9179 0.0325 -0.3954 +vn 0.0243 -0.5815 -0.8132 +vn -0.3535 0.1634 -0.9210 +vn -0.6250 -0.3966 -0.6723 +vn -0.6966 0.1868 -0.6927 +vn -0.3577 -0.5367 -0.7642 +vn -0.4012 -0.2427 -0.8832 +vn -0.3388 0.1437 -0.9298 +vn -0.2766 -0.2282 -0.9335 +vn -0.3470 -0.0544 -0.9363 +vn -0.1664 0.1709 -0.9711 +vn -0.2924 0.3395 -0.8940 +vn -0.1184 0.1210 -0.9856 +vn -0.3679 0.3580 -0.8582 +vn -0.3916 -0.0107 -0.9201 +vn -0.3899 -0.0022 -0.9209 +vn -0.3830 -0.2992 -0.8739 +vn -0.2297 -0.3160 -0.9206 +vn -0.2636 -0.1283 -0.9561 +vn -0.1196 0.2700 -0.9554 +vn -0.7238 -0.2370 -0.6480 +vn -0.7229 -0.3475 -0.5973 +vn -0.9779 0.1180 -0.1725 +vn -0.3572 -0.4444 -0.8216 +vn -0.3847 -0.1553 -0.9099 +vn -0.3155 -0.0007 -0.9489 +vn -0.3640 -0.2833 -0.8873 +vn -0.2044 -0.1126 -0.9724 +vn -0.2113 -0.0640 -0.9753 +vn -0.2726 0.1685 -0.9473 +vn -0.9291 0.1480 -0.3388 +vn -0.3779 -0.2482 -0.8920 +vn -0.9016 0.1926 -0.3872 +vn -0.2886 -0.1863 -0.9392 +vn -0.6982 0.3493 -0.6249 +vn -0.6306 0.4765 -0.6126 +vn -0.8795 -0.0799 -0.4692 +vn -0.8727 -0.0420 -0.4864 +vn -0.6373 0.1495 -0.7560 +vn -0.3988 -0.1053 -0.9110 +vn -0.2802 -0.7234 -0.6311 +vn -0.4574 -0.3403 -0.8216 +vn -0.3053 -0.3354 -0.8912 +vn -0.2985 -0.2254 -0.9274 +vn -0.2816 -0.2221 -0.9335 +vn -0.3071 -0.1968 -0.9311 +vn 0.6103 -0.5350 -0.5842 +vn -0.3288 0.3453 -0.8790 +vn -0.9245 -0.1899 -0.3306 +vn 0.1044 -0.9732 0.2047 +vn -0.7731 -0.3201 -0.5477 +vn -0.2060 -0.7936 -0.5725 +vn -0.3639 -0.5909 -0.7200 +vn -0.2458 -0.7069 -0.6633 +vn -0.3753 -0.4098 -0.8314 +vn -0.3386 -0.1800 -0.9235 +vn -0.3616 0.1055 -0.9264 +vn -0.2165 0.2639 -0.9399 +vn -0.6463 0.2398 -0.7244 +vn -0.5139 0.2543 -0.8193 +vn -0.3133 -0.2584 -0.9138 +vn -0.3047 -0.1736 -0.9365 +vn -0.3049 0.1779 -0.9356 +vn -0.3329 0.3385 -0.8801 +vn -0.8361 0.0239 -0.5480 +vn -0.9136 -0.1102 -0.3914 +vn -0.3394 -0.4606 -0.8202 +vn -0.3152 -0.2622 -0.9121 +vn -0.4659 -0.3741 -0.8019 +vn -0.4320 -0.1245 -0.8932 +vn -0.4049 -0.0232 -0.9141 +vn -0.8706 -0.2385 -0.4302 +vn -0.5529 0.1436 -0.8208 +vn -0.9105 -0.3647 -0.1950 +vn -0.8132 -0.2648 -0.5182 +vn -0.7230 0.4513 -0.5231 +vn -0.9812 0.1678 0.0956 +vn -0.6846 0.5254 -0.5052 +vn -0.4973 -0.2991 -0.8144 +vn -0.3749 -0.0871 -0.9230 +vn -0.1961 -0.1690 -0.9659 +vn -0.1503 -0.2608 -0.9536 +vn -0.3396 -0.1853 -0.9222 +vn -0.1206 -0.8052 -0.5806 +vn -0.9142 0.1657 -0.3698 +vn -0.6845 0.1764 -0.7073 +vn -0.3809 -0.2636 -0.8862 +vn -0.4122 -0.0356 -0.9104 +vn -0.3226 -0.1938 -0.9265 +vn -0.3627 -0.0044 -0.9319 +vn -0.3990 -0.1143 -0.9098 +vn -0.3797 -0.0558 -0.9234 +vn -0.3811 0.0364 -0.9238 +vn -0.6895 -0.6904 -0.2186 +vn -0.5408 -0.0213 -0.8409 +vn -0.8090 -0.4366 -0.3936 +vn -0.2091 0.2767 -0.9379 +vn -0.4483 -0.5347 -0.7163 +vn -0.2499 -0.3249 -0.9121 +vn -0.4087 -0.0811 -0.9090 +vn -0.6894 0.2402 -0.6834 +vn 0.1737 0.8644 -0.4718 +vn -0.9009 0.3109 0.3030 +vn -0.9668 0.1825 0.1787 +vn -0.7902 0.1654 -0.5902 +vn -0.3377 -0.2763 -0.8998 +vn -0.3701 0.2278 -0.9006 +vn -0.2640 -0.1943 -0.9447 +vn -0.1694 -0.2604 -0.9505 +vn 0.7080 -0.3577 -0.6090 +vn -0.7875 0.0938 -0.6091 +vn 0.1325 -0.1475 -0.9801 +vn -0.5057 -0.1077 -0.8560 +vn 0.2446 -0.8567 -0.4541 +vn 0.3053 -0.5798 0.7554 +vn -0.9973 0.0695 -0.0255 +vn -0.8252 -0.3772 -0.4204 +vn -0.8855 -0.2534 -0.3896 +vn -0.4998 -0.2182 -0.8382 +vn -0.3096 -0.1803 -0.9336 +vn -0.3640 -0.1016 -0.9258 +vn -0.3346 -0.8032 -0.4929 +vn -0.3504 -0.2574 -0.9005 +vn -0.4499 -0.6109 -0.6514 +vn -0.4301 -0.4007 -0.8090 +vn -0.3327 -0.2521 -0.9087 +vn -0.3091 -0.2845 -0.9075 +vn -0.4523 0.0916 -0.8872 +vn 0.4986 0.5253 -0.6895 +vn -0.7014 0.5613 -0.4393 +vn 0.5692 -0.1051 0.8155 +vn -0.5012 0.3323 -0.7990 +vn -0.8017 0.3255 -0.5014 +vn -0.5325 0.4646 -0.7075 +vn 0.7751 -0.5965 -0.2085 +vn 0.0316 0.2384 -0.9706 +vn -0.3483 0.0012 -0.9374 +vn -0.1557 -0.2267 -0.9614 +vn -0.3516 -0.0738 -0.9333 +vn -0.3571 -0.0902 -0.9297 +vn -0.3283 0.0308 -0.9441 +vn -0.3382 -0.1314 -0.9319 +vn -0.9752 0.0166 0.2208 +vn -0.6309 -0.0169 -0.7757 +vn -0.8734 0.2769 -0.4006 +vn -0.6154 -0.7368 -0.2802 +vn -0.1011 -0.9941 -0.0403 +vn -0.8586 -0.1056 -0.5016 +vn 0.7323 -0.6573 -0.1782 +vn -0.8192 -0.4811 -0.3123 +vn -0.8360 -0.0816 -0.5426 +vn -0.9703 -0.1519 -0.1884 +vn -0.1848 -0.1785 0.9664 +vn -0.5074 -0.5345 -0.6759 +vn -0.5130 -0.5079 -0.6920 +vn -0.6069 -0.3433 -0.7168 +vn -0.4932 -0.3697 -0.7875 +vn -0.5009 -0.4108 -0.7618 +vn -0.4157 0.1219 -0.9013 +vn -0.7904 -0.0944 -0.6052 +vn -0.7448 0.1833 -0.6416 +vn -0.5431 0.2666 -0.7962 +vn -0.9185 0.0656 -0.3898 +vn -0.7704 0.1558 -0.6182 +vn -0.9865 0.1173 -0.1142 +vn 0.5462 -0.7727 0.3234 +vn -0.0137 0.1510 -0.9884 +vn -0.9630 -0.2536 -0.0907 +vn -0.4544 -0.1795 -0.8725 +vn -0.4490 -0.1491 -0.8810 +vn -0.6692 0.3128 -0.6741 +vn -0.8227 -0.2929 -0.4873 +vn -0.5696 0.3715 -0.7332 +vn -0.9734 -0.0836 -0.2132 +vn 0.5335 -0.7952 0.2883 +vn -0.9076 -0.2338 -0.3487 +vn -0.3321 -0.2271 -0.9155 +vn -0.6329 -0.4136 -0.6546 +vn -0.6336 -0.4145 -0.6533 +vn -0.4436 -0.1736 -0.8793 +vn -0.4714 0.1330 -0.8718 +vn -0.6530 -0.7199 -0.2353 +vn -0.9671 0.2463 -0.0631 +vn -0.7314 0.0206 -0.6817 +vn 0.0832 -0.9098 -0.4066 +vn -0.8826 -0.1264 -0.4528 +vn -0.9436 0.0122 -0.3308 +vn -0.8270 0.4260 -0.3668 +vn -0.5672 -0.3426 -0.7490 +vn -0.5800 0.2628 -0.7710 +vn -0.5746 0.3241 -0.7515 +vn -0.5851 -0.6903 -0.4257 +vn -0.8282 -0.0872 -0.5535 +vn -0.9343 0.3333 -0.1264 +vn -0.5469 -0.7429 -0.3859 +vn -0.7873 -0.5314 -0.3126 +vn -0.7642 -0.4237 -0.4863 +vn -0.5327 -0.1007 -0.8403 +vn -0.7172 -0.2723 -0.6414 +vn -0.6056 -0.5200 -0.6024 +vn -0.7279 -0.0270 -0.6851 +vn -0.4880 0.1130 -0.8655 +vn -0.4121 -0.4358 -0.8002 +vn 0.0415 -0.9975 0.0563 +vn -0.8033 0.1338 -0.5804 +vn -0.5259 -0.1021 -0.8444 +vn -0.5522 -0.5517 -0.6250 +vn -0.7198 -0.3625 -0.5920 +vn -0.7327 -0.1854 -0.6548 +vn -0.4312 0.0751 -0.8991 +vn -0.4236 -0.0229 -0.9056 +vn -0.4583 0.3026 -0.8357 +vn -0.3164 -0.6621 0.6793 +vn 0.2649 -0.5224 -0.8105 +vn 0.3058 -0.5584 -0.7711 +vn -0.3028 -0.5390 0.7860 +vn -0.5773 -0.5198 -0.6297 +vn -0.8332 -0.3659 -0.4146 +vn -0.3447 0.0019 -0.9387 +vn -0.7063 -0.3184 -0.6323 +vn -0.7099 -0.3471 -0.6129 +vn -0.9418 -0.3321 -0.0512 +vn -0.3740 -0.4430 -0.8148 +vn -0.5556 -0.6302 -0.5423 +vn -0.8707 0.4841 0.0869 +vn -0.9011 0.3694 -0.2273 +vn -0.9420 0.0057 -0.3355 +vn -0.8273 0.0369 -0.5605 +vn -0.3433 0.0095 -0.9392 +vn -0.3918 0.3206 -0.8624 +vn -0.4645 -0.0196 -0.8853 +vn -0.6481 -0.2941 -0.7025 +vn -0.6594 -0.1548 -0.7357 +vn -0.6034 -0.0868 -0.7927 +vn -0.6888 0.0117 -0.7249 +vn -0.6452 0.0497 -0.7624 +vn -0.6699 0.1810 -0.7201 +vn -0.8063 0.1229 -0.5786 +vn -0.7076 -0.6302 -0.3196 +vn -0.9259 0.2733 -0.2609 +vn -0.7156 0.6458 0.2663 +vn -0.3839 0.2805 -0.8798 +vn -0.3029 -0.1325 -0.9438 +vn -0.8169 -0.3726 -0.4403 +vn 0.1915 0.8584 0.4759 +vn -0.2485 0.2736 -0.9292 +vn -0.4557 0.2886 -0.8421 +vn -0.9368 0.1711 -0.3053 +vn -0.1769 0.1199 -0.9769 +vn -0.5644 0.5694 -0.5976 +vn -0.8649 -0.3111 -0.3940 +vn -0.8498 -0.3583 -0.3866 +vn -0.9209 -0.2624 -0.2881 +vn -0.8573 -0.4044 -0.3186 +vn -0.8490 -0.3197 -0.4207 +vn -0.4840 0.2422 -0.8409 +vn -0.5172 0.3174 -0.7948 +vn -0.4644 0.3012 -0.8329 +vn -0.6945 -0.3697 -0.6173 +vn -0.7138 -0.3099 -0.6280 +vn 0.3998 -0.5582 0.7271 +vn 0.0112 -0.8880 0.4597 +vn -0.7902 -0.1281 -0.5994 +vn -0.5144 0.7944 -0.3231 +vn -0.8029 0.5568 0.2129 +vn -0.8974 -0.2066 -0.3898 +vn -0.8576 -0.0930 -0.5057 +vn -0.7433 0.2234 -0.6305 +vn -0.7451 0.3088 -0.5911 +vn -0.7914 -0.5498 0.2671 +vn -0.7043 0.5559 -0.4415 +vn -0.6102 0.2092 -0.7641 +vn 0.7310 0.1499 0.6657 +vn -0.9362 -0.3258 -0.1319 +vn 0.0109 -0.9993 -0.0368 +vn -0.4012 -0.6582 -0.6370 +vn -0.5510 -0.4735 -0.6872 +vn -0.6913 -0.2748 -0.6682 +vn -0.8716 -0.0228 -0.4898 +vn -0.9345 0.2335 -0.2688 +vn -0.8762 0.0172 -0.4817 +vn -0.9003 0.2042 -0.3845 +vn -0.7676 -0.1108 -0.6313 +vn -0.8576 -0.0931 -0.5058 +vn -0.6218 -0.4689 -0.6272 +vn -0.5822 -0.0355 -0.8123 +vn -0.4662 -0.2635 -0.8445 +vn 0.1381 -0.9013 0.4105 +vn -0.8791 -0.1505 -0.4523 +vn -0.4393 0.2125 -0.8729 +vn -0.6087 0.3216 -0.7253 +vn -0.8088 0.0117 -0.5880 +vn -0.8169 0.0875 -0.5701 +vn -0.7768 0.3525 -0.5218 +vn -0.8326 0.0680 -0.5496 +vn -0.6266 0.1507 -0.7646 +vn -0.0437 -0.9970 0.0645 +vn -0.0021 -1.0000 0.0077 +vn 0.0313 -0.9992 0.0248 +vn 0.0175 -0.9986 0.0496 +vn 0.6518 -0.0779 0.7544 +vn -0.1042 -0.9940 0.0346 +vn 0.1167 -0.9761 0.1835 +vn 0.0312 -0.9787 -0.2027 +vn 0.4188 -0.8752 -0.2422 +vn -0.3393 -0.7567 0.5588 +vn -0.1277 -0.9803 0.1509 +vn 0.4456 -0.8939 -0.0477 +vn -0.4626 -0.7612 0.4545 +vn 0.0160 -0.9962 0.0852 +vn 0.0103 -0.9996 -0.0257 +vn 0.3031 -0.5756 0.7595 +vn -0.4664 -0.8846 0.0043 +vn -0.6048 -0.7826 -0.1473 +vn 0.4124 -0.8357 0.3628 +vn -0.6475 -0.6902 -0.3230 +vn -0.9776 -0.1278 0.1670 +vn 0.0869 -0.9961 0.0169 +vn 0.0546 -0.9983 0.0196 +vn 0.2573 -0.2305 0.9385 +vn -0.3485 -0.9119 -0.2168 +vn -0.4975 -0.7220 0.4808 +vn 0.1658 -0.4619 0.8713 +vn 0.6020 -0.5218 -0.6044 +vn 0.5572 -0.8281 0.0612 +vn -0.1127 -0.9729 -0.2019 +vn 0.0162 -0.9984 0.0548 +vn -0.4246 -0.8974 0.1200 +vn -0.2067 -0.9768 -0.0561 +vn -0.1555 -0.7701 0.6187 +vn 0.0883 -0.9695 -0.2285 +vn 0.0537 -0.9960 -0.0716 +vn -0.5825 -0.7721 0.2543 +vn 0.6947 -0.7094 0.1187 +vn -0.4656 -0.5836 -0.6653 +vn 0.4153 -0.8305 0.3712 +vn 0.1019 -0.9941 -0.0381 +vn -0.0362 -0.9157 -0.4002 +vn 0.0106 -0.9995 -0.0313 +vn -0.9700 -0.1169 0.2132 +vn 0.2903 -0.8421 0.4545 +vn 0.0677 -0.9967 0.0447 +vn -0.0214 -0.9977 0.0644 +vn 0.7551 -0.1058 0.6471 +vn -0.3138 -0.7000 0.6415 +vn 0.0270 -0.9984 0.0505 +vn -0.5163 -0.5910 0.6199 +vn -0.4028 -0.8658 0.2969 +vn -0.5030 -0.7567 0.4175 +vn 0.0383 -0.9993 0.0002 +vn 0.6472 -0.0488 0.7608 +vn 0.2147 -0.1873 0.9586 +vn -0.4255 -0.6935 0.5814 +vn -0.3545 -0.7209 -0.5955 +vn 0.4654 0.7103 0.5281 +vn 0.3404 0.1468 -0.9288 +vn -0.4356 -0.7368 0.5171 +vn 0.2037 -0.9780 0.0448 +vn 0.5201 -0.7785 0.3514 +vn 0.5105 -0.8019 0.3104 +vn 0.3201 -0.8955 0.3093 +vn 0.3348 -0.8686 0.3654 +vn -0.1251 -0.9813 0.1460 +vn 0.4183 -0.8291 0.3709 +vn 0.0837 -0.9963 0.0214 +vn 0.3267 -0.9414 -0.0840 +vn -0.4989 -0.7628 0.4113 +vn 0.0615 -0.9760 -0.2087 +vn 0.1049 -0.9943 -0.0200 +vn 0.0910 -0.9958 0.0075 +vn -0.4331 -0.5683 0.6997 +vn 0.1681 -0.9835 0.0670 +vn 0.3367 -0.9411 -0.0309 +vn -0.1292 -0.8821 0.4530 +vn -0.4634 -0.7241 0.5109 +vn -0.5096 -0.7327 0.4510 +vn -0.7782 -0.5972 0.1944 +vn 0.2244 -0.9735 -0.0452 +vn 0.2525 -0.9676 -0.0048 +vn 0.0121 -0.9967 -0.0801 +vn 0.5695 -0.7661 0.2980 +vn -0.8915 -0.2618 0.3698 +vn -0.7803 -0.5879 0.2134 +vn 0.5986 -0.7696 0.2223 +vn 0.7058 -0.0054 0.7084 +vn -0.0329 -0.9985 -0.0445 +vn -0.4692 -0.7676 0.4366 +vn -0.6864 -0.5619 0.4616 +vn -0.4110 -0.9092 0.0667 +vn -0.7385 -0.6664 -0.1024 +vn -0.7301 -0.6830 -0.0230 +vn -0.2753 -0.7549 0.5952 +vn -0.7171 -0.6961 0.0345 +vn -0.3290 -0.8044 0.4946 +vn -0.4776 -0.8338 0.2769 +vn -0.5054 -0.8606 0.0627 +vn -0.5016 -0.8635 0.0529 +vn 0.3143 -0.8974 0.3098 +vn -0.6214 -0.7427 0.2498 +vn -0.0469 -0.9985 -0.0282 +vn 0.0192 -0.9995 -0.0236 +vn -0.4974 -0.8644 0.0740 +vn -0.5668 -0.7888 0.2377 +vn 0.3890 -0.9212 -0.0067 +vn 0.4798 -0.8609 -0.1690 +vn 0.3209 -0.8789 0.3530 +vn -0.0303 -0.9993 -0.0217 +vn 0.0028 -0.9601 0.2797 +vn -0.0768 -0.9968 -0.0202 +vn 0.0415 -0.9894 -0.1392 +vn 0.0334 -0.9956 -0.0874 +vn -0.4043 -0.8089 0.4268 +vn -0.4277 -0.7468 0.5093 +vn -0.0133 -0.6801 0.7330 +vn 0.9039 0.4027 -0.1440 +vn 0.0625 -0.9741 0.2173 +vn -0.1998 -0.6121 0.7652 +vn -0.4010 -0.7109 0.5778 +vn 0.0179 -0.9997 -0.0174 +vn 0.4469 -0.8918 0.0702 +vn 0.4593 -0.8466 0.2688 +vn 0.0124 -0.9993 -0.0342 +vn 0.2969 -0.5762 0.7615 +vn 0.3456 -0.2069 0.9153 +vn -0.2721 -0.9563 0.1074 +vn -0.2839 -0.8912 0.3538 +vn 0.0720 -0.9962 0.0492 +vn 0.0113 -0.9992 -0.0382 +vn 0.0340 -0.9994 0.0016 +vn -0.1485 -0.6574 0.7387 +vn -0.0741 -0.3160 0.9459 +vn 0.2835 -0.7952 0.5360 +vn -0.4438 0.8451 0.2980 +vn -0.1443 -0.3768 0.9150 +vn -0.4038 -0.9148 0.0051 +vn -0.2832 -0.7128 -0.6417 +vn 0.4186 -0.9074 0.0374 +vn 0.0379 -0.8853 -0.4635 +vn 0.3059 0.7135 0.6303 +vn 0.5545 0.4602 0.6934 +vn -0.5222 -0.6797 0.5151 +vn 0.3274 -0.1986 0.9238 +vn -0.5747 -0.4796 0.6631 +vn 0.0722 -0.9840 0.1630 +vn -0.0730 -0.8339 0.5471 +vn 0.0064 -0.9999 -0.0117 +vn -0.2832 -0.9353 0.2120 +vn -0.2765 -0.9545 0.1114 +vn -0.1138 -0.9069 0.4057 +vn -0.1566 -0.6558 0.7385 +vn -0.0289 -0.4955 0.8681 +vn -0.1255 -0.7187 0.6838 +vn 0.1086 -0.9193 -0.3782 +vn 0.0289 -0.9924 0.1198 +vn -0.9125 -0.1719 0.3711 +vn 0.2902 0.3256 -0.8999 +vn 0.0938 -0.4104 0.9071 +vn 0.2839 -0.6435 0.7108 +vn 0.0465 -0.9988 0.0164 +vn -0.0698 -0.7764 0.6263 +vn 0.4186 -0.9079 0.0244 +vn 0.8429 0.3733 0.3876 +vn 0.6206 -0.5406 0.5680 +vn 0.5919 -0.6398 0.4902 +vn 0.1228 -0.9517 0.2814 +vn 0.3025 -0.5765 0.7590 +vn -0.1823 -0.6102 0.7710 +vn 0.0125 -0.9994 -0.0315 +vn 0.0879 -0.9784 0.1874 +vn -0.4029 -0.7575 0.5137 +vn 0.6422 -0.7081 0.2935 +vn -0.5027 -0.4351 0.7470 +vn -0.7109 -0.6286 0.3153 +vn 0.2815 -0.6668 0.6901 +vn 0.0370 -0.9980 0.0518 +vn -0.1014 -0.9641 0.2455 +vn -0.0848 -0.9247 0.3711 +vn 0.2212 -0.4905 0.8429 +vn -0.7720 -0.5727 0.2757 +vn 0.2998 -0.9525 0.0544 +vn 0.4823 -0.8681 0.1176 +vn 0.3230 -0.8728 -0.3659 +vn 0.7656 -0.1582 0.6236 +vn -0.3721 -0.0021 0.9282 +vn -0.4193 -0.5028 0.7559 +vn 0.2767 -0.7372 0.6164 +vn 0.3558 -0.5789 0.7337 +vn 0.5156 -0.6925 -0.5046 +vn 0.0321 -0.9975 0.0636 +vn 0.0017 -0.9998 -0.0193 +vn 0.6211 -0.7743 -0.1212 +vn 0.7659 -0.2090 0.6081 +vn -0.6775 -0.6217 0.3930 +vn -0.6814 -0.6996 0.2151 +vn -0.4789 -0.7131 0.5121 +vn -0.4566 -0.6804 0.5731 +vn 0.0296 -0.9990 -0.0346 +vn 0.0312 -0.8370 0.5462 +vn -0.2458 -0.9480 0.2024 +vn -0.1459 -0.9371 0.3170 +vn -0.6830 -0.7299 0.0287 +vn 0.0989 -0.9950 0.0101 +vn 0.7607 0.5647 0.3202 +vn -0.5017 -0.7646 0.4046 +vn -0.6120 -0.5664 0.5520 +vn 0.0393 -0.9989 0.0246 +vn -0.2170 -0.6170 0.7564 +vn 0.1427 -0.9113 0.3862 +vn 0.5155 -0.8568 -0.0085 +vn 0.6846 -0.7129 0.1520 +vn -0.5294 -0.5783 0.6207 +vn -0.5063 -0.5496 0.6645 +vn -0.1848 -0.0227 0.9825 +vn 0.2574 -0.9254 0.2781 +vn 0.0298 -0.4570 0.8889 +vn 0.0296 -0.4669 0.8838 +vn 0.0217 -0.9998 0.0025 +vn -0.3147 -0.7887 0.5282 +vn 0.7067 -0.6886 -0.1627 +vn -0.6492 -0.7054 0.2846 +vn -0.5863 -0.7261 0.3592 +vn -0.6071 -0.6672 0.4316 +vn -0.1061 -0.9918 -0.0718 +vn -0.6087 -0.2391 0.7565 +vn -0.4423 -0.1454 0.8850 +vn 0.1020 -0.8672 0.4873 +vn 0.1430 -0.7363 0.6614 +vn 0.0198 -0.9998 0.0030 +vn -0.4549 -0.8554 0.2476 +vn -0.2969 -0.9472 0.1213 +vn -0.6352 -0.7639 0.1138 +vn -0.5863 -0.7259 0.3597 +vn 0.3868 -0.9001 -0.2006 +vn 0.1771 -0.9706 -0.1632 +vn -0.9052 -0.2099 -0.3696 +vn 0.2132 -0.9414 0.2615 +vn -0.4747 -0.7508 0.4593 +vn 0.0889 -0.8784 0.4695 +vn -0.5690 -0.6833 0.4575 +vn -0.0694 -0.9966 -0.0438 +vn -0.0177 -0.5697 0.8217 +vn -0.4600 -0.8879 0.0114 +vn -0.3973 -0.7438 0.5376 +vn -0.4084 -0.7631 0.5008 +vn -0.4256 -0.7101 0.5608 +vn -0.3706 0.3098 -0.8756 +vn 0.4991 -0.8657 -0.0387 +vn 0.5171 -0.8457 -0.1322 +vn -0.2922 -0.8935 0.3410 +vn 0.1682 -0.9452 0.2798 +vn 0.0728 -0.7628 0.6426 +vn -0.4069 0.2816 0.8690 +vn -0.7472 -0.5595 0.3586 +vn -0.4550 -0.8904 0.0143 +vn -0.4464 -0.8940 0.0384 +vn -0.4734 -0.8784 0.0659 +vn -0.5869 -0.7255 0.3595 +vn -0.4287 -0.8071 0.4059 +vn -0.3453 -0.6484 0.6785 +vn -0.3754 -0.5856 0.7185 +vn -0.3146 -0.5164 0.7965 +vn -0.6447 -0.7633 0.0415 +vn -0.1247 0.7816 0.6112 +vn -0.2990 -0.9531 0.0475 +vn -0.8087 -0.5877 -0.0237 +vn -0.4583 -0.8186 0.3461 +vn -0.4997 -0.8015 0.3285 +vn -0.4374 -0.7918 0.4263 +vn -0.0075 -0.9979 0.0650 +vn -0.5035 -0.8629 0.0447 +vn 0.3446 -0.9348 0.0860 +vn 0.2934 -0.8856 0.3600 +vn 0.2463 -0.7961 0.5527 +vn 0.4709 -0.0750 -0.8790 +vn -0.2733 -0.9504 0.1487 +vn 0.5618 -0.8207 0.1039 +vn -0.4202 -0.6790 0.6020 +vn -0.0572 -0.3488 0.9355 +vn 0.0468 -0.9988 0.0118 +vn -0.4886 -0.8639 0.1220 +vn -0.4202 -0.1906 0.8872 +vn 0.4020 -0.9123 0.0788 +vn 0.3442 -0.7232 0.5987 +vn -0.0000 -0.9977 0.0682 +vn -0.0936 -0.9956 0.0010 +vn -0.3397 -0.9395 0.0444 +vn -0.3193 -0.9212 0.2224 +vn -0.2592 -0.8641 0.4314 +vn -0.2178 -0.7898 0.5734 +vn -0.2226 -0.7133 0.6646 +vn -0.0508 -0.7988 0.5994 +vn 0.0137 -0.9991 -0.0394 +vn 0.0139 -0.9994 -0.0313 +vn 0.4594 -0.8652 0.2009 +vn -0.1683 -0.8241 0.5408 +vn -0.1461 -0.6845 0.7142 +vn -0.0418 -0.9990 0.0133 +vn 0.7233 -0.4931 -0.4834 +vn -0.2784 -0.9465 -0.1631 +vn -0.3238 -0.9443 0.0596 +vn -0.2331 -0.8629 0.4484 +vn -0.2025 -0.7039 0.6808 +vn -0.2307 -0.5216 0.8214 +vn -0.1871 -0.6002 0.7776 +vn -0.1508 -0.4145 0.8975 +vn -0.6863 0.1763 0.7057 +vn -0.7275 0.3820 0.5700 +vn 0.5700 -0.8204 -0.0450 +vn 0.6674 -0.0694 0.7415 +vn -0.1893 -0.0189 0.9817 +vn -0.0567 -0.9456 0.3204 +vn 0.5515 -0.8302 0.0812 +vn -0.1442 -0.9784 0.1483 +vn -0.0454 -0.9972 0.0598 +vn -0.1535 -0.9712 0.1825 +vn 0.8109 -0.5558 0.1834 +vn -0.2330 -0.7763 0.5857 +vn -0.0762 -0.9966 0.0317 +vn -0.3923 0.7016 0.5948 +vn -0.3359 -0.9385 -0.0793 +vn -0.2008 -0.9346 0.2936 +vn -0.2009 -0.7889 0.5807 +vn -0.2263 -0.7622 0.6065 +vn 0.7851 -0.6018 0.1463 +vn 0.0176 -0.9996 0.0220 +vn -0.5466 -0.8359 -0.0499 +vn -0.3586 -0.9334 -0.0151 +vn -0.5271 -0.8445 -0.0947 +vn -0.3307 -0.9436 0.0140 +vn 0.0669 -0.4644 0.8831 +vn -0.6561 0.4674 -0.5926 +vn -0.5585 0.6439 -0.5230 +vn 0.2579 -0.9640 -0.0652 +vn 0.3098 -0.9500 0.0395 +vn -0.1265 -0.9881 -0.0876 +vn -0.0020 -0.9978 -0.0659 +vn -0.0728 -0.9973 0.0113 +vn -0.0134 -0.9999 -0.0012 +vn -0.0727 -0.9687 0.2375 +vn -0.2053 -0.7510 0.6276 +vn -0.7824 -0.5886 0.2033 +vn -0.6503 -0.7565 0.0703 +vn -0.2052 -0.9335 0.2940 +vn -0.0091 -0.6420 0.7666 +vn 0.0739 -0.5818 0.8100 +vn 0.1039 -0.2408 0.9650 +vn -0.0061 -0.9985 0.0544 +vn -0.2218 -0.9265 0.3040 +vn -0.1890 -0.9572 0.2194 +vn -0.1173 -0.9215 0.3702 +vn -0.1136 -0.9080 0.4032 +vn -0.0493 -0.7283 0.6835 +vn 0.0228 -0.9621 0.2716 +vn -0.3373 -0.7435 0.5774 +vn -0.2236 -0.9040 -0.3643 +vn -0.2365 -0.8881 0.3940 +vn -0.1152 -0.9507 0.2878 +vn -0.1351 -0.6800 0.7206 +vn -0.4679 -0.6725 0.5734 +vn -0.2114 0.9443 -0.2523 +vn -0.2710 -0.9605 0.0635 +vn -0.0461 -0.8870 0.4595 +vn -0.0800 -0.8366 0.5420 +vn -0.0483 -0.7299 0.6818 +vn -0.4165 -0.8978 0.1434 +vn -0.3203 -0.9143 0.2481 +vn 0.5865 -0.7913 -0.1730 +vn -0.0796 -0.8365 0.5422 +vn -0.1128 -0.7896 0.6032 +vn 0.4566 -0.6659 0.5900 +vn -0.1191 -0.9881 -0.0976 +vn -0.3022 -0.9459 0.1179 +vn -0.6580 -0.7296 0.1861 +vn 0.2727 -0.9412 -0.1995 +vn 0.2122 -0.9202 -0.3288 +vn 0.1940 -0.9642 -0.1807 +vn -0.3042 0.1678 0.9377 +vn 0.0005 -1.0000 -0.0077 +vn 0.0046 -0.9999 0.0105 +vn -0.0273 -0.9969 0.0742 +vn 0.2604 -0.9630 -0.0701 +vn 0.5677 -0.6443 0.5124 +vn -0.8876 -0.0714 -0.4550 +vn -0.0388 -0.9348 0.3531 +vn -0.0307 -0.8896 0.4556 +vn 0.7714 -0.0776 0.6316 +vn 0.0216 -0.9991 -0.0356 +vn 0.6615 0.3342 0.6714 +vn -0.0098 -0.8854 0.4648 +vn -0.0221 -0.8531 0.5214 +vn 0.1223 -0.6793 0.7236 +vn 0.1115 -0.5937 0.7969 +vn 0.7164 -0.6559 0.2378 +vn 0.0181 -0.9993 -0.0326 +vn 0.2331 0.9555 -0.1807 +vn 0.0680 -0.7270 0.6832 +vn 0.0527 -0.9970 0.0570 +vn -0.1954 -0.7232 0.6625 +vn -0.2217 -0.6305 -0.7438 +vn -0.1463 -0.9810 -0.1277 +vn -0.0405 -0.9992 -0.0063 +vn -0.0362 -0.7254 0.6874 +vn -0.5505 -0.7799 0.2978 +vn -0.9605 -0.1499 0.2346 +vn 0.5831 -0.3086 0.7515 +vn 0.0971 0.5279 0.8438 +vn 0.0440 -0.9931 0.1091 +vn -0.7436 -0.6612 0.0997 +vn -0.7166 -0.6833 0.1400 +vn -0.2366 -0.9702 -0.0529 +vn -0.1802 -0.9809 0.0735 +vn -0.5062 -0.7889 0.3485 +vn 0.0767 -0.8331 0.5478 +vn 0.1395 -0.5707 0.8092 +vn -0.1085 -0.9940 0.0129 +vn -0.6978 -0.6863 0.2048 +vn -0.1402 -0.9895 0.0357 +vn -0.1017 -0.9922 -0.0723 +vn -0.0145 -0.9999 -0.0004 +vn -0.0108 -0.9999 -0.0022 +vn 0.0095 -1.0000 0.0010 +vn -0.0010 -0.9999 0.0143 +vn -0.3644 -0.9016 0.2332 +vn -0.0923 -0.9749 -0.2025 +vn 0.0057 -0.9595 0.2816 +vn 0.0133 -0.9998 -0.0116 +vn 0.0066 -0.9996 -0.0275 +vn -0.0861 -0.9885 -0.1240 +vn -0.0275 -0.9969 0.0741 +vn -0.0031 -0.9996 0.0269 +vn -0.1298 -0.9898 0.0581 +vn 0.0533 -0.8681 0.4935 +vn 0.0523 -0.8237 0.5646 +vn 0.2776 -0.6553 0.7025 +vn -0.0080 -1.0000 0.0041 +vn 0.1830 -0.6718 0.7178 +vn 0.3301 -0.5536 0.7646 +vn -0.0043 -0.9998 -0.0194 +vn -0.0822 -0.9342 -0.3472 +vn -0.0333 -0.9993 -0.0146 +vn 0.1057 -0.9944 -0.0093 +vn 0.0513 -0.9984 -0.0224 +vn -0.0565 -0.9934 0.1000 +vn 0.7227 -0.6732 0.1566 +vn 0.2007 -0.6769 0.7082 +vn -0.3436 -0.9208 0.1845 +vn -0.0374 -0.9846 0.1709 +vn 0.0186 -0.9998 0.0041 +vn 0.4078 -0.9067 -0.1077 +vn -0.0457 -0.9436 0.3278 +vn -0.0060 -0.9984 0.0562 +vn 0.0048 -0.9995 0.0296 +vn -0.2024 -0.7025 0.6822 +vn 0.6158 -0.5413 0.5725 +vn -0.0976 -0.9891 0.1104 +vn -0.5115 -0.7472 0.4243 +vn 0.0897 -0.8167 0.5700 +vn 0.2856 -0.6625 0.6925 +vn 0.0395 -0.9990 0.0191 +vn 0.0919 -0.9949 -0.0414 +vn 0.0324 -0.9988 -0.0358 +vn -0.1778 -0.7307 0.6592 +vn 0.3034 -0.9495 -0.0796 +vn 0.1864 -0.7355 0.6514 +vn 0.0764 -0.9898 0.1203 +vn 0.0149 -0.9989 0.0455 +vn 0.1771 -0.9673 0.1817 +vn 0.7209 -0.6905 0.0586 +vn 0.5538 -0.8303 -0.0618 +vn 0.7151 -0.5578 -0.4213 +vn 0.0017 -0.9992 0.0407 +vn -0.2572 -0.7101 0.6554 +vn -0.7787 0.3843 -0.4960 +vn -0.6740 -0.6209 0.4003 +vn 0.4357 -0.5383 0.7214 +vn 0.3912 -0.5778 0.7164 +vn 0.3501 -0.8488 0.3962 +vn 0.3565 -0.9053 0.2308 +vn 0.0384 -0.9988 0.0313 +vn 0.0009 -0.9992 0.0407 +vn -0.9550 -0.1730 -0.2410 +vn -0.6859 -0.7267 0.0392 +vn 0.4289 -0.6347 0.6428 +vn 0.3910 -0.5790 0.7155 +vn 0.3841 -0.4987 0.7770 +vn 0.4449 -0.8765 0.1838 +vn 0.7756 -0.5515 0.3069 +vn 0.6360 -0.7708 0.0373 +vn 0.8308 -0.5396 -0.1364 +vn 0.0027 -0.9997 -0.0259 +vn -0.3956 -0.3346 0.8553 +vn 0.7311 0.0565 0.6799 +vn 0.0270 -0.5787 0.8151 +vn 0.0474 -0.4249 0.9040 +vn -0.0154 -0.9981 -0.0596 +vn -0.3046 -0.8500 0.4298 +vn 0.0124 -0.9992 0.0375 +vn 0.0859 -0.9454 0.3145 +vn 0.0522 -0.9981 -0.0338 +vn 0.0181 -0.9994 0.0293 +vn 0.2185 -0.9343 -0.2817 +vn -0.3738 -0.9240 0.0811 +vn 0.1342 -0.9776 0.1623 +vn 0.4368 -0.6981 0.5673 +vn 0.0401 -0.9977 0.0542 +vn 0.2085 -0.7237 0.6578 +vn 0.0536 -0.9858 0.1592 +vn 0.0352 -0.9992 0.0167 +vn 0.0328 -0.9993 0.0204 +vn 0.0686 -0.9806 0.1838 +vn 0.1637 -0.8870 0.4319 +vn 0.2165 -0.3149 0.9241 +vn 0.0823 -0.9937 -0.0762 +vn 0.0086 -0.9996 -0.0285 +vn 0.1214 -0.3639 0.9235 +vn 0.2144 -0.8998 0.3799 +vn 0.3545 -0.8946 0.2720 +vn 0.0163 -0.9982 0.0578 +vn 0.4154 -0.7159 0.5611 +vn 0.2920 -0.9536 0.0737 +vn -0.0325 -0.9992 -0.0222 +vn 0.0028 -0.9976 -0.0688 +vn 0.0171 -0.9998 0.0053 +vn 0.2879 -0.8978 -0.3334 +vn -0.4120 -0.8967 0.1618 +vn 0.0549 -0.9978 0.0377 +vn -0.2732 -0.2992 -0.9143 +vn 0.5175 -0.7472 0.4170 +vn 0.2863 -0.9515 0.1122 +vn 0.0950 -0.9930 -0.0706 +vn 0.0487 -0.9968 0.0633 +vn 0.1973 -0.6957 0.6907 +vn 0.2467 -0.4051 0.8803 +vn 0.3882 -0.9196 0.0604 +vn 0.0849 -0.9941 -0.0674 +vn 0.4527 -0.6337 0.6273 +vn -0.3836 -0.9235 0.0021 +vn -0.1297 -0.7286 0.6725 +vn -0.3333 -0.7741 0.5382 +vn -0.6693 -0.3081 0.6761 +vn -0.8474 -0.5082 0.1538 +vn 0.0007 -0.9984 0.0561 +vn 0.0198 -0.9997 0.0113 +vn 0.0187 -0.9996 -0.0187 +vn 0.3557 -0.6730 0.6485 +vn -0.0101 -0.9997 -0.0208 +vn 0.0219 -0.9998 0.0035 +vn -0.1863 -0.7304 0.6571 +vn 0.0512 -0.9958 0.0757 +vn 0.5421 -0.6192 0.5681 +vn 0.0851 -0.9709 0.2239 +vn 0.0363 -0.9992 -0.0193 +vn -0.0402 -0.9957 0.0830 +vn -0.1932 -0.6391 0.7444 +vn 0.0051 -0.9998 0.0201 +vn 0.0266 -0.9991 0.0332 +vn 0.3350 -0.5452 0.7684 +vn 0.1277 -0.9890 0.0750 +vn 0.6006 -0.2081 0.7720 +vn -0.0177 -0.9979 0.0624 +vn 0.1481 -0.9676 -0.2044 +vn 0.0089 -0.9999 -0.0128 +vn 0.0862 -0.9873 0.1332 +vn 0.3099 -0.6302 0.7119 +vn 0.2947 -0.6591 0.6920 +vn -0.2953 -0.7680 0.5683 +vn 0.0103 -0.9900 0.1410 +vn -0.0625 -0.9206 0.3854 +vn -0.1543 -0.9619 0.2258 +vn -0.1156 -0.9914 0.0612 +vn -0.4849 -0.7343 0.4751 +vn -0.1266 -0.9237 0.3617 +vn -0.2290 -0.9339 0.2744 +vn -0.2865 -0.8812 0.3761 +s 0 +f 1583//494 2161//494 2092//494 +f 1572//495 1423//495 1453//495 +f 935//496 1690//496 752//496 +f 1569//497 1615//497 1556//497 +f 752//498 1573//498 1640//498 +f 1768//499 544//499 1775//499 +f 1579//500 1585//500 515//500 +f 1551//501 1644//501 1634//501 +f 2084//502 2895//502 2099//502 +f 2948//503 3016//503 2987//503 +f 2146//504 2168//504 2160//504 +f 1658//505 1680//505 1183//505 +f 1716//506 1954//506 819//506 +f 1585//507 1604//507 515//507 +f 2069//508 2084//508 2098//508 +f 1698//509 1688//509 918//509 +f 579//510 946//510 526//510 +f 1546//511 1599//511 1088//511 +f 2303//512 2721//512 2737//512 +f 1668//513 1632//513 1698//513 +f 1655//514 1600//514 1668//514 +f 613//515 1631//515 856//515 +f 918//516 1688//516 933//516 +f 1003//517 2514//517 2512//517 +f 1632//518 1688//518 1698//518 +f 1710//519 917//519 650//519 +f 2009//520 1231//520 2004//520 +f 2318//521 916//521 1721//521 +f 2786//522 1912//522 1405//522 +f 1614//523 1516//523 1318//523 +f 2110//524 2109//524 2895//524 +f 722//525 934//525 1721//525 +f 916//526 722//526 1721//526 +f 1969//527 2449//527 2439//527 +f 1690//528 1573//528 752//528 +f 1664//529 1554//529 862//529 +f 2471//530 2051//530 2565//530 +f 1638//531 1703//531 1453//531 +f 2318//532 1721//532 2337//532 +f 1895//533 1814//533 1623//533 +f 897//534 898//534 1696//534 +f 1599//535 1600//535 1655//535 +f 1554//536 1560//536 646//536 +f 734//537 2009//537 1702//537 +f 934//538 775//538 1721//538 +f 775//539 934//539 1579//539 +f 1569//540 1647//540 1615//540 +f 1568//541 935//541 917//541 +f 696//542 1623//542 516//542 +f 1695//543 1721//543 834//543 +f 1059//544 2084//544 2075//544 +f 549//545 856//545 946//545 +f 1538//546 1088//546 1655//546 +f 946//547 856//547 526//547 +f 2003//548 1595//548 2061//548 +f 1695//549 834//549 2319//549 +f 2030//550 2197//550 2021//550 +f 871//551 1631//551 1561//551 +f 2075//552 2084//552 2069//552 +f 1604//553 1710//553 1720//553 +f 1561//554 1717//554 1565//554 +f 1679//555 716//555 1635//555 +f 1613//556 855//556 815//556 +f 1688//557 754//557 933//557 +f 1436//558 1435//558 1347//558 +f 1635//559 1594//559 899//559 +f 1329//560 535//560 1697//560 +f 549//561 613//561 856//561 +f 1597//562 912//562 776//562 +f 620//563 608//563 1831//563 +f 608//564 806//564 1831//564 +f 806//565 609//565 1831//565 +f 1454//566 1553//566 1547//566 +f 1814//567 1820//567 947//567 +f 535//568 726//568 985//568 +f 1634//569 1645//569 1551//569 +f 1347//570 1435//570 1202//570 +f 1631//571 871//571 856//571 +f 620//572 785//572 608//572 +f 900//573 741//573 1889//573 +f 1644//574 1558//574 1567//574 +f 933//575 754//575 733//575 +f 1769//576 1758//576 546//576 +f 2071//577 1595//577 2003//577 +f 2576//578 2634//578 2623//578 +f 2548//579 2624//579 944//579 +f 537//580 829//580 1625//580 +f 805//581 608//581 785//581 +f 805//582 806//582 608//582 +f 564//583 900//583 609//583 +f 1478//584 1248//584 1179//584 +f 2130//585 2099//585 2125//585 +f 959//586 1598//586 916//586 +f 1088//587 1599//587 1655//587 +f 2168//588 855//588 2167//588 +f 734//589 1702//589 2154//589 +f 856//590 583//590 526//590 +f 931//591 775//591 842//591 +f 806//592 564//592 609//592 +f 718//593 741//593 900//593 +f 564//594 718//594 900//594 +f 1790//595 1985//595 1825//595 +f 1720//596 1710//596 650//596 +f 1547//597 1569//597 1556//597 +f 1551//598 1558//598 1644//598 +f 1694//599 834//599 931//599 +f 1635//600 716//600 1594//600 +f 839//601 717//601 785//601 +f 805//602 590//602 806//602 +f 806//603 751//603 564//603 +f 2673//604 2210//604 2281//604 +f 1097//605 1443//605 1364//605 +f 2098//606 2099//606 2130//606 +f 2009//607 2004//607 1702//607 +f 2071//608 2003//608 2174//608 +f 1592//609 1583//609 2008//609 +f 2486//610 2506//610 2485//610 +f 697//611 1740//611 2514//611 +f 839//612 943//612 717//612 +f 806//613 590//613 751//613 +f 1666//614 741//614 1657//614 +f 2002//615 1926//615 2003//615 +f 2152//616 2160//616 2167//616 +f 2461//617 2383//617 2982//617 +f 717//618 820//618 805//618 +f 820//619 590//619 805//619 +f 751//620 762//620 564//620 +f 718//621 1657//621 741//621 +f 2909//622 528//622 943//622 +f 2016//623 1395//623 3014//623 +f 515//624 1604//624 716//624 +f 2166//625 2167//625 1613//625 +f 2631//626 2377//626 3010//626 +f 564//627 762//627 718//627 +f 674//628 1306//628 1508//628 +f 1398//629 1402//629 1371//629 +f 1058//630 2631//630 3010//630 +f 1604//631 1720//631 716//631 +f 2977//632 1393//632 3006//632 +f 943//633 820//633 717//633 +f 1012//634 702//634 932//634 +f 1379//635 1398//635 1371//635 +f 1508//636 1512//636 1528//636 +f 1398//637 1411//637 1402//637 +f 2309//638 1462//638 2316//638 +f 722//639 1549//639 1585//639 +f 1579//640 515//640 1580//640 +f 891//641 949//641 1891//641 +f 818//642 943//642 528//642 +f 818//643 820//643 943//643 +f 587//644 574//644 588//644 +f 762//645 1106//645 718//645 +f 1360//646 2778//646 1343//646 +f 1411//647 1426//647 1420//647 +f 1518//648 1505//648 1506//648 +f 1936//649 1935//649 1747//649 +f 1494//650 524//650 817//650 +f 1572//651 1436//651 1423//651 +f 2950//652 2963//652 2932//652 +f 908//653 949//653 891//653 +f 949//654 989//654 960//654 +f 989//655 988//655 960//655 +f 850//656 851//656 875//656 +f 852//657 749//657 886//657 +f 1138//658 662//658 643//658 +f 1326//659 820//659 1110//659 +f 2240//660 1506//660 1533//660 +f 1459//661 2028//661 2025//661 +f 1583//662 2141//662 2142//662 +f 2326//663 2337//663 1695//663 +f 1679//664 1635//664 683//664 +f 961//665 989//665 949//665 +f 3001//666 2972//666 1415//666 +f 556//667 573//667 560//667 +f 915//668 521//668 701//668 +f 1524//669 1484//669 1311//669 +f 2027//670 734//670 2154//670 +f 2988//671 3005//671 2976//671 +f 1108//672 821//672 1528//672 +f 912//673 2027//673 2154//673 +f 821//674 1108//674 1540//674 +f 1059//675 2895//675 2084//675 +f 917//676 935//676 752//676 +f 959//677 916//677 641//677 +f 2125//678 2145//678 2130//678 +f 2319//679 1694//679 1662//679 +f 908//680 961//680 949//680 +f 2855//681 2927//681 2890//681 +f 589//682 588//682 574//682 +f 1055//683 561//683 556//683 +f 561//684 573//684 556//684 +f 1055//685 556//685 542//685 +f 1431//686 1445//686 1617//686 +f 1411//687 1420//687 1397//687 +f 2998//688 2582//688 1293//688 +f 1402//689 1397//689 1371//689 +f 775//690 1579//690 842//690 +f 877//691 1821//691 863//691 +f 891//692 877//692 908//692 +f 958//693 1261//693 978//693 +f 837//694 852//694 876//694 +f 606//695 630//695 588//695 +f 1106//696 1148//696 611//696 +f 1496//697 1541//697 1518//697 +f 1534//698 1496//698 1518//698 +f 1598//699 1568//699 1549//699 +f 722//700 916//700 1598//700 +f 935//701 1633//701 1690//701 +f 1721//702 1695//702 2337//702 +f 1693//703 1701//703 1674//703 +f 777//704 810//704 1857//704 +f 1812//705 810//705 1821//705 +f 1821//706 810//706 863//706 +f 919//707 877//707 863//707 +f 919//708 908//708 877//708 +f 919//709 961//709 908//709 +f 876//710 886//710 898//710 +f 852//711 886//711 876//711 +f 1497//712 1518//712 1501//712 +f 636//713 648//713 653//713 +f 929//714 954//714 928//714 +f 589//715 606//715 588//715 +f 740//716 700//716 760//716 +f 1310//717 1301//717 1214//717 +f 1633//718 1573//718 1690//718 +f 636//719 628//719 605//719 +f 1138//720 643//720 630//720 +f 1155//721 1072//721 1145//721 +f 1825//722 1832//722 2001//722 +f 614//723 1676//723 1684//723 +f 2167//724 855//724 1613//724 +f 1830//725 2497//725 787//725 +f 777//726 791//726 810//726 +f 810//727 872//727 863//727 +f 950//728 961//728 919//728 +f 623//729 1068//729 1084//729 +f 1018//730 1899//730 3015//730 +f 629//731 636//731 605//731 +f 2582//732 2974//732 1293//732 +f 557//733 1291//733 677//733 +f 892//734 919//734 863//734 +f 872//735 892//735 863//735 +f 962//736 961//736 950//736 +f 962//737 990//737 961//737 +f 592//738 591//738 622//738 +f 589//739 574//739 561//739 +f 2278//740 2995//740 2309//740 +f 1231//741 1228//741 2026//741 +f 2004//742 1231//742 2015//742 +f 752//743 1640//743 682//743 +f 2392//744 2380//744 1340//744 +f 2539//745 2874//745 2881//745 +f 765//746 792//746 777//746 +f 792//747 791//747 777//747 +f 791//748 832//748 810//748 +f 810//749 832//749 872//749 +f 832//750 864//750 872//750 +f 892//751 950//751 919//751 +f 898//752 886//752 1696//752 +f 968//753 954//753 929//753 +f 1501//754 1518//754 1506//754 +f 1007//755 990//755 962//755 +f 837//756 1302//756 852//756 +f 917//757 752//757 650//757 +f 2079//758 2017//758 1988//758 +f 811//759 791//759 792//759 +f 811//760 832//760 791//760 +f 872//761 864//761 892//761 +f 892//762 902//762 950//762 +f 990//763 1007//763 1014//763 +f 587//764 619//764 574//764 +f 837//765 851//765 826//765 +f 1467//766 2087//766 2872//766 +f 656//767 675//767 633//767 +f 968//768 957//768 954//768 +f 2376//769 2385//769 1919//769 +f 811//770 833//770 832//770 +f 1074//771 561//771 1055//771 +f 684//772 1837//772 625//772 +f 871//773 1561//773 1564//773 +f 1633//774 612//774 1573//774 +f 2352//775 2391//775 2414//775 +f 2873//776 744//776 765//776 +f 864//777 878//777 892//777 +f 963//778 962//778 950//778 +f 963//779 1007//779 962//779 +f 699//780 700//780 740//780 +f 957//781 983//781 993//781 +f 1388//782 679//782 2994//782 +f 977//783 958//783 978//783 +f 578//784 619//784 605//784 +f 1696//785 954//785 1643//785 +f 2472//786 2165//786 3016//786 +f 1752//787 2548//787 705//787 +f 765//788 793//788 792//788 +f 792//789 793//789 811//789 +f 878//790 902//790 892//790 +f 997//791 1007//791 963//791 +f 648//792 662//792 653//792 +f 758//793 782//793 773//793 +f 1424//794 1456//794 1444//794 +f 619//795 629//795 605//795 +f 538//796 544//796 532//796 +f 1646//797 1001//797 1573//797 +f 2383//798 2461//798 2535//798 +f 3011//799 3008//799 2977//799 +f 2873//800 2899//800 744//800 +f 744//801 794//801 765//801 +f 765//802 794//802 793//802 +f 793//803 822//803 811//803 +f 811//804 822//804 833//804 +f 833//805 878//805 832//805 +f 878//806 864//806 832//806 +f 902//807 909//807 950//807 +f 950//808 909//808 963//808 +f 1007//809 986//809 1014//809 +f 636//810 643//810 648//810 +f 639//811 656//811 638//811 +f 887//812 914//812 907//812 +f 538//813 1071//813 544//813 +f 2778//814 2792//814 2765//814 +f 1775//815 544//815 1783//815 +f 2244//816 2376//816 2391//816 +f 766//817 794//817 744//817 +f 857//818 878//818 833//818 +f 878//819 857//819 902//819 +f 577//820 578//820 605//820 +f 913//821 907//821 930//821 +f 930//822 958//822 977//822 +f 676//823 703//823 656//823 +f 1282//824 887//824 840//824 +f 703//825 1175//825 691//825 +f 703//826 713//826 1175//826 +f 1361//827 1401//827 1378//827 +f 1047//828 1261//828 958//828 +f 2258//829 1536//829 1932//829 +f 1684//830 1038//830 1243//830 +f 635//831 1856//831 642//831 +f 1750//832 1758//832 540//832 +f 794//833 795//833 793//833 +f 795//834 822//834 793//834 +f 857//835 833//835 822//835 +f 857//836 879//836 902//836 +f 902//837 879//837 909//837 +f 879//838 920//838 909//838 +f 920//839 963//839 909//839 +f 997//840 991//840 1007//840 +f 991//841 1005//841 986//841 +f 1007//842 991//842 986//842 +f 592//843 623//843 591//843 +f 680//844 688//844 710//844 +f 995//845 664//845 1328//845 +f 577//846 573//846 578//846 +f 840//847 887//847 907//847 +f 1157//848 774//848 557//848 +f 744//849 767//849 766//849 +f 963//850 955//850 997//850 +f 955//851 991//851 997//851 +f 929//852 930//852 977//852 +f 740//853 760//853 759//853 +f 978//854 984//854 968//854 +f 837//855 876//855 851//855 +f 566//856 551//856 1797//856 +f 767//857 795//857 766//857 +f 795//858 794//858 766//858 +f 823//859 822//859 795//859 +f 844//860 857//860 822//860 +f 880//861 879//861 857//861 +f 955//862 963//862 920//862 +f 978//863 1328//863 529//863 +f 1397//864 1420//864 1401//864 +f 851//865 876//865 885//865 +f 993//866 1012//866 804//866 +f 761//867 1260//867 1517//867 +f 539//868 551//868 1071//868 +f 1154//869 1444//869 1183//869 +f 3000//870 3013//870 2973//870 +f 823//871 844//871 822//871 +f 857//872 844//872 880//872 +f 955//873 951//873 991//873 +f 804//874 1012//874 932//874 +f 638//875 633//875 622//875 +f 591//876 638//876 622//876 +f 1103//877 639//877 623//877 +f 1084//878 1103//878 623//878 +f 639//879 676//879 656//879 +f 1559//880 947//880 1548//880 +f 1721//881 775//881 834//881 +f 2518//882 2988//882 3009//882 +f 1729//883 1742//883 2799//883 +f 879//884 910//884 920//884 +f 910//885 936//885 920//885 +f 936//886 951//886 955//886 +f 920//887 936//887 955//887 +f 573//888 561//888 574//888 +f 565//889 592//889 580//889 +f 875//890 885//890 897//890 +f 710//891 729//891 728//891 +f 977//892 968//892 929//892 +f 541//893 555//893 1049//893 +f 567//894 1797//894 551//894 +f 598//895 1813//895 1797//895 +f 2319//896 834//896 1694//896 +f 768//897 767//897 736//897 +f 768//898 795//898 767//898 +f 823//899 880//899 844//899 +f 910//900 879//900 880//900 +f 970//901 991//901 951//901 +f 998//902 1005//902 991//902 +f 2994//903 2999//903 3007//903 +f 932//904 702//904 701//904 +f 567//905 599//905 1797//905 +f 599//906 598//906 1797//906 +f 934//907 1585//907 1579//907 +f 778//908 795//908 768//908 +f 812//909 823//909 795//909 +f 882//910 880//910 881//910 +f 882//911 910//911 880//911 +f 2153//912 2078//912 1653//912 +f 1074//913 562//913 561//913 +f 596//914 985//914 726//914 +f 539//915 552//915 551//915 +f 716//916 1720//916 1594//916 +f 778//917 812//917 795//917 +f 812//918 845//918 823//918 +f 823//919 845//919 880//919 +f 845//920 881//920 880//920 +f 910//921 882//921 936//921 +f 936//922 970//922 951//922 +f 1005//923 1706//923 827//923 +f 2213//924 2578//924 2224//924 +f 976//925 957//925 993//925 +f 885//926 876//926 898//926 +f 3016//927 2990//927 2978//927 +f 885//928 898//928 897//928 +f 535//929 1246//929 726//929 +f 2085//930 2143//930 2141//930 +f 552//931 553//931 567//931 +f 551//932 552//932 567//932 +f 553//933 599//933 567//933 +f 1687//934 1698//934 918//934 +f 1520//935 2656//935 2188//935 +f 715//936 769//936 768//936 +f 769//937 778//937 768//937 +f 882//938 921//938 936//938 +f 964//939 970//939 936//939 +f 964//940 998//940 970//940 +f 970//941 998//941 991//941 +f 828//942 1706//942 1005//942 +f 2541//943 3015//943 3003//943 +f 2989//944 2985//944 3002//944 +f 1065//945 1006//945 1246//945 +f 978//946 995//946 1328//946 +f 1595//947 2008//947 2061//947 +f 715//948 745//948 769//948 +f 921//949 964//949 936//949 +f 998//950 1008//950 1005//950 +f 1008//951 841//951 1005//951 +f 841//952 828//952 1005//952 +f 1390//953 1311//953 1509//953 +f 1361//954 1370//954 1343//954 +f 639//955 657//955 676//955 +f 648//956 643//956 662//956 +f 2078//957 2085//957 2141//957 +f 931//958 834//958 775//958 +f 842//959 1579//959 1580//959 +f 684//960 670//960 715//960 +f 670//961 745//961 715//961 +f 745//962 796//962 769//962 +f 796//963 778//963 769//963 +f 964//964 999//964 998//964 +f 998//965 999//965 1008//965 +f 2977//966 3000//966 2993//966 +f 673//967 699//967 681//967 +f 1006//968 582//968 726//968 +f 1246//969 1006//969 726//969 +f 582//970 596//970 726//970 +f 1825//971 1985//971 1810//971 +f 615//972 670//972 625//972 +f 846//973 778//973 796//973 +f 846//974 812//974 778//974 +f 846//975 845//975 812//975 +f 845//976 846//976 881//976 +f 921//977 937//977 964//977 +f 964//978 937//978 999//978 +f 1318//979 1516//979 1957//979 +f 2998//980 1293//980 1460//980 +f 1203//981 957//981 976//981 +f 954//982 1203//982 1643//982 +f 680//983 681//983 688//983 +f 552//984 545//984 553//984 +f 626//985 659//985 615//985 +f 615//986 659//986 670//986 +f 670//987 770//987 745//987 +f 846//988 937//988 882//988 +f 881//989 846//989 882//989 +f 882//990 937//990 921//990 +f 1460//991 1293//991 1434//991 +f 1946//992 1775//992 1963//992 +f 975//993 992//993 967//993 +f 978//994 529//994 984//994 +f 545//995 568//995 553//995 +f 553//996 568//996 599//996 +f 600//997 615//997 599//997 +f 659//998 724//998 670//998 +f 796//999 797//999 846//999 +f 797//1000 883//1000 846//1000 +f 883//1001 937//1001 846//1001 +f 937//1002 922//1002 999//1002 +f 1368//1003 1390//1003 1479//1003 +f 592//1004 622//1004 580//1004 +f 954//1005 957//1005 1203//1005 +f 888//1006 2979//1006 1475//1006 +f 1443//1007 1033//1007 1493//1007 +f 568//1008 600//1008 599//1008 +f 670//1009 755//1009 770//1009 +f 770//1010 796//1010 745//1010 +f 770//1011 797//1011 796//1011 +f 903//1012 937//1012 883//1012 +f 903//1013 922//1013 937//1013 +f 922//1014 971//1014 999//1014 +f 971//1015 563//1015 999//1015 +f 999//1016 563//1016 1008//1016 +f 1008//1017 649//1017 841//1017 +f 689//1018 597//1018 828//1018 +f 1681//1019 1654//1019 1997//1019 +f 710//1020 688//1020 729//1020 +f 1211//1021 530//1021 582//1021 +f 1552//1022 596//1022 530//1022 +f 654//1023 631//1023 655//1023 +f 2168//1024 2167//1024 2160//1024 +f 1748//1025 568//1025 545//1025 +f 600//1026 626//1026 615//1026 +f 724//1027 755//1027 670//1027 +f 1437//1028 1431//1028 1425//1028 +f 1211//1029 548//1029 530//1029 +f 659//1030 707//1030 724//1030 +f 770//1031 779//1031 797//1031 +f 779//1032 824//1032 797//1032 +f 797//1033 824//1033 883//1033 +f 824//1034 858//1034 883//1034 +f 858//1035 884//1035 883//1035 +f 884//1036 903//1036 883//1036 +f 923//1037 922//1037 903//1037 +f 923//1038 980//1038 922//1038 +f 980//1039 971//1039 922//1039 +f 980//1040 563//1040 971//1040 +f 563//1041 649//1041 1008//1041 +f 688//1042 739//1042 729//1042 +f 1528//1043 1280//1043 1116//1043 +f 1340//1044 2734//1044 2729//1044 +f 1592//1045 2008//1045 1595//1045 +f 1787//1046 584//1046 600//1046 +f 634//1047 626//1047 600//1047 +f 660//1048 659//1048 626//1048 +f 660//1049 707//1049 659//1049 +f 779//1050 770//1050 755//1050 +f 737//1051 779//1051 755//1051 +f 1000//1052 563//1052 980//1052 +f 689//1053 841//1053 649//1053 +f 619//1054 636//1054 629//1054 +f 994//1055 529//1055 1195//1055 +f 739//1056 748//1056 729//1056 +f 1245//1057 548//1057 1211//1057 +f 600//1058 568//1058 1787//1058 +f 584//1059 634//1059 600//1059 +f 707//1060 755//1060 724//1060 +f 813//1061 824//1061 779//1061 +f 824//1062 847//1062 858//1062 +f 858//1063 865//1063 884//1063 +f 938//1064 980//1064 923//1064 +f 649//1065 563//1065 689//1065 +f 728//1066 729//1066 748//1066 +f 562//1067 589//1067 561//1067 +f 548//1068 523//1068 1552//1068 +f 530//1069 548//1069 1552//1069 +f 717//1070 805//1070 785//1070 +f 523//1071 1072//1071 1268//1071 +f 1709//1072 911//1072 1634//1072 +f 634//1073 660//1073 626//1073 +f 660//1074 708//1074 707//1074 +f 780//1075 779//1075 737//1075 +f 780//1076 813//1076 779//1076 +f 813//1077 847//1077 824//1077 +f 847//1078 865//1078 858//1078 +f 896//1079 897//1079 906//1079 +f 913//1080 930//1080 929//1080 +f 780//1081 847//1081 813//1081 +f 865//1082 866//1082 884//1082 +f 938//1083 1000//1083 980//1083 +f 1001//1084 689//1084 563//1084 +f 521//1085 631//1085 701//1085 +f 1696//1086 928//1086 954//1086 +f 555//1087 556//1087 560//1087 +f 804//1088 803//1088 1011//1088 +f 3016//1089 2978//1089 2987//1089 +f 886//1090 913//1090 928//1090 +f 2084//1091 2099//1091 2098//1091 +f 1580//1092 515//1092 1679//1092 +f 515//1093 716//1093 1679//1093 +f 634//1094 584//1094 616//1094 +f 671//1095 660//1095 634//1095 +f 708//1096 737//1096 707//1096 +f 737//1097 755//1097 707//1097 +f 866//1098 893//1098 884//1098 +f 884//1099 893//1099 903//1099 +f 924//1100 923//1100 903//1100 +f 2992//1101 1923//1101 2472//1101 +f 1320//1102 1459//1102 1516//1102 +f 671//1103 708//1103 660//1103 +f 781//1104 780//1104 737//1104 +f 781//1105 847//1105 780//1105 +f 893//1106 924//1106 903//1106 +f 924//1107 952//1107 923//1107 +f 952//1108 938//1108 923//1108 +f 704//1109 719//1109 657//1109 +f 851//1110 885//1110 875//1110 +f 2729//1111 1344//1111 1340//1111 +f 2145//1112 2160//1112 2152//1112 +f 616//1113 671//1113 634//1113 +f 671//1114 709//1114 708//1114 +f 709//1115 737//1115 708//1115 +f 709//1116 725//1116 737//1116 +f 737//1117 725//1117 781//1117 +f 781//1118 814//1118 847//1118 +f 814//1119 848//1119 865//1119 +f 847//1120 814//1120 865//1120 +f 865//1121 848//1121 866//1121 +f 924//1122 925//1122 952//1122 +f 952//1123 1000//1123 938//1123 +f 1001//1124 563//1124 1000//1124 +f 1389//1125 1108//1125 1503//1125 +f 622//1126 1095//1126 580//1126 +f 739//1127 759//1127 758//1127 +f 826//1128 850//1128 849//1128 +f 665//1129 1268//1129 621//1129 +f 788//1130 1900//1130 814//1130 +f 866//1131 848//1131 893//1131 +f 1437//1132 2243//1132 1610//1132 +f 758//1133 759//1133 782//1133 +f 977//1134 978//1134 968//1134 +f 928//1135 913//1135 929//1135 +f 529//1136 994//1136 984//1136 +f 2161//1137 1583//1137 1592//1137 +f 1423//1138 1436//1138 1347//1138 +f 901//1139 931//1139 842//1139 +f 647//1140 671//1140 616//1140 +f 1828//1141 647//1141 616//1141 +f 647//1142 709//1142 671//1142 +f 1662//1143 1693//1143 1674//1143 +f 1560//1144 1681//1144 696//1144 +f 893//1145 925//1145 924//1145 +f 1306//1146 853//1146 743//1146 +f 905//1147 521//1147 1182//1147 +f 699//1148 740//1148 688//1148 +f 975//1149 804//1149 1011//1149 +f 2541//1150 1018//1150 3015//1150 +f 1710//1151 1568//1151 917//1151 +f 1242//1152 1533//1152 1266//1152 +f 2973//1153 2997//1153 2975//1153 +f 1805//1154 1778//1154 569//1154 +f 647//1155 1870//1155 709//1155 +f 709//1156 1870//1156 725//1156 +f 926//1157 952//1157 925//1157 +f 518//1158 1000//1158 952//1158 +f 972//1159 518//1159 952//1159 +f 518//1160 1001//1160 1000//1160 +f 2234//1161 2086//1161 2285//1161 +f 759//1162 789//1162 782//1162 +f 2383//1163 2535//1163 2573//1163 +f 749//1164 913//1164 886//1164 +f 578//1165 574//1165 619//1165 +f 1350//1166 3006//1166 1393//1166 +f 1829//1167 647//1167 1828//1167 +f 1845//1168 1896//1168 1870//1168 +f 1824//1169 1440//1169 1642//1169 +f 521//1170 1635//1170 631//1170 +f 633//1171 675//1171 1125//1171 +f 894//1172 893//1172 848//1172 +f 893//1173 894//1173 925//1173 +f 981//1174 518//1174 972//1174 +f 1009//1175 1001//1175 518//1175 +f 1009//1176 1640//1176 1001//1176 +f 930//1177 914//1177 1047//1177 +f 993//1178 983//1178 1012//1178 +f 588//1179 630//1179 587//1179 +f 992//1180 975//1180 1011//1180 +f 907//1181 914//1181 930//1181 +f 575//1182 1805//1182 569//1182 +f 1019//1183 2513//1183 2988//1183 +f 2513//1184 3005//1184 2988//1184 +f 713//1185 703//1185 550//1185 +f 1678//1186 1679//1186 683//1186 +f 1693//1187 901//1187 763//1187 +f 904//1188 925//1188 894//1188 +f 925//1189 904//1189 926//1189 +f 972//1190 952//1190 926//1190 +f 1009//1191 682//1191 1640//1191 +f 994//1192 983//1192 984//1192 +f 630//1193 636//1193 619//1193 +f 932//1194 701//1194 654//1194 +f 699//1195 688//1195 681//1195 +f 680//1196 662//1196 681//1196 +f 984//1197 983//1197 957//1197 +f 554//1198 569//1198 546//1198 +f 575//1199 585//1199 1805//1199 +f 585//1200 617//1200 1805//1200 +f 1698//1201 1687//1201 1668//1201 +f 1148//1202 1028//1202 611//1202 +f 939//1203 972//1203 926//1203 +f 1431//1204 1437//1204 1445//1204 +f 2986//1205 3003//1205 1367//1205 +f 1268//1206 1155//1206 1081//1206 +f 558//1207 1081//1207 1677//1207 +f 968//1208 984//1208 957//1208 +f 554//1209 546//1209 1763//1209 +f 547//1210 554//1210 1763//1210 +f 570//1211 569//1211 554//1211 +f 570//1212 575//1212 569//1212 +f 965//1213 1779//1213 953//1213 +f 1694//1214 931//1214 1693//1214 +f 1613//1215 815//1215 1591//1215 +f 1703//1216 1572//1216 1453//1216 +f 1573//1217 735//1217 1646//1217 +f 1112//1218 1588//1218 1589//1218 +f 926//1219 940//1219 939//1219 +f 1164//1220 700//1220 699//1220 +f 748//1221 758//1221 773//1221 +f 740//1222 759//1222 739//1222 +f 1547//1223 1556//1223 1544//1223 +f 3006//1224 1350//1224 761//1224 +f 521//1225 683//1225 1635//1225 +f 1976//1226 1836//1226 1996//1226 +f 939//1227 981//1227 972//1227 +f 1010//1228 518//1228 981//1228 +f 2265//1229 2982//1229 2994//1229 +f 804//1230 932//1230 654//1230 +f 840//1231 1303//1231 1276//1231 +f 656//1232 691//1232 675//1232 +f 679//1233 2265//1233 2994//1233 +f 601//1234 617//1234 585//1234 +f 617//1235 601//1235 618//1235 +f 1694//1236 1693//1236 1662//1236 +f 931//1237 901//1237 1693//1237 +f 2595//1238 2574//1238 2545//1238 +f 1668//1239 1687//1239 1655//1239 +f 695//1240 645//1240 711//1240 +f 956//1241 939//1241 940//1241 +f 1128//1242 658//1242 657//1242 +f 1390//1243 1524//1243 1311//1243 +f 554//1244 559//1244 570//1244 +f 570//1245 559//1245 575//1245 +f 601//1246 585//1246 575//1246 +f 2077//1247 1951//1247 2104//1247 +f 1635//1248 899//1248 631//1248 +f 1662//1249 1674//1249 1651//1249 +f 1963//1250 1973//1250 1953//1250 +f 1542//1251 2976//1251 1443//1251 +f 956//1252 973//1252 939//1252 +f 973//1253 981//1253 939//1253 +f 682//1254 1009//1254 518//1254 +f 1010//1255 682//1255 518//1255 +f 2277//1256 1917//1256 1958//1256 +f 654//1257 701//1257 631//1257 +f 758//1258 748//1258 739//1258 +f 760//1259 1254//1259 783//1259 +f 886//1260 928//1260 1696//1260 +f 554//1261 1061//1261 559//1261 +f 559//1262 576//1262 575//1262 +f 576//1263 601//1263 575//1263 +f 601//1264 602//1264 618//1264 +f 1598//1265 1031//1265 1568//1265 +f 901//1266 842//1266 1578//1266 +f 2981//1267 3011//1267 2999//1267 +f 800//1268 1877//1268 816//1268 +f 719//1269 703//1269 676//1269 +f 804//1270 654//1270 803//1270 +f 728//1271 748//1271 738//1271 +f 907//1272 913//1272 1323//1272 +f 829//1273 1645//1273 911//1273 +f 816//1274 835//1274 867//1274 +f 1678//1275 683//1275 905//1275 +f 941//1276 973//1276 956//1276 +f 731//1277 1010//1277 981//1277 +f 731//1278 682//1278 1010//1278 +f 1492//1279 1483//1279 2588//1279 +f 875//1280 897//1280 896//1280 +f 783//1281 790//1281 759//1281 +f 1954//1282 525//1282 819//1282 +f 576//1283 602//1283 601//1283 +f 842//1284 1580//1284 1578//1284 +f 1580//1285 1679//1285 1678//1285 +f 756//1286 801//1286 816//1286 +f 1877//1287 756//1287 816//1287 +f 801//1288 835//1288 816//1288 +f 1693//1289 763//1289 1701//1289 +f 1497//1290 1534//1290 1518//1290 +f 978//1291 1261//1291 995//1291 +f 1302//1292 837//1292 790//1292 +f 783//1293 759//1293 760//1293 +f 602//1294 603//1294 1839//1294 +f 685//1295 686//1295 756//1295 +f 874//1296 867//1296 835//1296 +f 874//1297 1868//1297 867//1297 +f 1571//1298 1578//1298 1678//1298 +f 2698//1299 2702//1299 2697//1299 +f 974//1300 973//1300 965//1300 +f 974//1301 981//1301 973//1301 +f 663//1302 682//1302 731//1302 +f 663//1303 650//1303 682//1303 +f 630//1304 643//1304 636//1304 +f 623//1305 638//1305 591//1305 +f 673//1306 681//1306 662//1306 +f 542//1307 556//1307 555//1307 +f 571//1308 602//1308 576//1308 +f 559//1309 571//1309 576//1309 +f 1850//1310 1839//1310 603//1310 +f 603//1311 586//1311 1850//1311 +f 661//1312 686//1312 685//1312 +f 686//1313 772//1313 756//1313 +f 772//1314 771//1314 756//1314 +f 771//1315 801//1315 756//1315 +f 771//1316 835//1316 801//1316 +f 859//1317 874//1317 835//1317 +f 874//1318 895//1318 1868//1318 +f 1583//1319 1452//1319 2169//1319 +f 901//1320 987//1320 763//1320 +f 784//1321 731//1321 981//1321 +f 644//1322 650//1322 663//1322 +f 1365//1323 1361//1323 1343//1323 +f 1497//1324 1501//1324 1489//1324 +f 703//1325 691//1325 656//1325 +f 602//1326 586//1326 603//1326 +f 698//1327 772//1327 686//1327 +f 771//1328 802//1328 835//1328 +f 1779//1329 965//1329 973//1329 +f 784//1330 663//1330 731//1330 +f 740//1331 739//1331 688//1331 +f 541//1332 542//1332 555//1332 +f 623//1333 639//1333 638//1333 +f 1061//1334 571//1334 559//1334 +f 571//1335 572//1335 602//1335 +f 602//1336 572//1336 586//1336 +f 2990//1337 2998//1337 2972//1337 +f 661//1338 698//1338 686//1338 +f 698//1339 727//1339 772//1339 +f 772//1340 757//1340 771//1340 +f 757//1341 802//1341 771//1341 +f 859//1342 835//1342 802//1342 +f 905//1343 683//1343 521//1343 +f 982//1344 974//1344 965//1344 +f 982//1345 1002//1345 974//1345 +f 784//1346 981//1346 974//1346 +f 1002//1347 784//1347 974//1347 +f 1720//1348 650//1348 644//1348 +f 995//1349 1307//1349 664//1349 +f 657//1350 719//1350 676//1350 +f 656//1351 633//1351 638//1351 +f 572//1352 604//1352 586//1352 +f 604//1353 642//1353 586//1353 +f 661//1354 687//1354 698//1354 +f 687//1355 727//1355 698//1355 +f 727//1356 747//1356 772//1356 +f 772//1357 747//1357 757//1357 +f 868//1358 874//1358 859//1358 +f 868//1359 895//1359 874//1359 +f 1540//1360 1505//1360 821//1360 +f 782//1361 826//1361 773//1361 +f 1720//1362 644//1362 1594//1362 +f 630//1363 619//1363 587//1363 +f 653//1364 662//1364 680//1364 +f 789//1365 826//1365 782//1365 +f 702//1366 915//1366 701//1366 +f 2993//1367 2973//1367 2975//1367 +f 572//1368 577//1368 604//1368 +f 1578//1369 1580//1369 1678//1369 +f 1578//1370 987//1370 901//1370 +f 802//1371 825//1371 859//1371 +f 825//1372 868//1372 859//1372 +f 1510//1373 1508//1373 821//1373 +f 966//1374 982//1374 953//1374 +f 966//1375 992//1375 982//1375 +f 992//1376 1002//1376 982//1376 +f 655//1377 644//1377 663//1377 +f 2078//1378 2153//1378 2077//1378 +f 1061//1379 555//1379 571//1379 +f 2595//1380 2621//1380 2574//1380 +f 896//1381 895//1381 868//1381 +f 1011//1382 784//1382 1002//1382 +f 803//1383 663//1383 784//1383 +f 803//1384 655//1384 663//1384 +f 628//1385 636//1385 653//1385 +f 573//1386 574//1386 578//1386 +f 789//1387 837//1387 826//1387 +f 915//1388 1182//1388 521//1388 +f 555//1389 560//1389 571//1389 +f 571//1390 560//1390 572//1390 +f 1973//1391 1859//1391 1783//1391 +f 1856//1392 635//1392 672//1392 +f 680//1393 687//1393 672//1393 +f 727//1394 738//1394 747//1394 +f 747//1395 773//1395 757//1395 +f 757//1396 836//1396 802//1396 +f 836//1397 825//1397 802//1397 +f 967//1398 992//1398 966//1398 +f 1011//1399 803//1399 784//1399 +f 1426//1400 1425//1400 1420//1400 +f 790//1401 837//1401 789//1401 +f 790//1402 789//1402 759//1402 +f 560//1403 577//1403 572//1403 +f 604//1404 635//1404 642//1404 +f 687//1405 728//1405 727//1405 +f 727//1406 728//1406 738//1406 +f 773//1407 836//1407 757//1407 +f 850//1408 825//1408 836//1408 +f 850//1409 868//1409 825//1409 +f 875//1410 896//1410 868//1410 +f 1557//1411 953//1411 1804//1411 +f 1011//1412 1002//1412 992//1412 +f 899//1413 644//1413 655//1413 +f 899//1414 1594//1414 644//1414 +f 658//1415 704//1415 657//1415 +f 1049//1416 555//1416 1061//1416 +f 635//1417 680//1417 672//1417 +f 849//1418 850//1418 836//1418 +f 868//1419 850//1419 875//1419 +f 2518//1420 2995//1420 2278//1420 +f 1212//1421 953//1421 1557//1421 +f 803//1422 654//1422 655//1422 +f 1437//1423 1610//1423 1445//1423 +f 1164//1424 699//1424 673//1424 +f 560//1425 573//1425 577//1425 +f 577//1426 605//1426 604//1426 +f 604//1427 628//1427 635//1427 +f 635//1428 653//1428 680//1428 +f 687//1429 710//1429 728//1429 +f 773//1430 849//1430 836//1430 +f 2992//1431 3016//1431 2948//1431 +f 826//1432 851//1432 850//1432 +f 604//1433 605//1433 628//1433 +f 628//1434 653//1434 635//1434 +f 680//1435 710//1435 687//1435 +f 738//1436 748//1436 747//1436 +f 748//1437 773//1437 747//1437 +f 773//1438 826//1438 849//1438 +f 1638//1439 1430//1439 1703//1439 +f 1056//1440 1055//1440 1044//1440 +f 976//1441 993//1441 804//1441 +f 783//1442 1297//1442 790//1442 +f 1327//1443 1081//1443 1155//1443 +f 790//1444 1297//1444 1302//1444 +f 596//1445 1552//1445 1847//1445 +f 1330//1446 1215//1446 1217//1446 +f 1186//1447 651//1447 1117//1447 +f 1139//1448 1149//1448 1138//1448 +f 2971//1449 2953//1449 2487//1449 +f 1281//1450 1047//1450 1043//1450 +f 2982//1451 2383//1451 2994//1451 +f 1176//1452 704//1452 1153//1452 +f 1225//1453 1234//1453 1233//1453 +f 1144//1454 1153//1454 1128//1454 +f 675//1455 1168//1455 1152//1455 +f 1295//1456 1505//1456 1496//1456 +f 1741//1457 545//1457 1030//1457 +f 1162//1458 1153//1458 1144//1458 +f 1144//1459 1128//1459 1104//1459 +f 2612//1460 1058//1460 2413//1460 +f 1092//1461 1093//1461 1100//1461 +f 1211//1462 1006//1462 1065//1462 +f 1043//1463 1047//1463 914//1463 +f 1383//1464 1373//1464 1384//1464 +f 2246//1465 1438//1465 1428//1465 +f 1518//1466 1541//1466 1505//1466 +f 1315//1467 1105//1467 1117//1467 +f 1150//1468 1190//1468 1165//1468 +f 1390//1469 1463//1469 1479//1469 +f 2721//1470 2303//1470 2373//1470 +f 590//1471 1253//1471 751//1471 +f 702//1472 1195//1472 529//1472 +f 1092//1473 1118//1473 1113//1473 +f 1311//1474 1130//1474 1509//1474 +f 1024//1475 2549//1475 1879//1475 +f 590//1476 1326//1476 1131//1476 +f 1131//1477 1253//1477 590//1477 +f 1982//1478 607//1478 2279//1478 +f 1110//1479 1060//1479 1326//1479 +f 1971//1480 1819//1480 1991//1480 +f 1274//1481 711//1481 664//1481 +f 1185//1482 1287//1482 1279//1482 +f 1100//1483 1123//1483 1118//1483 +f 1105//1484 1214//1484 1146//1484 +f 990//1485 2826//1485 988//1485 +f 2598//1486 2541//1486 3003//1486 +f 1096//1487 1104//1487 1085//1487 +f 2069//1488 2963//1488 2510//1488 +f 1188//1489 1060//1489 1110//1489 +f 1326//1490 1169//1490 1131//1490 +f 675//1491 691//1491 1175//1491 +f 1113//1492 1118//1492 1150//1492 +f 1214//1493 1301//1493 1090//1493 +f 1290//1494 1189//1494 1086//1494 +f 1290//1495 1188//1495 1189//1495 +f 1131//1496 1148//1496 1253//1496 +f 1105//1497 1146//1497 1163//1497 +f 1126//1498 1060//1498 1188//1498 +f 1131//1499 1169//1499 1148//1499 +f 1242//1500 1266//1500 1220//1500 +f 1085//1501 2825//1501 2819//1501 +f 1289//1502 1188//1502 1290//1502 +f 1289//1503 1126//1503 1188//1503 +f 1126//1504 1142//1504 1060//1504 +f 1060//1505 1142//1505 1326//1505 +f 1326//1506 1142//1506 1169//1506 +f 1134//1507 1144//1507 1129//1507 +f 1134//1508 1162//1508 1144//1508 +f 1181//1509 1167//1509 1160//1509 +f 1324//1510 1296//1510 1299//1510 +f 664//1511 711//1511 1328//1511 +f 1048//1512 2031//1512 2514//1512 +f 1216//1513 1086//1513 2892//1513 +f 1262//1514 1290//1514 1086//1514 +f 1169//1515 1127//1515 1148//1515 +f 1425//1516 1431//1516 1419//1516 +f 1162//1517 1193//1517 1176//1517 +f 1241//1518 1285//1518 1227//1518 +f 1264//1519 1321//1519 1313//1519 +f 1153//1520 704//1520 658//1520 +f 1176//1521 1193//1521 714//1521 +f 1216//1522 1262//1522 1086//1522 +f 1289//1523 1290//1523 1262//1523 +f 1142//1524 1232//1524 1169//1524 +f 1140//1525 1172//1525 1159//1525 +f 1305//1526 1292//1526 1304//1526 +f 1126//1527 1325//1527 1142//1527 +f 1127//1528 1028//1528 1148//1528 +f 1894//1529 2270//1529 2187//1529 +f 1084//1530 1104//1530 1128//1530 +f 1234//1531 1255//1531 1233//1531 +f 1588//1532 1309//1532 1349//1532 +f 1128//1533 1153//1533 658//1533 +f 1126//1534 1289//1534 1325//1534 +f 1232//1535 1249//1535 1169//1535 +f 1169//1536 1249//1536 1127//1536 +f 1312//1537 852//1537 1302//1537 +f 1150//1538 1166//1538 1190//1538 +f 1085//1539 1104//1539 1069//1539 +f 1042//1540 1244//1540 1201//1540 +f 1204//1541 1216//1541 2826//1541 +f 990//1542 1204//1542 2826//1542 +f 1325//1543 1232//1543 1142//1543 +f 1235//1544 1292//1544 1241//1544 +f 1262//1545 1216//1545 1204//1545 +f 1249//1546 1200//1546 1127//1546 +f 2031//1547 2516//1547 2641//1547 +f 1168//1548 1199//1548 1181//1548 +f 1083//1549 1102//1549 1120//1549 +f 1027//1550 1045//1550 1052//1550 +f 1052//1551 1063//1551 1062//1551 +f 1063//1552 1067//1552 1062//1552 +f 1064//1553 1102//1553 1063//1553 +f 2417//1554 1383//1554 1384//1554 +f 1205//1555 1289//1555 1262//1555 +f 1205//1556 1114//1556 1289//1556 +f 1114//1557 1325//1557 1289//1557 +f 1325//1558 1077//1558 1232//1558 +f 1077//1559 1250//1559 1232//1559 +f 1232//1560 1250//1560 1249//1560 +f 1250//1561 1161//1561 1249//1561 +f 1249//1562 1161//1562 1200//1562 +f 1200//1563 1259//1563 1127//1563 +f 1259//1564 1028//1564 1127//1564 +f 1083//1565 1120//1565 1119//1565 +f 1168//1566 1181//1566 1152//1566 +f 1365//1567 1371//1567 1361//1567 +f 1102//1568 1083//1568 1063//1568 +f 1204//1569 1205//1569 1262//1569 +f 1194//1570 1028//1570 1259//1570 +f 2641//1571 2516//1571 2608//1571 +f 1261//1572 1215//1572 995//1572 +f 914//1573 887//1573 1043//1573 +f 1114//1574 1050//1574 1325//1574 +f 1050//1575 1077//1575 1325//1575 +f 1820//1576 741//1576 1666//1576 +f 1036//1577 538//1577 532//1577 +f 1037//1578 538//1578 1036//1578 +f 1379//1579 1371//1579 1365//1579 +f 2545//1580 2574//1580 2054//1580 +f 1281//1581 1215//1581 1261//1581 +f 1132//1582 1166//1582 1123//1582 +f 1166//1583 1150//1583 1123//1583 +f 1087//1584 536//1584 1224//1584 +f 1156//1585 1213//1585 1244//1585 +f 2036//1586 2032//1586 2990//1586 +f 1014//1587 1143//1587 1205//1587 +f 1204//1588 1014//1588 1205//1588 +f 1205//1589 1143//1589 1114//1589 +f 1294//1590 1158//1590 1155//1590 +f 1093//1591 1092//1591 1075//1591 +f 645//1592 1182//1592 711//1592 +f 711//1593 1182//1593 1328//1593 +f 1303//1594 1323//1594 1312//1594 +f 1136//1595 1274//1595 664//1595 +f 1135//1596 1077//1596 1050//1596 +f 1187//1597 1259//1597 1200//1597 +f 1187//1598 1332//1598 1259//1598 +f 1332//1599 1194//1599 1259//1599 +f 1194//1600 610//1600 1028//1600 +f 3009//1601 2976//1601 1542//1601 +f 1542//1602 1097//1602 1089//1602 +f 1177//1603 1308//1603 1178//1603 +f 1143//1604 1275//1604 1114//1604 +f 1275//1605 1271//1605 1114//1605 +f 1114//1606 1271//1606 1050//1606 +f 1135//1607 1210//1607 1077//1607 +f 1269//1608 1250//1608 1077//1608 +f 1210//1609 1269//1609 1077//1609 +f 1147//1610 1250//1610 1269//1610 +f 1147//1611 1161//1611 1250//1611 +f 1137//1612 1200//1612 1161//1612 +f 1147//1613 1137//1613 1161//1613 +f 1200//1614 1137//1614 1187//1614 +f 1333//1615 1194//1615 1332//1615 +f 1194//1616 1333//1616 610//1616 +f 2243//1617 2191//1617 1610//1617 +f 2996//1618 2413//1618 2985//1618 +f 1051//1619 1050//1619 1271//1619 +f 1050//1620 1051//1620 1135//1620 +f 1187//1621 1333//1621 1332//1621 +f 2942//1622 736//1622 744//1622 +f 539//1623 538//1623 1037//1623 +f 539//1624 1071//1624 538//1624 +f 552//1625 539//1625 533//1625 +f 1224//1626 536//1626 786//1626 +f 1177//1627 1273//1627 1308//1627 +f 1634//1628 1392//1628 1709//1628 +f 1051//1629 1210//1629 1135//1629 +f 1210//1630 1147//1630 1269//1630 +f 1336//1631 2729//1631 2734//1631 +f 611//1632 610//1632 1567//1632 +f 1264//1633 1298//1633 1257//1633 +f 1401//1634 1419//1634 1378//1634 +f 1282//1635 1298//1635 887//1635 +f 1026//1636 1027//1636 1062//1636 +f 1087//1637 1178//1637 536//1637 +f 1210//1638 1229//1638 1147//1638 +f 1187//1639 1035//1639 1333//1639 +f 2968//1640 2967//1640 2959//1640 +f 1397//1641 1401//1641 1361//1641 +f 820//1642 1326//1642 590//1642 +f 1156//1643 1042//1643 1273//1643 +f 1312//1644 1323//1644 749//1644 +f 1508//1645 1306//1645 1512//1645 +f 1101//1646 1140//1646 1100//1646 +f 2414//1647 2432//1647 2451//1647 +f 1159//1648 1166//1648 1132//1648 +f 1051//1649 1300//1649 1210//1649 +f 1035//1650 1107//1650 1333//1650 +f 1029//1651 533//1651 1037//1651 +f 1255//1652 1263//1652 1233//1652 +f 1303//1653 840//1653 1323//1653 +f 1053//1654 1095//1654 1064//1654 +f 1171//1655 1291//1655 1237//1655 +f 1198//1656 1227//1656 1174//1656 +f 1206//1657 1226//1657 1234//1657 +f 1166//1658 1180//1658 1206//1658 +f 1021//1659 1275//1659 1143//1659 +f 986//1660 1021//1660 1143//1660 +f 1021//1661 1271//1661 1275//1661 +f 1137//1662 1147//1662 1187//1662 +f 1238//1663 1035//1663 1187//1663 +f 1029//1664 1030//1664 533//1664 +f 818//1665 1189//1665 1188//1665 +f 692//1666 1292//1666 1235//1666 +f 1461//1667 1961//1667 2872//1667 +f 1140//1668 1159//1668 1132//1668 +f 1100//1669 1140//1669 1132//1669 +f 1298//1670 1282//1670 1256//1670 +f 1267//1671 1051//1671 1271//1671 +f 1051//1672 1267//1672 1300//1672 +f 1238//1673 1495//1673 1035//1673 +f 1035//1674 1495//1674 1107//1674 +f 1493//1675 1073//1675 1364//1675 +f 1151//1676 1174//1676 1191//1676 +f 1301//1677 1145//1677 1090//1677 +f 655//1678 631//1678 899//1678 +f 1323//1679 913//1679 749//1679 +f 1155//1680 1268//1680 1072//1680 +f 1056//1681 1067//1681 1075//1681 +f 1256//1682 1282//1682 1276//1682 +f 958//1683 930//1683 1047//1683 +f 1042//1684 1201//1684 1310//1684 +f 1327//1685 1112//1685 1080//1685 +f 2004//1686 2015//1686 2071//1686 +f 1267//1687 1271//1687 1021//1687 +f 1300//1688 1229//1688 1210//1688 +f 1147//1689 1238//1689 1187//1689 +f 2604//1690 2576//1690 2623//1690 +f 1160//1691 1167//1691 1174//1691 +f 1174//1692 1208//1692 1197//1692 +f 1191//1693 1174//1693 1197//1693 +f 2386//1694 1353//1694 1352//1694 +f 1738//1695 532//1695 544//1695 +f 840//1696 907//1696 1323//1696 +f 1313//1697 1043//1697 887//1697 +f 827//1698 1021//1698 986//1698 +f 1229//1699 1288//1699 1147//1699 +f 1488//1700 1213//1700 1355//1700 +f 1217//1701 1334//1701 1330//1701 +f 1206//1702 1225//1702 1190//1702 +f 1528//1703 869//1703 1280//1703 +f 1389//1704 1266//1704 1533//1704 +f 1141//1705 1160//1705 1174//1705 +f 1225//1706 1206//1706 1234//1706 +f 1166//1707 1206//1707 1190//1707 +f 1313//1708 887//1708 1298//1708 +f 1327//1709 1080//1709 1081//1709 +f 2976//1710 2996//1710 2989//1710 +f 1278//1711 1158//1711 1294//1711 +f 1993//1712 2438//1712 2430//1712 +f 1267//1713 1252//1713 1300//1713 +f 1252//1714 1121//1714 1300//1714 +f 1300//1715 1121//1715 1229//1715 +f 1229//1716 1038//1716 1288//1716 +f 1147//1717 1288//1717 1238//1717 +f 1073//1718 1493//1718 1186//1718 +f 1272//1719 1312//1719 1297//1719 +f 1197//1720 1208//1720 1219//1720 +f 1334//1721 1217//1721 1076//1721 +f 1278//1722 1201//1722 1158//1722 +f 1258//1723 1257//1723 1239//1723 +f 827//1724 1267//1724 1021//1724 +f 1121//1725 1038//1725 1229//1725 +f 1178//1726 1315//1726 536//1726 +f 1160//1727 1141//1727 1124//1727 +f 1314//1728 1334//1728 1076//1728 +f 1264//1729 1283//1729 1321//1729 +f 1281//1730 1261//1730 1047//1730 +f 1092//1731 1100//1731 1118//1731 +f 1376//1732 1107//1732 1495//1732 +f 1202//1733 2896//1733 1597//1733 +f 820//1734 818//1734 1188//1734 +f 1252//1735 1098//1735 1121//1735 +f 682//1736 650//1736 752//1736 +f 1287//1737 1066//1737 1279//1737 +f 2987//1738 2978//1738 2972//1738 +f 1287//1739 1307//1739 1066//1739 +f 1140//1740 1133//1740 1172//1740 +f 1521//1741 1653//1741 1527//1741 +f 1076//1742 1043//1742 1313//1742 +f 1258//1743 1264//1743 1257//1743 +f 1173//1744 1197//1744 1207//1744 +f 1191//1745 1197//1745 1173//1745 +f 827//1746 1251//1746 1267//1746 +f 1267//1747 1251//1747 1252//1747 +f 1121//1748 1243//1748 1038//1748 +f 541//1749 1032//1749 542//1749 +f 1067//1750 1083//1750 1094//1750 +f 1171//1751 677//1751 1291//1751 +f 1094//1752 1083//1752 1119//1752 +f 1303//1753 1312//1753 1272//1753 +f 1283//1754 1076//1754 1321//1754 +f 1334//1755 1185//1755 1330//1755 +f 1152//1756 1160//1756 1125//1756 +f 1588//1757 1112//1757 1158//1757 +f 1264//1758 1313//1758 1298//1758 +f 2445//1759 1421//1759 1412//1759 +f 2997//1760 3001//1760 2975//1760 +f 1251//1761 1098//1761 1252//1761 +f 1953//1762 1952//1762 1945//1762 +f 2612//1763 1727//1763 1058//1763 +f 562//1764 1092//1764 589//1764 +f 1310//1765 1145//1765 1301//1765 +f 1329//1766 1246//1766 535//1766 +f 1095//1767 1102//1767 1064//1767 +f 1139//1768 1150//1768 1165//1768 +f 1292//1769 1525//1769 1324//1769 +f 1207//1770 1219//1770 1239//1770 +f 1207//1771 1197//1771 1219//1771 +f 750//1772 2435//1772 2480//1772 +f 1098//1773 1243//1773 1121//1773 +f 2751//1774 2380//1774 2741//1774 +f 1044//1775 1055//1775 542//1775 +f 751//1776 1253//1776 762//1776 +f 1026//1777 1044//1777 542//1777 +f 1241//1778 1292//1778 1285//1778 +f 1198//1779 1241//1779 1227//1779 +f 2751//1780 2734//1780 1340//1780 +f 1056//1781 1075//1781 1074//1781 +f 1042//1782 1310//1782 1214//1782 +f 1322//1783 1299//1783 1185//1783 +f 1253//1784 1106//1784 762//1784 +f 1409//1785 1419//1785 1410//1785 +f 1254//1786 760//1786 700//1786 +f 786//1787 651//1787 1493//1787 +f 1284//1788 1283//1788 1258//1788 +f 1226//1789 1256//1789 1234//1789 +f 1727//1790 2540//1790 1058//1790 +f 2402//1791 1749//1791 2952//1791 +f 1069//1792 1068//1792 2825//1792 +f 1251//1793 827//1793 1706//1793 +f 2099//1794 2126//1794 2125//1794 +f 1209//1795 1235//1795 1199//1795 +f 1032//1796 531//1796 542//1796 +f 1283//1797 1284//1797 1076//1797 +f 1233//1798 1263//1798 1254//1798 +f 1162//1799 1183//1799 1193//1799 +f 1287//1800 1171//1800 1237//1800 +f 1120//1801 1151//1801 1133//1801 +f 2586//1802 2576//1802 2556//1802 +f 1120//1803 1133//1803 1140//1803 +f 1063//1804 1083//1804 1067//1804 +f 675//1805 1152//1805 1125//1805 +f 1424//1806 1431//1806 1456//1806 +f 1431//1807 1617//1807 1456//1807 +f 1505//1808 1540//1808 1506//1808 +f 1493//1809 651//1809 1186//1809 +f 1299//1810 677//1810 1171//1810 +f 1224//1811 3002//1811 2986//1811 +f 1125//1812 1095//1812 633//1812 +f 1322//1813 1185//1813 1334//1813 +f 2334//1814 2414//1814 2384//1814 +f 1273//1815 1214//1815 1105//1815 +f 1151//1816 1191//1816 1133//1816 +f 3008//1817 3004//1817 2977//1817 +f 1185//1818 1279//1818 1330//1818 +f 1201//1819 1278//1819 1294//1819 +f 1533//1820 1506//1820 1540//1820 +f 2240//1821 2233//1821 1501//1821 +f 1227//1822 1285//1822 1208//1822 +f 565//1823 2869//1823 592//1823 +f 1024//1824 1040//1824 1039//1824 +f 1039//1825 1040//1825 1763//1825 +f 1040//1826 547//1826 1763//1826 +f 2825//1827 1068//1827 2849//1827 +f 1341//1828 1362//1828 1354//1828 +f 1117//1829 1105//1829 1163//1829 +f 1272//1830 783//1830 1254//1830 +f 2109//1831 2126//1831 2100//1831 +f 2208//1832 1562//1832 2213//1832 +f 1196//1833 1254//1833 700//1833 +f 536//1834 1315//1834 1117//1834 +f 1069//1835 1084//1835 1068//1835 +f 1567//1836 624//1836 611//1836 +f 1129//1837 1096//1837 1115//1837 +f 1328//1838 1182//1838 702//1838 +f 1239//1839 1219//1839 1258//1839 +f 1042//1840 1214//1840 1273//1840 +f 1154//1841 1162//1841 1134//1841 +f 1217//1842 1215//1842 1076//1842 +f 1400//1843 1406//1843 1096//1843 +f 1145//1844 1245//1844 1090//1844 +f 1601//1845 2349//1845 2261//1845 +f 1396//1846 1378//1846 1409//1846 +f 1470//1847 1464//1847 1617//1847 +f 2016//1848 3014//1848 2984//1848 +f 719//1849 704//1849 714//1849 +f 1329//1850 1392//1850 1130//1850 +f 1130//1851 1392//1851 1509//1851 +f 1697//1852 1392//1852 1329//1852 +f 2115//1853 2341//1853 1395//1853 +f 1041//1854 1049//1854 1040//1854 +f 2698//1855 2697//1855 2689//1855 +f 1656//1856 1639//1856 1647//1856 +f 749//1857 852//1857 1312//1857 +f 674//1858 853//1858 1306//1858 +f 1113//1859 606//1859 589//1859 +f 1112//1860 1630//1860 1080//1860 +f 1145//1861 1072//1861 1245//1861 +f 1285//1862 1284//1862 1258//1862 +f 1244//1863 1042//1863 1156//1863 +f 1355//1864 1213//1864 1156//1864 +f 1182//1865 915//1865 702//1865 +f 1024//1866 1041//1866 1040//1866 +f 1263//1867 1272//1867 1254//1867 +f 1220//1868 1235//1868 1209//1868 +f 1208//1869 1240//1869 1219//1869 +f 1208//1870 1258//1870 1240//1870 +f 1420//1871 1425//1871 1419//1871 +f 1175//1872 1209//1872 675//1872 +f 1222//1873 1329//1873 1130//1873 +f 1049//1874 1061//1874 547//1874 +f 1308//1875 1273//1875 1105//1875 +f 1292//1876 1322//1876 1304//1876 +f 783//1877 1272//1877 1297//1877 +f 1285//1878 1258//1878 1208//1878 +f 1314//1879 1322//1879 1334//1879 +f 1085//1880 1400//1880 1096//1880 +f 1368//1881 1462//1881 1524//1881 +f 1420//1871 1419//1871 1401//1871 +f 1139//1882 1165//1882 1149//1882 +f 2514//1883 1740//1883 1048//1883 +f 2654//1884 2018//1884 2530//1884 +f 1115//1885 1134//1885 1129//1885 +f 1134//1886 1115//1886 1154//1886 +f 1162//1887 1154//1887 1183//1887 +f 1212//1888 966//1888 953//1888 +f 1185//1889 1299//1889 1171//1889 +f 2075//1890 2870//1890 1059//1890 +f 1199//1891 1167//1891 1181//1891 +f 1199//1892 1241//1892 1198//1892 +f 1082//1893 1130//1893 1311//1893 +f 1222//1894 1246//1894 1329//1894 +f 607//1895 743//1895 853//1895 +f 1379//1896 1365//1896 1353//1896 +f 1456//1897 1617//1897 1464//1897 +f 1103//1898 1128//1898 639//1898 +f 1120//1899 1124//1899 1141//1899 +f 1465//1900 1348//1900 1387//1900 +f 606//1901 1113//1901 1139//1901 +f 2392//1902 1344//1902 2416//1902 +f 2996//1903 2612//1903 2413//1903 +f 1082//1904 1222//1904 1130//1904 +f 1222//1905 1065//1905 1246//1905 +f 2948//1906 3001//1906 2997//1906 +f 674//1907 1478//1907 1179//1907 +f 2830//1908 2905//1908 2823//1908 +f 1276//1909 1272//1909 1263//1909 +f 1084//1910 1128//1910 1103//1910 +f 1402//1911 1411//1911 1397//1911 +f 2514//1912 2031//1912 1902//1912 +f 1199//1913 1235//1913 1241//1913 +f 1102//1914 1124//1914 1120//1914 +f 1167//1915 1199//1915 1198//1915 +f 1165//1916 1164//1916 1149//1916 +f 1274//1917 1665//1917 520//1917 +f 1307//1918 1136//1918 664//1918 +f 1165//1919 1190//1919 1164//1919 +f 1258//1920 1283//1920 1264//1920 +f 1055//1921 1056//1921 1074//1921 +f 990//1922 1014//1922 1204//1922 +f 987//1923 1578//1923 1571//1923 +f 1075//1924 1092//1924 1074//1924 +f 1150//1925 1139//1925 1113//1925 +f 1390//1926 1509//1926 1463//1926 +f 1343//1927 1370//1927 1360//1927 +f 1196//1928 1218//1928 1254//1928 +f 1305//1929 1304//1929 1284//1929 +f 2980//1930 3014//1930 2974//1930 +f 1093//1931 1101//1931 1100//1931 +f 1866//1932 1722//1932 1609//1932 +f 2198//1933 1993//1933 2430//1933 +f 1118//1934 1123//1934 1150//1934 +f 1265//1935 1235//1935 1220//1935 +f 1324//1936 1122//1936 1296//1936 +f 1186//1937 1117//1937 1163//1937 +f 989//1938 961//1938 990//1938 +f 1308//1939 1105//1939 1315//1939 +f 1196//1940 700//1940 1164//1940 +f 1322//1941 1314//1941 1304//1941 +f 1158//1942 1112//1942 1327//1942 +f 1218//1943 1233//1943 1254//1943 +f 1525//1944 1122//1944 1324//1944 +f 1706//1945 1098//1945 1251//1945 +f 1201//1946 1294//1946 1310//1946 +f 2851//1947 988//1947 2826//1947 +f 1152//1948 1181//1948 1160//1948 +f 1220//1949 1700//1949 1242//1949 +f 1247//1950 1089//1950 1082//1950 +f 1109//1951 1065//1951 1222//1951 +f 1109//1952 1054//1952 1065//1952 +f 1822//1953 1015//1953 2366//1953 +f 1179//1954 853//1954 674//1954 +f 1041//1955 2961//1955 1049//1955 +f 1072//1956 523//1956 1245//1956 +f 1237//1957 1307//1957 1287//1957 +f 1174//1958 1227//1958 1208//1958 +f 1207//1959 1239//1959 1180//1959 +f 1076//1960 1281//1960 1043//1960 +f 1064//1961 1052//1961 1045//1961 +f 2781//1962 2801//1962 2747//1962 +f 1510//1963 1478//1963 674//1963 +f 2582//1964 2984//1964 2980//1964 +f 1218//1965 1225//1965 1233//1965 +f 1255//1966 1276//1966 1263//1966 +f 1119//1967 1120//1967 1140//1967 +f 1062//1968 1056//1968 1044//1968 +f 1509//1969 1392//1969 1223//1969 +f 2412//1970 2198//1970 2430//1970 +f 1292//1971 1305//1971 1285//1971 +f 1296//1972 677//1972 1299//1972 +f 1303//1973 1272//1973 1276//1973 +f 1371//1974 1397//1974 1361//1974 +f 1247//1975 1484//1975 1542//1975 +f 1352//1976 1343//1976 1339//1976 +f 2961//1977 1025//1977 1049//1977 +f 536//1978 1117//1978 651//1978 +f 1219//1979 1240//1979 1258//1979 +f 1119//1980 1101//1980 1094//1980 +f 1026//1981 1062//1981 1044//1981 +f 1257//1982 1298//1982 1256//1982 +f 1304//1983 1314//1983 1284//1983 +f 1292//1984 1324//1984 1322//1984 +f 1528//1985 1512//1985 869//1985 +f 1222//1986 1082//1986 1109//1986 +f 1170//1987 1211//1987 1065//1987 +f 1054//1988 1170//1988 1065//1988 +f 657//1989 639//1989 1128//1989 +f 1514//1990 1534//1990 1497//1990 +f 1292//1991 692//1991 1525//1991 +f 1190//1992 1218//1992 1196//1992 +f 1151//1993 1141//1993 1174//1993 +f 1120//1994 1141//1994 1151//1994 +f 1215//1995 1066//1995 995//1995 +f 1322//1996 1324//1996 1299//1996 +f 1104//1997 1084//1997 1069//1997 +f 1230//1998 1109//1998 1082//1998 +f 2869//1999 2849//1999 1068//1999 +f 1426//2000 2243//2000 1425//2000 +f 1590//2001 1970//2001 2060//2001 +f 1211//2002 582//2002 1006//2002 +f 1190//2003 1225//2003 1218//2003 +f 1353//2004 1365//2004 1352//2004 +f 1542//2005 1089//2005 1247//2005 +f 1534//2006 1358//2006 1496//2006 +f 1230//2007 1082//2007 1089//2007 +f 1358//2008 1295//2008 1496//2008 +f 1752//2009 2670//2009 2548//2009 +f 1067//2010 1094//2010 1075//2010 +f 1094//2011 1093//2011 1075//2011 +f 966//2012 975//2012 967//2012 +f 1074//2013 1092//2013 562//2013 +f 1078//2014 1054//2014 1109//2014 +f 1146//2015 1170//2015 1054//2015 +f 1078//2016 1146//2016 1054//2016 +f 589//2017 1092//2017 1113//2017 +f 1032//2018 541//2018 1049//2018 +f 1025//2019 1032//2019 1049//2019 +f 1297//2020 1312//2020 1302//2020 +f 1156//2021 1273//2021 1177//2021 +f 1234//2022 1256//2022 1255//2022 +f 1119//2023 1140//2023 1101//2023 +f 1094//2024 1101//2024 1093//2024 +f 1239//2025 1226//2025 1180//2025 +f 1076//2026 1215//2026 1281//2026 +f 2243//2027 1437//2027 1425//2027 +f 1226//2028 1257//2028 1256//2028 +f 1133//2029 1191//2029 1172//2029 +f 675//2030 1209//2030 1168//2030 +f 1284//2031 1314//2031 1076//2031 +f 2598//2032 3003//2032 2986//2032 +f 1089//2033 1073//2033 1230//2033 +f 1230//2034 1078//2034 1109//2034 +f 1168//2035 1209//2035 1199//2035 +f 1357//2036 1369//2036 2578//2036 +f 548//2037 1245//2037 523//2037 +f 1041//2038 1024//2038 2487//2038 +f 1237//2039 1136//2039 1307//2039 +f 1506//2040 2240//2040 1501//2040 +f 1207//2041 1180//2041 1166//2041 +f 2986//2042 1367//2042 1087//2042 +f 1138//2043 673//2043 662//2043 +f 1185//2044 1171//2044 1287//2044 +f 1195//2045 702//2045 1012//2045 +f 1311//2046 1484//2046 1247//2046 +f 1079//2047 1170//2047 1146//2047 +f 1079//2048 1211//2048 1170//2048 +f 1079//2049 1245//2049 1211//2049 +f 2463//2050 1465//2050 1434//2050 +f 599//2051 625//2051 598//2051 +f 1176//2052 714//2052 704//2052 +f 558//2053 838//2053 1268//2053 +f 547//2054 1061//2054 554//2054 +f 1172//2055 1207//2055 1166//2055 +f 1172//2056 1166//2056 1159//2056 +f 1178//2057 1308//2057 1315//2057 +f 1180//2058 1226//2058 1206//2058 +f 1153//2059 1162//2059 1176//2059 +f 1125//2060 1160//2060 1124//2060 +f 1364//2061 1073//2061 1089//2061 +f 1961//2062 3004//2062 1620//2062 +f 2486//2063 2469//2063 2449//2063 +f 1096//2064 1129//2064 1104//2064 +f 580//2065 1095//2065 1053//2065 +f 1294//2066 1155//2066 1145//2066 +f 1310//2067 1294//2067 1145//2067 +f 1563//2068 1706//2068 597//2068 +f 1862//2069 527//2069 2033//2069 +f 1313//2070 1321//2070 1076//2070 +f 1095//2071 1125//2071 1102//2071 +f 1201//2072 1309//2072 1158//2072 +f 1177//2073 522//2073 1156//2073 +f 2450//2074 2486//2074 2449//2074 +f 1164//2075 1190//2075 1196//2075 +f 1129//2076 1144//2076 1104//2076 +f 1244//2077 1309//2077 1201//2077 +f 1256//2078 1276//2078 1255//2078 +f 1062//2079 1067//2079 1056//2079 +f 1562//2080 2206//2080 1588//2080 +f 1172//2081 1173//2081 1207//2081 +f 551//2082 566//2082 544//2082 +f 1125//2083 1124//2083 1102//2083 +f 1163//2084 1146//2084 1078//2084 +f 1079//2085 1090//2085 1245//2085 +f 2652//2086 1436//2086 1572//2086 +f 1718//2087 1368//2087 1479//2087 +f 1239//2088 1257//2088 1226//2088 +f 1158//2089 1327//2089 1155//2089 +f 1174//2090 1167//2090 1198//2090 +f 1285//2091 1305//2091 1284//2091 +f 1158//2092 1309//2092 1588//2092 +f 983//2093 994//2093 1195//2093 +f 1073//2094 1186//2094 1078//2094 +f 1230//2095 1073//2095 1078//2095 +f 1186//2096 1163//2096 1078//2096 +f 2675//2097 1892//2097 2685//2097 +f 988//2098 989//2098 990//2098 +f 1330//2099 1279//2099 1215//2099 +f 1279//2100 1066//2100 1215//2100 +f 1027//2101 1052//2101 1062//2101 +f 1268//2102 838//2102 621//2102 +f 1123//2103 1100//2103 1132//2103 +f 539//2104 1037//2104 533//2104 +f 1191//2105 1173//2105 1172//2105 +f 1203//2106 966//2106 1212//2106 +f 1848//2107 1629//2107 1867//2107 +f 1214//2108 1079//2108 1146//2108 +f 1214//2109 1090//2109 1079//2109 +f 995//2110 1066//2110 1307//2110 +f 1277//2111 1415//2111 2972//2111 +f 1064//2112 1063//2112 1052//2112 +f 1295//2113 1478//2113 1510//2113 +f 2110//2114 2148//2114 2109//2114 +f 712//2115 1430//2115 1638//2115 +f 712//2116 1638//2116 855//2116 +f 1356//2117 1487//2117 1539//2117 +f 1356//2118 1539//2118 1350//2118 +f 1523//2119 1538//2119 1448//2119 +f 1087//2120 1224//2120 2986//2120 +f 1614//2121 1485//2121 1516//2121 +f 2015//2122 1595//2122 2071//2122 +f 1739//2123 1733//2123 1469//2123 +f 927//2124 2652//2124 798//2124 +f 1469//2125 2144//2125 1036//2125 +f 855//2126 1638//2126 815//2126 +f 2847//2127 2890//2127 2864//2127 +f 1621//2128 732//2128 798//2128 +f 912//2129 1439//2129 2027//2129 +f 2027//2130 1956//2130 2009//2130 +f 2449//2131 1969//2131 2258//2131 +f 2237//2132 2449//2132 2258//2132 +f 1339//2133 2386//2133 1352//2133 +f 2009//2134 1956//2134 2010//2134 +f 1477//2135 1538//2135 1523//2135 +f 2025//2136 2028//2136 1480//2136 +f 2289//2137 2243//2137 1426//2137 +f 1202//2138 776//2138 1581//2138 +f 1228//2139 1521//2139 2026//2139 +f 1433//2140 2246//2140 1428//2140 +f 2833//2141 2845//2141 2818//2141 +f 2914//2142 2921//2142 2905//2142 +f 2188//2143 2678//2143 2294//2143 +f 1357//2144 1441//2144 1413//2144 +f 2174//2145 1502//2145 1702//2145 +f 1581//2146 776//2146 2154//2146 +f 1895//2147 1623//2147 1997//2147 +f 1951//2148 1895//2148 1997//2148 +f 3009//2149 1524//2149 1462//2149 +f 2028//2150 1803//2150 1827//2150 +f 1413//2151 888//2151 1475//2151 +f 1952//2152 1944//2152 1936//2152 +f 2148//2153 1609//2153 2146//2153 +f 3001//2154 1487//2154 2975//2154 +f 1517//2155 1013//2155 1388//2155 +f 1363//2156 1362//2156 1341//2156 +f 1944//2157 1976//2157 1967//2157 +f 3010//2158 2598//2158 2985//2158 +f 1423//2159 524//2159 1494//2159 +f 1244//2160 1441//2160 1349//2160 +f 2545//2161 2054//2161 2050//2161 +f 1345//2162 1363//2162 2692//2162 +f 1395//2163 1348//2163 1465//2163 +f 2355//2164 2236//2164 2317//2164 +f 1519//2165 1184//2165 1534//2165 +f 1535//2166 1184//2166 1519//2166 +f 2383//2167 2573//2167 2981//2167 +f 1417//2168 1416//2168 2453//2168 +f 2990//2169 3016//2169 2165//2169 +f 1367//2170 522//2170 1087//2170 +f 2364//2171 1345//2171 2692//2171 +f 1448//2172 1260//2172 761//2172 +f 1448//2173 579//2173 1260//2173 +f 815//2174 799//2174 1591//2174 +f 1482//2175 1458//2175 1491//2175 +f 1484//2176 3009//2176 1542//2176 +f 1488//2177 2979//2177 888//2177 +f 1413//2178 1441//2178 888//2178 +f 2396//2179 2412//2179 2430//2179 +f 2127//2180 2148//2180 2110//2180 +f 1423//2181 1347//2181 1910//2181 +f 3006//2182 761//2182 1517//2182 +f 1433//2183 1428//2183 2445//2183 +f 1973//2184 1813//2184 1972//2184 +f 2148//2185 2146//2185 2147//2185 +f 1358//2186 1184//2186 742//2186 +f 3008//2187 3011//2187 2981//2187 +f 1415//2188 1487//2188 3001//2188 +f 742//2189 2286//2189 1248//2189 +f 2215//2190 2223//2190 2180//2190 +f 1477//2191 1088//2191 1538//2191 +f 1361//2192 1378//2192 1370//2192 +f 2244//2193 2250//2193 2753//2193 +f 1384//2194 1373//2194 1362//2194 +f 2588//2195 2625//2195 2617//2195 +f 1654//2196 2104//2196 1997//2196 +f 1441//2197 1244//2197 1488//2197 +f 2617//2198 1492//2198 2588//2198 +f 1270//2199 2259//2199 2232//2199 +f 1362//2200 1373//2200 1354//2200 +f 1810//2201 1996//2201 1834//2201 +f 2845//2202 565//2202 580//2202 +f 1581//2203 1502//2203 1476//2203 +f 1910//2204 1347//2204 1959//2204 +f 1515//2205 1519//2205 1514//2205 +f 1415//2206 1523//2206 1487//2206 +f 1613//2207 1591//2207 1331//2207 +f 1447//2208 1458//2208 1450//2208 +f 1466//2209 1472//2209 2342//2209 +f 1502//2210 2174//2210 1500//2210 +f 1347//2211 1581//2211 1959//2211 +f 1581//2212 2154//2212 1502//2212 +f 732//2213 927//2213 798//2213 +f 2357//2214 694//2214 861//2214 +f 2360//2215 2222//2215 2312//2215 +f 2983//2216 2991//2216 1369//2216 +f 1520//2217 1535//2217 1519//2217 +f 895//2218 896//2218 764//2218 +f 2883//2219 1342//2219 1045//2219 +f 1482//2220 1491//2220 1515//2220 +f 2974//2221 2463//2221 1293//2221 +f 1708//2222 1955//2222 1629//2222 +f 1515//2223 1514//2223 1482//2223 +f 1270//2224 1192//2224 2259//2224 +f 1477//2225 1523//2225 1415//2225 +f 2985//2226 2598//2226 2986//2226 +f 1355//2227 1156//2227 522//2227 +f 1496//2228 1505//2228 1541//2228 +f 1184//2229 1358//2229 1534//2229 +f 1803//2230 2028//2230 1459//2230 +f 1383//2231 1418//2231 1404//2231 +f 1675//2232 1629//2232 2153//2232 +f 1337//2233 2692//2233 1363//2233 +f 1260//2234 526//2234 1013//2234 +f 777//2235 942//2235 2880//2235 +f 2199//2236 1589//2236 2206//2236 +f 1516//2237 1440//2237 1320//2237 +f 2313//2238 2269//2238 730//2238 +f 1458//2239 1482//2239 1507//2239 +f 1457//2240 1458//2240 1507//2240 +f 545//2241 552//2241 533//2241 +f 1045//2242 1342//2242 1064//2242 +f 2015//2243 1592//2243 1595//2243 +f 2435//2244 1663//2244 945//2244 +f 1450//2245 1457//2245 1446//2245 +f 2174//2246 2003//2246 1926//2246 +f 815//2247 1494//2247 799//2247 +f 1417//2248 1432//2248 1416//2248 +f 1383//2249 1404//2249 1382//2249 +f 1404//2250 1417//2250 1381//2250 +f 1517//2251 1260//2251 1013//2251 +f 1465//2252 2463//2252 3014//2252 +f 1504//2253 1355//2253 1367//2253 +f 2109//2254 2148//2254 2125//2254 +f 888//2255 1441//2255 1488//2255 +f 1350//2256 1539//2256 761//2256 +f 2167//2257 2166//2257 2152//2257 +f 1817//2258 2059//2258 1656//2258 +f 2130//2259 2145//2259 2152//2259 +f 2143//2260 2060//2260 2142//2260 +f 1450//2261 1446//2261 1427//2261 +f 1027//2262 1020//2262 1045//2262 +f 1382//2263 1404//2263 1381//2263 +f 2844//2264 2883//2264 2867//2264 +f 1438//2265 1432//2265 1428//2265 +f 1421//2266 1428//2266 1418//2266 +f 1772//2267 1935//2267 1781//2267 +f 815//2268 1453//2268 1494//2268 +f 1986//2269 1996//2269 1810//2269 +f 1382//2270 1381//2270 1373//2270 +f 986//2271 1005//2271 827//2271 +f 786//2272 1033//2272 3002//2272 +f 1985//2273 1986//2273 1810//2273 +f 1539//2274 1448//2274 761//2274 +f 2148//2275 2147//2275 2125//2275 +f 2690//2276 2361//2276 2691//2276 +f 1824//2277 1803//2277 1320//2277 +f 1438//2278 1447//2278 1432//2278 +f 2483//2279 2482//2279 1416//2279 +f 2621//2280 2642//2280 2632//2280 +f 1942//2281 1950//2281 1801//2281 +f 1653//2282 2078//2282 2131//2282 +f 2892//2283 1086//2283 2898//2283 +f 1367//2284 1355//2284 522//2284 +f 3015//2285 1475//2285 2979//2285 +f 1735//2286 1754//2286 1922//2286 +f 1583//2287 2092//2287 2141//2287 +f 1520//2288 1519//2288 1515//2288 +f 2131//2289 2078//2289 2092//2289 +f 1342//2290 1053//2290 1064//2290 +f 2305//2291 2682//2291 2674//2291 +f 2343//2292 2232//2292 2253//2292 +f 2482//2293 2453//2293 1416//2293 +f 1270//2294 2232//2294 1179//2294 +f 2512//2295 2514//2295 1902//2295 +f 2965//2296 1059//2296 2870//2296 +f 692//2297 1511//2297 1525//2297 +f 1789//2298 839//2298 1784//2298 +f 2223//2299 1386//2299 2180//2299 +f 2690//2300 2473//2300 2361//2300 +f 1458//2301 1457//2301 1450//2301 +f 2938//2302 1032//2302 1025//2302 +f 1959//2303 1581//2303 1476//2303 +f 2521//2304 1466//2304 2342//2304 +f 2566//2305 2575//2305 2595//2305 +f 1342//2306 2817//2306 1053//2306 +f 1349//2307 2213//2307 1562//2307 +f 2223//2308 2220//2308 1386//2308 +f 1399//2309 1088//2309 1477//2309 +f 1832//2201 1810//2201 1834//2201 +f 1373//2310 1381//2310 2416//2310 +f 1966//2311 1962//2311 1935//2311 +f 1457//2312 1507//2312 1490//2312 +f 1507//2313 1514//2313 1497//2313 +f 1368//2314 1524//2314 1390//2314 +f 1502//2315 1500//2315 1476//2315 +f 2545//2316 2566//2316 2595//2316 +f 1438//2317 2246//2317 2342//2317 +f 1479//2318 1463//2318 1574//2318 +f 1295//2319 742//2319 1248//2319 +f 2232//2320 2279//2320 1179//2320 +f 1457//2321 1490//2321 1446//2321 +f 2194//2322 2308//2322 2297//2322 +f 1962//2323 1985//2323 1790//2323 +f 1790//2324 1781//2324 1935//2324 +f 2445//2325 1428//2325 1421//2325 +f 1505//2326 1295//2326 1510//2326 +f 1790//2327 1935//2327 1962//2327 +f 524//2328 1423//2328 1910//2328 +f 1345//2329 1374//2329 1363//2329 +f 2037//2330 2276//2330 2288//2330 +f 1438//2331 2342//2331 1451//2331 +f 821//2332 1508//2332 1528//2332 +f 1460//2333 1477//2333 1415//2333 +f 1492//2334 2617//2334 1491//2334 +f 1491//2335 1520//2335 1515//2335 +f 1521//2336 1675//2336 2153//2336 +f 2153//2337 1808//2337 1951//2337 +f 1399//2338 1546//2338 1088//2338 +f 1808//2339 1895//2339 1951//2339 +f 1247//2340 1082//2340 1311//2340 +f 1306//2341 743//2341 1626//2341 +f 633//2342 1095//2342 622//2342 +f 1357//2343 1349//2343 1441//2343 +f 2403//2344 1374//2344 1345//2344 +f 2725//2345 2730//2345 2718//2345 +f 2914//2346 2945//2346 2936//2346 +f 2617//2347 1520//2347 1491//2347 +f 1354//2348 2416//2348 1344//2348 +f 1341//2349 1354//2349 1344//2349 +f 1341//2350 1344//2350 1336//2350 +f 1517//2351 1388//2351 3006//2351 +f 1946//2352 1953//2352 1945//2352 +f 1295//2353 1248//2353 1478//2353 +f 2451//2354 2450//2354 2237//2354 +f 1432//2355 1427//2355 1416//2355 +f 1472//2356 1491//2356 1458//2356 +f 2364//2357 2692//2357 2691//2357 +f 1519//2358 1534//2358 1514//2358 +f 1505//2359 1510//2359 821//2359 +f 1910//2360 1959//2360 854//2360 +f 2693//2361 2277//2361 1403//2361 +f 1453//2362 1423//2362 1494//2362 +f 2342//2363 1472//2363 1451//2363 +f 1492//2364 1491//2364 1472//2364 +f 2104//2365 2085//2365 2077//2365 +f 1293//2366 2463//2366 1434//2366 +f 2065//2367 1876//2367 2087//2367 +f 2617//2368 2656//2368 1520//2368 +f 1434//2369 1399//2369 1477//2369 +f 1460//2370 1434//2370 1477//2370 +f 2098//2371 2130//2371 2097//2371 +f 1967//2372 1986//2372 1966//2372 +f 2161//2373 2131//2373 2092//2373 +f 2092//2374 2078//2374 2141//2374 +f 2142//2375 1452//2375 1583//2375 +f 1383//2376 1382//2376 1373//2376 +f 1507//2377 1497//2377 1490//2377 +f 1426//2378 2276//2378 2289//2378 +f 1266//2379 1265//2379 1220//2379 +f 2142//2380 2060//2380 1452//2380 +f 1358//2381 742//2381 1295//2381 +f 1354//2382 1373//2382 2416//2382 +f 1412//2383 1421//2383 1418//2383 +f 1539//2384 1487//2384 1523//2384 +f 1177//2385 1178//2385 1087//2385 +f 1277//2386 1460//2386 1415//2386 +f 1412//2387 1418//2387 1383//2387 +f 2686//2388 1403//2388 2277//2388 +f 1642//2389 1440//2389 1485//2389 +f 1374//2390 1362//2390 1363//2390 +f 1418//2391 1417//2391 1404//2391 +f 3000//2392 2973//2392 2993//2392 +f 1091//2393 1296//2393 1122//2393 +f 1447//2394 1450//2394 1432//2394 +f 2691//2395 2361//2395 2365//2395 +f 1179//2396 2279//2396 853//2396 +f 1451//2397 1472//2397 1458//2397 +f 1408//2398 1495//2398 1238//2398 +f 1482//2399 1514//2399 1507//2399 +f 2706//2400 2709//2400 2719//2400 +f 2166//2401 1613//2401 1331//2401 +f 1511//2402 1122//2402 1525//2402 +f 1511//2403 1091//2403 1122//2403 +f 1091//2404 677//2404 1296//2404 +f 1626//2405 1512//2405 1306//2405 +f 2691//2406 2365//2406 2364//2406 +f 1771//2407 1935//2407 1772//2407 +f 1465//2408 1387//2408 1434//2408 +f 1336//2409 1344//2409 2729//2409 +f 2413//2410 3010//2410 2985//2410 +f 2287//2411 2182//2411 2072//2411 +f 1418//2412 1428//2412 1417//2412 +f 1446//2413 2185//2413 1427//2413 +f 1387//2414 1399//2414 1434//2414 +f 1527//2415 2131//2415 2161//2415 +f 1387//2416 1546//2416 1399//2416 +f 1408//2417 1376//2417 1495//2417 +f 2983//2418 1369//2418 1475//2418 +f 1427//2419 2185//2419 2483//2419 +f 2991//2420 2578//2420 1369//2420 +f 1432//2421 1450//2421 1427//2421 +f 1374//2422 1384//2422 1362//2422 +f 1451//2423 1458//2423 1447//2423 +f 2015//2424 1527//2424 2161//2424 +f 1338//2425 692//2425 1265//2425 +f 1338//2426 1511//2426 692//2426 +f 1338//2427 1091//2427 1511//2427 +f 1157//2428 677//2428 1091//2428 +f 1377//2429 1370//2429 1396//2429 +f 2642//2430 2667//2430 2648//2430 +f 1236//2431 1288//2431 1394//2431 +f 1236//2432 1408//2432 1288//2432 +f 1378//2433 1419//2433 1409//2433 +f 1364//2434 1089//2434 1097//2434 +f 1428//2435 1432//2435 1417//2435 +f 1438//2436 1451//2436 1447//2436 +f 2015//2437 1231//2437 1527//2437 +f 2101//2438 1838//2438 1442//2438 +f 1231//2439 2026//2439 1527//2439 +f 1116//2440 1091//2440 1338//2440 +f 1280//2441 1157//2441 1091//2441 +f 1408//2442 1223//2442 1376//2442 +f 1223//2443 1392//2443 1376//2443 +f 1490//2444 1489//2444 1446//2444 +f 1838//2445 2110//2445 1442//2445 +f 1394//2446 1038//2446 1574//2446 +f 2948//2447 2973//2447 3013//2447 +f 1838//2448 2127//2448 2110//2448 +f 1266//2449 1338//2449 1265//2449 +f 1116//2450 1280//2450 1091//2450 +f 1528//2451 1116//2451 1108//2451 +f 1901//2452 1740//2452 2666//2452 +f 2667//2453 1901//2453 2666//2453 +f 1183//2454 1444//2454 1464//2454 +f 2224//2455 2208//2455 2213//2455 +f 1282//2456 840//2456 1276//2456 +f 1096//2457 1406//2457 1115//2457 +f 1488//2458 1504//2458 2979//2458 +f 1138//2459 630//2459 1139//2459 +f 1349//2460 1309//2460 1244//2460 +f 2972//2461 2998//2461 1277//2461 +f 1503//2462 1116//2462 1338//2462 +f 2578//2463 2991//2463 2224//2463 +f 1490//2464 1497//2464 1489//2464 +f 1463//2465 1236//2465 1394//2465 +f 1510//2466 674//2466 1508//2466 +f 2819//2467 1377//2467 1070//2467 +f 1070//2468 1377//2468 1400//2468 +f 1115//2469 1424//2469 1154//2469 +f 2778//2470 1339//2470 1343//2470 +f 1503//2471 1338//2471 1266//2471 +f 1370//2472 1378//2472 1396//2472 +f 2109//2473 2100//2473 2895//2473 +f 2141//2474 2143//2474 2142//2474 +f 2688//2475 2694//2475 2687//2475 +f 2642//2476 2648//2476 2632//2476 +f 651//2477 786//2477 536//2477 +f 1463//2478 1394//2478 1574//2478 +f 1509//2479 1408//2479 1236//2479 +f 1408//2480 1509//2480 1223//2480 +f 1408//2481 1238//2481 1288//2481 +f 1400//2482 1409//2482 1406//2482 +f 1154//2483 1424//2483 1444//2483 +f 1385//2484 1384//2484 1374//2484 +f 1360//2485 1370//2485 1377//2485 +f 1540//2486 1389//2486 1533//2486 +f 1352//2487 1365//2487 1343//2487 +f 1538//2488 1685//2488 1448//2488 +f 550//2489 703//2489 719//2489 +f 1377//2490 1396//2490 1400//2490 +f 1400//2491 1396//2491 1409//2491 +f 1389//2492 1540//2492 1108//2492 +f 566//2493 1973//2493 1783//2493 +f 1410//2494 1431//2494 1424//2494 +f 1539//2495 1523//2495 1448//2495 +f 1463//2496 1509//2496 1236//2496 +f 2666//2497 1740//2497 2150//2497 +f 1409//2498 1410//2498 1406//2498 +f 1406//2499 1424//2499 1115//2499 +f 1456//2500 1464//2500 1444//2500 +f 1389//2501 1503//2501 1266//2501 +f 1108//2502 1116//2502 1503//2502 +f 1280//2503 869//2503 1157//2503 +f 869//2504 774//2504 1157//2504 +f 1419//2505 1431//2505 1410//2505 +f 1479//2506 1574//2506 1676//2506 +f 1406//2507 1410//2507 1424//2507 +f 1615//2508 1566//2508 1556//2508 +f 1543//2509 1545//2509 1348//2509 +f 1615//2510 1647//2510 1632//2510 +f 856//2511 871//2511 890//2511 +f 1030//2512 1029//2512 2968//2512 +f 2170//2513 3008//2513 2981//2513 +f 1570//2514 1817//2514 1647//2514 +f 1634//2515 1644//2515 1376//2515 +f 583//2516 856//2516 890//2516 +f 1569//2517 1570//2517 1647//2517 +f 1013//2518 583//2518 679//2518 +f 599//2519 615//2519 625//2519 +f 1545//2520 1546//2520 1348//2520 +f 714//2521 1193//2521 1680//2521 +f 1545//2522 1556//2522 1546//2522 +f 1685//2523 579//2523 1448//2523 +f 2336//2524 1718//2524 1691//2524 +f 1610//2525 1470//2525 1617//2525 +f 1028//2526 610//2526 611//2526 +f 1470//2527 1659//2527 1658//2527 +f 1699//2528 1680//2528 1658//2528 +f 1659//2529 1699//2529 1658//2529 +f 1699//2530 714//2530 1680//2530 +f 889//2531 646//2531 1555//2531 +f 1667//2532 1716//2532 819//2532 +f 546//2533 1758//2533 1763//2533 +f 1610//2534 1601//2534 1470//2534 +f 1068//2535 592//2535 2869//2535 +f 1705//2536 652//2536 624//2536 +f 579//2537 549//2537 946//2537 +f 1601//2538 1624//2538 1470//2538 +f 1624//2539 1660//2539 1470//2539 +f 1470//2540 1660//2540 1659//2540 +f 1660//2541 1670//2541 1659//2541 +f 1659//2542 1670//2542 1699//2542 +f 1464//2543 1470//2543 1658//2543 +f 2995//2544 3009//2544 1462//2544 +f 1670//2545 1707//2545 1699//2545 +f 1564//2546 1561//2546 1565//2546 +f 753//2547 665//2547 621//2547 +f 1699//2548 1707//2548 550//2548 +f 2261//2549 1624//2549 1601//2549 +f 1648//2550 1660//2550 1624//2550 +f 1660//2551 1671//2551 1670//2551 +f 1670//2552 1671//2552 1707//2552 +f 1555//2553 1559//2553 1548//2553 +f 1911//2554 1648//2554 1624//2554 +f 1671//2555 1660//2555 1648//2555 +f 1671//2556 1689//2556 1707//2556 +f 1707//2557 713//2557 550//2557 +f 1604//2558 1549//2558 1710//2558 +f 1970//2559 1664//2559 1565//2559 +f 1689//2560 713//2560 1707//2560 +f 1700//2561 1209//2561 713//2561 +f 1700//2562 713//2562 1689//2562 +f 1689//2563 1671//2563 1648//2563 +f 1242//2564 1700//2564 1689//2564 +f 711//2565 1274//2565 520//2565 +f 1644//2566 1107//2566 1376//2566 +f 1681//2567 1623//2567 696//2567 +f 1708//2568 1629//2568 1675//2568 +f 2654//2569 2442//2569 2018//2569 +f 1435//2570 1436//2570 2652//2570 +f 1661//2571 1648//2571 1911//2571 +f 2233//2572 1661//2572 1911//2572 +f 1661//2573 1689//2573 1648//2573 +f 1689//2574 1661//2574 1242//2574 +f 855//2575 2168//2575 1722//2575 +f 1268//2576 665//2576 523//2576 +f 798//2577 2652//2577 1572//2577 +f 1702//2578 2071//2578 2174//2578 +f 1705//2579 624//2579 1567//2579 +f 1430//2580 798//2580 1703//2580 +f 798//2581 1572//2581 1703//2581 +f 2608//2582 1979//2582 2641//2582 +f 2240//2583 1533//2583 1661//2583 +f 1661//2584 1533//2584 1242//2584 +f 1107//2585 1644//2585 610//2585 +f 753//2586 819//2586 1552//2586 +f 1550//2587 1645//2587 829//2587 +f 911//2588 1645//2588 1634//2588 +f 1567//2589 610//2589 1644//2589 +f 2981//2590 2999//2590 2383//2590 +f 1031//2591 1603//2591 935//2591 +f 1348//2592 2341//2592 1543//2592 +f 933//2593 1561//2593 1631//2593 +f 1548//2594 947//2594 1820//2594 +f 2753//2595 2376//2595 2244//2595 +f 1967//2596 1976//2596 1986//2596 +f 1922//2597 1936//2597 1913//2597 +f 985//2598 537//2598 1625//2598 +f 1719//2599 1664//2599 1970//2599 +f 1719//2600 1554//2600 1664//2600 +f 1645//2601 1550//2601 807//2601 +f 807//2602 1582//2602 1558//2602 +f 889//2603 1555//2603 652//2603 +f 1719//2604 1654//2604 1560//2604 +f 1554//2605 1719//2605 1560//2605 +f 1654//2606 1681//2606 1560//2606 +f 1618//2607 1563//2607 597//2607 +f 1566//2608 1599//2608 1546//2608 +f 1558//2609 1582//2609 1705//2609 +f 1681//2610 1997//2610 1623//2610 +f 722//2611 1598//2611 1549//2611 +f 1554//2612 646//2612 889//2612 +f 2348//2613 534//2613 517//2613 +f 1564//2614 1565//2614 1584//2614 +f 1647//2615 1639//2615 1688//2615 +f 525//2616 1954//2616 1915//2616 +f 934//2617 722//2617 1585//2617 +f 1649//2618 1593//2618 1608//2618 +f 1600//2619 1615//2619 1632//2619 +f 1543//2620 1544//2620 1545//2620 +f 1714//2621 1575//2621 808//2621 +f 1705//2622 1582//2622 652//2622 +f 1685//2623 1655//2623 579//2623 +f 1655//2624 1686//2624 579//2624 +f 1686//2625 549//2625 579//2625 +f 1686//2626 918//2626 549//2626 +f 918//2627 613//2627 549//2627 +f 735//2628 1618//2628 1577//2628 +f 1316//2629 912//2629 1597//2629 +f 534//2630 1603//2630 517//2630 +f 2578//2631 2213//2631 1349//2631 +f 1556//2632 1566//2632 1546//2632 +f 1947//2633 1775//2633 1946//2633 +f 1837//2634 2852//2634 669//2634 +f 1590//2635 1719//2635 1970//2635 +f 1602//2636 1916//2636 1570//2636 +f 1664//2637 862//2637 1584//2637 +f 1714//2638 1603//2638 534//2638 +f 1611//2639 1676//2639 614//2639 +f 1546//2640 1387//2640 1348//2640 +f 535//2641 985//2641 1625//2641 +f 808//2642 1611//2642 1618//2642 +f 1586//2643 614//2643 1098//2643 +f 1665//2644 1274//2644 1136//2644 +f 646//2645 1559//2645 1555//2645 +f 1564//2646 1584//2646 1649//2646 +f 1602//2647 1553//2647 1454//2647 +f 1164//2648 673//2648 1149//2648 +f 614//2649 1684//2649 1243//2649 +f 1243//2650 1098//2650 614//2650 +f 1617//2651 1445//2651 1610//2651 +f 1439//2652 1957//2652 2027//2652 +f 652//2653 1616//2653 624//2653 +f 1548//2654 1820//2654 1666//2654 +f 1585//2655 1549//2655 1604//2655 +f 614//2656 1586//2656 1611//2656 +f 537//2657 1672//2657 829//2657 +f 1582//2658 889//2658 652//2658 +f 2100//2659 2126//2659 2099//2659 +f 2333//2660 1544//2660 1543//2660 +f 1555//2661 1548//2661 1616//2661 +f 746//2662 889//2662 1582//2662 +f 862//2663 1593//2663 1584//2663 +f 1575//2664 1611//2664 808//2664 +f 2027//2665 1957//2665 1956//2665 +f 1714//2666 808//2666 1633//2666 +f 890//2667 1564//2667 1576//2667 +f 1608//2668 1550//2668 829//2668 +f 1714//2669 1633//2669 1603//2669 +f 1625//2670 1697//2670 535//2670 +f 1558//2671 1705//2671 1567//2671 +f 1212//2672 809//2672 1203//2672 +f 1593//2673 746//2673 1550//2673 +f 918//2674 1631//2674 613//2674 +f 2009//2675 2010//2675 1231//2675 +f 1633//2676 808//2676 612//2676 +f 517//2677 1603//2677 1031//2677 +f 1646//2678 1577//2678 597//2678 +f 1646//2679 597//2679 689//2679 +f 646//2680 1560//2680 696//2680 +f 1625//2681 1709//2681 1697//2681 +f 1645//2682 1558//2682 1551//2682 +f 641//2683 916//2683 2318//2683 +f 733//2684 1786//2684 1561//2684 +f 2211//2685 1649//2685 1608//2685 +f 2654//2686 2368//2686 2631//2686 +f 1625//2687 911//2687 1709//2687 +f 1691//2688 1676//2688 1611//2688 +f 1575//2689 1691//2689 1611//2689 +f 1231//2690 2023//2690 1228//2690 +f 516//2691 1814//2691 947//2691 +f 976//2692 804//2692 975//2692 +f 612//2693 808//2693 735//2693 +f 808//2694 1618//2694 735//2694 +f 1228//2695 1675//2695 1521//2695 +f 1587//2696 1666//2696 1657//2696 +f 2211//2697 1608//2697 1874//2697 +f 1737//2698 1937//2698 1732//2698 +f 1350//2699 2993//2699 1356//2699 +f 1611//2700 1586//2700 1563//2700 +f 862//2701 1554//2701 889//2701 +f 517//2702 1031//2702 830//2702 +f 694//2703 1575//2703 1715//2703 +f 862//2704 889//2704 746//2704 +f 1946//2705 1945//2705 1929//2705 +f 734//2706 2027//2706 2009//2706 +f 1618//2707 1611//2707 1563//2707 +f 820//2708 1188//2708 1110//2708 +f 1291//2709 969//2709 1237//2709 +f 2684//2710 2665//2710 2155//2710 +f 1561//2711 933//2711 733//2711 +f 1616//2712 1548//2712 1587//2712 +f 1587//2713 1548//2713 1666//2713 +f 1549//2714 1568//2714 1710//2714 +f 1691//2715 1718//2715 1676//2715 +f 1260//2716 579//2716 526//2716 +f 1265//2717 692//2717 1235//2717 +f 1568//2718 1031//2718 935//2718 +f 1565//2719 1664//2719 1584//2719 +f 1616//2720 1587//2720 624//2720 +f 1512//2721 1650//2721 869//2721 +f 1081//2722 1080//2722 1677//2722 +f 1625//2723 829//2723 911//2723 +f 1562//2724 1588//2724 1349//2724 +f 1672//2725 1608//2725 829//2725 +f 1888//2726 1621//2726 1766//2726 +f 1626//2727 1650//2727 1512//2727 +f 986//2728 1143//2728 1014//2728 +f 869//2729 1650//2729 774//2729 +f 774//2730 632//2730 557//2730 +f 1618//2731 597//2731 1577//2731 +f 890//2732 871//2732 1564//2732 +f 1977//2733 1656//2733 2059//2733 +f 1550//2734 746//2734 807//2734 +f 1544//2735 1556//2735 1545//2735 +f 1593//2736 862//2736 746//2736 +f 735//2737 1577//2737 1646//2737 +f 1608//2738 1593//2738 1550//2738 +f 1590//2739 2143//2739 1719//2739 +f 1650//2740 1711//2740 774//2740 +f 774//2741 1711//2741 632//2741 +f 1718//2742 1479//2742 1676//2742 +f 807//2743 746//2743 1582//2743 +f 2104//2744 1719//2744 2143//2744 +f 1719//2745 2104//2745 1654//2745 +f 764//2746 896//2746 906//2746 +f 1810//2747 1832//2747 1825//2747 +f 861//2748 1715//2748 534//2748 +f 1715//2749 1714//2749 534//2749 +f 646//2750 696//2750 1559//2750 +f 1615//2751 1600//2751 1566//2751 +f 1547//2752 1553//2752 1569//2752 +f 652//2753 1555//2753 1616//2753 +f 1484//2754 1524//2754 3009//2754 +f 969//2755 1291//2755 557//2755 +f 2506//2756 2462//2756 2537//2756 +f 534//2757 2348//2757 861//2757 +f 1586//2758 1098//2758 1563//2758 +f 1098//2759 1706//2759 1563//2759 +f 696//2760 516//2760 1559//2760 +f 1677//2761 838//2761 558//2761 +f 1874//2762 1608//2762 1672//2762 +f 1964//2763 1874//2763 1672//2763 +f 1605//2764 1626//2764 743//2764 +f 1023//2765 1237//2765 969//2765 +f 721//2766 1023//2766 969//2766 +f 1765//2767 1771//2767 1780//2767 +f 2002//2768 2003//2768 2061//2768 +f 2671//2769 2055//2769 2389//2769 +f 819//2770 621//2770 838//2770 +f 1559//2771 516//2771 947//2771 +f 1584//2772 1593//2772 1649//2772 +f 1650//2773 1682//2773 1711//2773 +f 1711//2774 873//2774 632//2774 +f 632//2775 873//2775 557//2775 +f 873//2776 870//2776 557//2776 +f 870//2777 969//2777 557//2777 +f 870//2778 721//2778 969//2778 +f 1754//2779 1936//2779 1922//2779 +f 1677//2780 1667//2780 838//2780 +f 1715//2781 1575//2781 1714//2781 +f 1566//2782 1600//2782 1599//2782 +f 1538//2783 1655//2783 1685//2783 +f 1626//2784 1619//2784 1650//2784 +f 1564//2785 1649//2785 1576//2785 +f 1619//2786 1682//2786 1650//2786 +f 1682//2787 1692//2787 1711//2787 +f 1711//2788 1692//2788 873//2788 +f 1687//2789 918//2789 1686//2789 +f 979//2790 870//2790 873//2790 +f 1688//2791 1639//2791 754//2791 +f 1754//2792 1945//2792 1936//2792 +f 1612//2793 1627//2793 1619//2793 +f 1626//2794 1612//2794 1619//2794 +f 1619//2795 1692//2795 1682//2795 +f 1692//2796 979//2796 873//2796 +f 1605//2797 1612//2797 1626//2797 +f 1647//2798 1688//2798 1632//2798 +f 612//2799 735//2799 1573//2799 +f 1001//2800 1646//2800 689//2800 +f 1494//2801 1531//2801 799//2801 +f 979//2802 721//2802 870//2802 +f 694//2803 1715//2803 861//2803 +f 1574//2804 1038//2804 1684//2804 +f 959//2805 641//2805 830//2805 +f 1945//2806 1952//2806 1936//2806 +f 1012//2807 983//2807 1195//2807 +f 1454//2808 2321//2808 2273//2808 +f 895//2809 764//2809 1804//2809 +f 1627//2810 1636//2810 1619//2810 +f 1619//2811 1636//2811 1692//2811 +f 1665//2812 1023//2812 721//2812 +f 1750//2813 2549//2813 1039//2813 +f 1645//2814 807//2814 1558//2814 +f 860//2815 721//2815 979//2815 +f 860//2816 1665//2816 721//2816 +f 2336//2817 2310//2817 1718//2817 +f 1657//2818 718//2818 611//2818 +f 637//2819 1642//2819 1485//2819 +f 2667//2820 2666//2820 2648//2820 +f 640//2821 1665//2821 860//2821 +f 1031//2822 959//2822 830//2822 +f 1964//2823 1672//2823 537//2823 +f 1972//2824 1976//2824 1944//2824 +f 1643//2825 666//2825 1696//2825 +f 1636//2826 1673//2826 1692//2826 +f 1692//2827 1712//2827 979//2827 +f 593//2828 860//2828 979//2828 +f 640//2829 1669//2829 1665//2829 +f 1665//2830 1669//2830 520//2830 +f 809//2831 1643//2831 1203//2831 +f 1587//2832 1657//2832 611//2832 +f 1612//2833 1637//2833 1627//2833 +f 1627//2834 1637//2834 1636//2834 +f 1637//2835 1683//2835 1636//2835 +f 1692//2836 1673//2836 1712//2836 +f 1712//2837 593//2837 979//2837 +f 906//2838 897//2838 666//2838 +f 2336//2839 1575//2839 694//2839 +f 630//2840 606//2840 1139//2840 +f 935//2841 1603//2841 1633//2841 +f 1643//2842 809//2842 666//2842 +f 624//2843 1587//2843 611//2843 +f 1687//2844 1686//2844 1655//2844 +f 1636//2845 1683//2845 1673//2845 +f 593//2846 640//2846 860//2846 +f 1669//2847 695//2847 520//2847 +f 1485//2848 1440//2848 1516//2848 +f 809//2849 1557//2849 666//2849 +f 1553//2850 1602//2850 1570//2850 +f 1942//2851 1780//2851 1950//2851 +f 918//2852 933//2852 1631//2852 +f 1350//2853 1393//2853 2993//2853 +f 2978//2854 2990//2854 2972//2854 +f 1712//2855 831//2855 593//2855 +f 1638//2856 1453//2856 815//2856 +f 558//2857 1268//2857 1081//2857 +f 1553//2858 1570//2858 1569//2858 +f 1953//2859 1973//2859 1972//2859 +f 2174//2860 1926//2860 1500//2860 +f 1683//2861 1674//2861 1673//2861 +f 693//2862 1669//2862 640//2862 +f 1669//2863 645//2863 695//2863 +f 1575//2864 2336//2864 1691//2864 +f 1667//2865 819//2865 838//2865 +f 689//2866 828//2866 841//2866 +f 1674//2867 1701//2867 1673//2867 +f 1673//2868 1701//2868 1712//2868 +f 1712//2869 1701//2869 831//2869 +f 593//2870 693//2870 640//2870 +f 1557//2871 764//2871 906//2871 +f 666//2872 1557//2872 906//2872 +f 610//2873 1333//2873 1107//2873 +f 1637//2874 1641//2874 1683//2874 +f 831//2875 693//2875 593//2875 +f 1571//2876 1669//2876 693//2876 +f 1669//2877 905//2877 645//2877 +f 645//2878 905//2878 1182//2878 +f 2895//2879 2100//2879 2099//2879 +f 526//2880 583//2880 1013//2880 +f 776//2881 912//2881 2154//2881 +f 2621//2882 2632//2882 2574//2882 +f 2644//2883 2608//2883 2516//2883 +f 1701//2884 763//2884 831//2884 +f 1669//2885 1571//2885 905//2885 +f 1804//2886 953//2886 1779//2886 +f 819//2887 753//2887 621//2887 +f 1641//2888 1674//2888 1683//2888 +f 831//2889 987//2889 693//2889 +f 987//2890 1571//2890 693//2890 +f 597//2891 1706//2891 828//2891 +f 1557//2892 1804//2892 764//2892 +f 2321//2893 1454//2893 1544//2893 +f 1031//2894 1598//2894 959//2894 +f 1571//2895 1678//2895 905//2895 +f 3006//2896 2994//2896 3007//2896 +f 677//2897 1157//2897 557//2897 +f 1570//2898 2059//2898 1817//2898 +f 1583//2899 2169//2899 1537//2899 +f 763//2900 987//2900 831//2900 +f 1676//2901 1574//2901 1684//2901 +f 1600//2902 1632//2902 1668//2902 +f 596//2903 582//2903 530//2903 +f 2503//2904 2504//2904 2050//2904 +f 2147//2905 2146//2905 2125//2905 +f 2001//2906 2886//2906 1819//2906 +f 2008//2907 1583//2907 1537//2907 +f 1651//2908 1674//2908 1641//2908 +f 1183//2909 1680//2909 1193//2909 +f 904//2910 1799//2910 940//2910 +f 2469//2911 2486//2911 2485//2911 +f 1733//2912 1737//2912 2951//2912 +f 1768//2913 1775//2913 1737//2913 +f 1833//2914 2059//2914 1570//2914 +f 1834//2915 1842//2915 2957//2915 +f 1775//2916 1947//2916 1737//2916 +f 1733//2917 1768//2917 1737//2917 +f 768//2918 736//2918 2942//2918 +f 1751//2919 1804//2919 1779//2919 +f 1798//2920 1787//2920 1777//2920 +f 1791//2921 1805//2921 1815//2921 +f 1828//2922 616//2922 1815//2922 +f 1794//2923 877//2923 891//2923 +f 1827//2924 1867//2924 2028//2924 +f 982//2925 965//2925 953//2925 +f 2432//2926 2478//2926 2470//2926 +f 2540//2927 543//2927 2654//2927 +f 1868//2928 895//2928 1793//2928 +f 1738//2929 544//2929 1768//2929 +f 661//2930 672//2930 687//2930 +f 1761//2931 1767//2931 788//2931 +f 1785//2932 894//2932 848//2932 +f 2557//2933 2586//2933 2556//2933 +f 788//2934 814//2934 781//2934 +f 1870//2935 1906//2935 725//2935 +f 527//2936 754//2936 1656//2936 +f 1896//2937 1844//2937 1906//2937 +f 1826//2938 1837//2938 669//2938 +f 754//2939 1639//2939 1656//2939 +f 2872//2940 2087//2940 1876//2940 +f 1750//2941 1763//2941 1758//2941 +f 1786//2942 733//2942 1862//2942 +f 1785//2943 1788//2943 894//2943 +f 705//2944 2548//2944 2496//2944 +f 2506//2945 2566//2945 2504//2945 +f 976//2946 966//2946 1203//2946 +f 2776//2947 2800//2947 2775//2947 +f 697//2948 1003//2948 2156//2948 +f 2999//2949 2994//2949 2383//2949 +f 598//2950 625//2950 1837//2950 +f 1704//2951 867//2951 1868//2951 +f 960//2952 948//2952 949//2952 +f 1850//2953 685//2953 1855//2953 +f 2535//2954 944//2954 2573//2954 +f 1376//2955 1392//2955 1634//2955 +f 1777//2956 1787//2956 1762//2956 +f 2480//2957 2435//2957 2658//2957 +f 1826//2958 598//2958 1837//2958 +f 754//2959 527//2959 1862//2959 +f 1873//2960 1788//2960 1785//2960 +f 1906//2961 1844//2961 1761//2961 +f 2034//2962 1847//2962 525//2962 +f 1882//2963 1767//2963 1761//2963 +f 1793//2964 1799//2964 1704//2964 +f 2979//2965 1504//2965 3003//2965 +f 1786//2966 2033//2966 1319//2966 +f 1883//2967 1786//2967 1319//2967 +f 1831//2968 609//2968 1858//2968 +f 1756//2969 1762//2969 1748//2969 +f 1882//2970 756//2970 1877//2970 +f 788//2971 1776//2971 1900//2971 +f 1046//2972 1111//2972 2400//2972 +f 2631//2973 2540//2973 2654//2973 +f 1906//2974 1761//2974 788//2974 +f 2676//2975 1022//2975 1499//2975 +f 2478//2976 1983//2976 2479//2976 +f 1829//2977 618//2977 1845//2977 +f 1906//2978 1870//2978 1896//2978 +f 642//2979 1856//2979 1850//2979 +f 1799//2980 941//2980 940//2980 +f 1733//2981 1738//2981 1768//2981 +f 1834//2982 1836//2982 1835//2982 +f 1834//2983 1835//2983 1842//2983 +f 667//2984 2957//2984 1842//2984 +f 1835//2985 667//2985 1842//2985 +f 1749//2986 1758//2986 1757//2986 +f 1739//2987 1738//2987 1733//2987 +f 1873//2988 867//2988 1704//2988 +f 1826//2989 1987//2989 1972//2989 +f 1850//2990 1856//2990 661//2990 +f 819//2991 1847//2991 1552//2991 +f 1850//2992 661//2992 685//2992 +f 1030//2993 545//2993 533//2993 +f 2993//2994 2975//2994 1356//2994 +f 1751//2995 1779//2995 941//2995 +f 1777//2996 1792//2996 1798//2996 +f 1395//2997 2341//2997 1348//2997 +f 1751//2998 941//2998 1799//2998 +f 1813//2999 1826//2999 1972//2999 +f 1704//3000 1799//3000 1788//3000 +f 1877//3001 800//3001 1767//3001 +f 2844//3002 2817//3002 1342//3002 +f 941//3003 956//3003 940//3003 +f 3007//3004 2977//3004 3006//3004 +f 1799//3005 894//3005 1788//3005 +f 1036//3006 532//3006 1739//3006 +f 2985//3007 2986//3007 3002//3007 +f 2852//3008 668//3008 1835//3008 +f 1937//3009 1929//3009 1732//3009 +f 1739//3010 532//3010 1738//3010 +f 1767//3011 800//3011 1776//3011 +f 800//3012 867//3012 1873//3012 +f 685//3013 1882//3013 1897//3013 +f 1787//3014 568//3014 1748//3014 +f 2487//3015 2961//3015 1041//3015 +f 1836//3016 669//3016 1835//3016 +f 1717//3017 1883//3017 1927//3017 +f 1821//3018 877//3018 1812//3018 +f 1878//3019 1889//3019 1843//3019 +f 1843//3020 741//3020 1820//3020 +f 810//3021 1812//3021 1857//3021 +f 1461//3022 3013//3022 1961//3022 +f 1717//3023 1561//3023 1786//3023 +f 1612//3024 2262//3024 1637//3024 +f 2033//3025 1786//3025 1862//3025 +f 1791//3026 584//3026 1787//3026 +f 1796//3027 1851//3027 1875//3027 +f 800//3028 816//3028 867//3028 +f 617//3029 618//3029 1829//3029 +f 1891//3030 949//3030 948//3030 +f 1963//3031 1775//3031 1859//3031 +f 1440//3032 1824//3032 1320//3032 +f 1777//3033 1762//3033 1756//3033 +f 1499//3034 1022//3034 1111//3034 +f 1929//3035 1736//3035 1732//3035 +f 602//3036 1839//3036 618//3036 +f 684//3037 625//3037 670//3037 +f 1898//3038 1796//3038 1875//3038 +f 788//3039 1767//3039 1776//3039 +f 1885//3040 1831//3040 1858//3040 +f 1885//3041 1880//3041 1851//3041 +f 1859//3042 1973//3042 1963//3042 +f 685//3043 1897//3043 1855//3043 +f 2952//3044 1749//3044 1741//3044 +f 2648//3045 2096//3045 2632//3045 +f 942//3046 1774//3046 1893//3046 +f 1850//3047 1855//3047 1839//3047 +f 1749//3048 1756//3048 1741//3048 +f 1742//3049 2201//3049 2798//3049 +f 2368//3050 2654//3050 2530//3050 +f 2380//3051 2401//3051 2387//3051 +f 1857//3052 1812//3052 1884//3052 +f 1898//3053 1875//3053 2954//3053 +f 685//3054 756//3054 1882//3054 +f 1858//3055 1823//3055 1880//3055 +f 1885//3056 1858//3056 1880//3056 +f 1794//3057 1891//3057 1807//3057 +f 714//3058 1699//3058 719//3058 +f 1844//3059 1897//3059 1882//3059 +f 1769//3060 1778//3060 1777//3060 +f 1057//3061 1881//3061 2390//3061 +f 1857//3062 1884//3062 1774//3062 +f 1807//3063 1840//3063 1884//3063 +f 2954//3064 1875//3064 1816//3064 +f 1796//3065 1898//3065 2920//3065 +f 785//3066 1851//3066 1796//3066 +f 684//3067 2852//3067 1837//3067 +f 2042//3068 2017//3068 2984//3068 +f 1029//3069 1861//3069 2967//3069 +f 2511//3070 2219//3070 2512//3070 +f 2799//3071 1742//3071 2798//3071 +f 1743//3072 1764//3072 1742//3072 +f 1844//3073 1882//3073 1761//3073 +f 2433//3074 2133//3074 2559//3074 +f 1858//3075 1878//3075 1849//3075 +f 1736//3076 1754//3076 1735//3076 +f 1726//3077 1372//3077 2255//3077 +f 2902//3078 1736//3078 1735//3078 +f 2042//3079 2984//3079 2582//3079 +f 1015//3080 1822//3080 2685//3080 +f 1809//3081 1825//3081 2001//3081 +f 2630//3082 2133//3082 2169//3082 +f 1734//3083 1743//3083 1742//3083 +f 522//3084 1177//3084 1087//3084 +f 1857//3085 1774//3085 942//3085 +f 1851//3086 1880//3086 1875//3086 +f 1812//3087 1794//3087 1807//3087 +f 1783//3088 1859//3088 1775//3088 +f 1793//3089 895//3089 1804//3089 +f 1744//3090 1743//3090 1734//3090 +f 1744//3091 1759//3091 1743//3091 +f 1759//3092 1764//3092 1743//3092 +f 1741//3093 1748//3093 545//3093 +f 1816//3094 1875//3094 1864//3094 +f 1759//3095 1780//3095 1942//3095 +f 2506//3096 2537//3096 2566//3096 +f 2996//3097 2985//3097 2989//3097 +f 966//3098 976//3098 975//3098 +f 785//3099 1796//3099 1789//3099 +f 2505//3100 2503//3100 2448//3100 +f 1880//3101 1823//3101 1864//3101 +f 1858//3102 1849//3102 1823//3102 +f 1244//3103 1213//3103 1488//3103 +f 1888//3104 1766//3104 1722//3104 +f 1111//3105 1022//3105 2426//3105 +f 1877//3106 1767//3106 1882//3106 +f 1900//3107 1785//3107 814//3107 +f 1725//3108 1732//3108 1736//3108 +f 1890//3109 1891//3109 948//3109 +f 2913//3110 2951//3110 1725//3110 +f 1798//3111 1805//3111 1791//3111 +f 1744//3112 1765//3112 1759//3112 +f 1765//3113 1780//3113 1759//3113 +f 1831//3114 1885//3114 1851//3114 +f 1802//3115 1800//3115 1609//3115 +f 1609//3116 1800//3116 1866//3116 +f 1755//3117 1722//3117 1866//3117 +f 1755//3118 1888//3118 1722//3118 +f 1798//3119 1792//3119 1805//3119 +f 725//3120 1906//3120 781//3120 +f 1858//3121 1889//3121 1878//3121 +f 1443//3122 1097//3122 1542//3122 +f 1875//3123 1880//3123 1864//3123 +f 1629//3124 1808//3124 2153//3124 +f 1805//3125 617//3125 1815//3125 +f 1734//3126 1745//3126 1744//3126 +f 1745//3127 1765//3127 1744//3127 +f 1748//3128 1762//3128 1787//3128 +f 1769//3129 569//3129 1778//3129 +f 1874//3130 1964//3130 2216//3130 +f 877//3131 1794//3131 1812//3131 +f 1883//3132 1717//3132 1786//3132 +f 1929//3133 1754//3133 1736//3133 +f 1730//3134 1745//3134 1734//3134 +f 1757//3135 1777//3135 1749//3135 +f 1889//3136 741//3136 1843//3136 +f 1778//3137 1792//3137 1777//3137 +f 1369//3138 1413//3138 1475//3138 +f 1800//3139 1755//3139 1866//3139 +f 2595//3140 2642//3140 2621//3140 +f 1737//3141 1947//3141 1937//3141 +f 1987//3142 1826//3142 669//3142 +f 668//3143 667//3143 1835//3143 +f 1891//3144 1890//3144 1807//3144 +f 1906//3145 788//3145 781//3145 +f 848//3146 814//3146 1785//3146 +f 2469//3147 2505//3147 2448//3147 +f 2127//3148 1841//3148 1802//3148 +f 1841//3149 1800//3149 1802//3149 +f 1863//3150 1888//3150 1755//3150 +f 2884//3151 2539//3151 2881//3151 +f 1829//3152 1845//3152 647//3152 +f 948//3153 960//3153 1770//3153 +f 1746//3154 1765//3154 1745//3154 +f 1757//3155 1758//3155 1769//3155 +f 1800//3156 1818//3156 1755//3156 +f 1863//3157 1621//3157 1888//3157 +f 1873//3158 1785//3158 1900//3158 +f 1741//3159 1030//3159 2945//3159 +f 733//3160 754//3160 1862//3160 +f 1784//3161 785//3161 1789//3161 +f 1769//3162 1777//3162 1757//3162 +f 2540//3163 2440//3163 543//3163 +f 2197//3164 2671//3164 1726//3164 +f 1840//3165 1807//3165 1890//3165 +f 1769//3166 546//3166 569//3166 +f 618//3167 1839//3167 1855//3167 +f 1033//3168 2976//3168 2989//3168 +f 2668//3169 2675//3169 2651//3169 +f 1890//3170 948//3170 1760//3170 +f 1760//3171 948//3171 1770//3171 +f 1771//3172 1765//3172 1746//3172 +f 1776//3173 1873//3173 1900//3173 +f 2709//3174 2706//3174 2700//3174 +f 1822//3175 1048//3175 1740//3175 +f 2540//3176 2631//3176 1058//3176 +f 1841//3177 2127//3177 1838//3177 +f 1841//3178 1840//3178 1800//3178 +f 1800//3179 1840//3179 1818//3179 +f 618//3180 1855//3180 1845//3180 +f 1288//3181 1038//3181 1394//3181 +f 1351//3182 2031//3182 1048//3182 +f 1641//3183 1637//3183 2081//3183 +f 1793//3184 1751//3184 1799//3184 +f 1811//3185 1895//3185 1808//3185 +f 1731//3186 1746//3186 1730//3186 +f 1656//3187 2033//3187 527//3187 +f 1950//3188 1781//3188 1801//3188 +f 1838//3189 1886//3189 1841//3189 +f 1818//3190 1760//3190 1755//3190 +f 1760//3191 1863//3191 1755//3191 +f 1760//3192 1887//3192 1863//3192 +f 800//3193 1873//3193 1776//3193 +f 1896//3194 1897//3194 1844//3194 +f 1798//3195 1791//3195 1787//3195 +f 1003//3196 2512//3196 2313//3196 +f 2189//3197 1630//3197 1589//3197 +f 620//3198 1831//3198 1851//3198 +f 1825//3199 1809//3199 1795//3199 +f 1806//3200 1878//3200 1843//3200 +f 1849//3201 1878//3201 1806//3201 +f 1848//3202 1808//3202 1629//3202 +f 1848//3203 1811//3203 1808//3203 +f 1814//3204 1895//3204 1811//3204 +f 1487//3205 1356//3205 2975//3205 +f 1731//3206 1753//3206 1746//3206 +f 1746//3207 1753//3207 1771//3207 +f 1772//3208 1781//3208 1950//3208 +f 1873//3209 1704//3209 1788//3209 +f 2376//3210 1919//3210 2391//3210 +f 1886//3211 1853//3211 1841//3211 +f 1853//3212 1840//3212 1841//3212 +f 1887//3213 1865//3213 1863//3213 +f 1790//3214 1825//3214 1795//3214 +f 1770//3215 2900//3215 1865//3215 +f 516//3216 1623//3216 1814//3216 +f 996//3217 2245//3217 1034//3217 +f 1317//3218 2118//3218 2536//3218 +f 1737//3219 1732//3219 1725//3219 +f 1855//3220 1897//3220 1896//3220 +f 1812//3221 1807//3221 1884//3221 +f 1704//3222 1868//3222 1793//3222 +f 1838//3223 2912//3223 1886//3223 +f 2228//3224 2214//3224 2687//3224 +f 697//3225 2514//3225 1003//3225 +f 2215//3226 2180//3226 706//3226 +f 1741//3227 1756//3227 1748//3227 +f 1846//3228 1803//3228 1824//3228 +f 2031//3229 2519//3229 2644//3229 +f 1845//3230 1855//3230 1896//3230 +f 1039//3231 1763//3231 1750//3231 +f 537//3232 1782//3232 1964//3232 +f 1778//3233 1805//3233 1792//3233 +f 1795//3234 1801//3234 1781//3234 +f 1809//3235 1819//3235 1801//3235 +f 1795//3236 1809//3236 1801//3236 +f 2001//3237 1819//3237 1809//3237 +f 2119//3238 2611//3238 2572//3238 +f 1840//3239 1890//3239 1818//3239 +f 1818//3240 1890//3240 1760//3240 +f 1830//3241 2433//3241 2498//3241 +f 3014//3242 2463//3242 2974//3242 +f 1846//3243 1827//3243 1803//3243 +f 2703//3244 2695//3244 2691//3244 +f 1849//3245 1848//3245 1867//3245 +f 1806//3246 1811//3246 1848//3246 +f 1942//3247 1764//3247 1759//3247 +f 1483//3248 1472//3248 1466//3248 +f 1731//3249 1747//3249 1753//3249 +f 1747//3250 1771//3250 1753//3250 +f 2390//3251 1881//3251 1852//3251 +f 1893//3252 1774//3252 1886//3252 +f 1886//3253 1774//3253 1853//3253 +f 1642//3254 1816//3254 1824//3254 +f 1824//3255 1816//3255 1846//3255 +f 1849//3256 1867//3256 1827//3256 +f 1806//3257 1848//3257 1849//3257 +f 1811//3258 1843//3258 1814//3258 +f 1793//3259 1804//3259 1751//3259 +f 1815//3260 617//3260 1828//3260 +f 584//3261 1815//3261 616//3261 +f 537//3262 1847//3262 1782//3262 +f 894//3263 1799//3263 904//3263 +f 1286//3264 839//3264 1789//3264 +f 1828//3265 617//3265 1829//3265 +f 2987//3266 2972//3266 3001//3266 +f 1790//3267 1795//3267 1781//3267 +f 1858//3268 609//3268 1889//3268 +f 2567//3269 2285//3269 2086//3269 +f 1760//3270 1770//3270 1887//3270 +f 1887//3271 1770//3271 1865//3271 +f 1854//3272 1816//3272 1642//3272 +f 1864//3273 1827//3273 1846//3273 +f 1843//3274 1811//3274 1806//3274 +f 2948//3275 2987//3275 3001//3275 +f 620//3276 1851//3276 785//3276 +f 537//3277 985//3277 1847//3277 +f 1136//3278 1237//3278 1023//3278 +f 1902//3279 2031//3279 2641//3279 +f 2505//3280 2504//3280 2503//3280 +f 697//3281 2150//3281 1740//3281 +f 2647//3282 2119//3282 2665//3282 +f 1774//3283 1884//3283 1853//3283 +f 1853//3284 1884//3284 1840//3284 +f 1381//3285 2408//3285 2416//3285 +f 904//3286 940//3286 926//3286 +f 1749//3287 1777//3287 1756//3287 +f 1913//3288 1936//3288 1747//3288 +f 819//3289 525//3289 1847//3289 +f 1814//3290 1843//3290 1820//3290 +f 1816//3291 1864//3291 1846//3291 +f 1864//3292 1823//3292 1827//3292 +f 1823//3293 1849//3293 1827//3293 +f 2984//3294 2616//3294 2016//3294 +f 2301//3295 2045//3295 2113//3295 +f 2238//3296 2239//3296 2205//3296 +f 2341//3297 2115//3297 2441//3297 +f 2192//3298 1872//3298 1990//3298 +f 2337//3299 2326//3299 2360//3299 +f 2319//3300 2338//3300 2222//3300 +f 2260//3301 2190//3301 2311//3301 +f 839//3302 2909//3302 943//3302 +f 2349//3303 2191//3303 2340//3303 +f 2021//3304 2304//3304 2236//3304 +f 2040//3305 2186//3305 1372//3305 +f 672//3306 661//3306 1856//3306 +f 1976//3307 1987//3307 1836//3307 +f 1988//3308 1928//3308 2079//3308 +f 2275//3309 2414//3309 2391//3309 +f 1454//3310 2273//3310 1522//3310 +f 2079//3311 1529//3311 1522//3311 +f 2438//3312 2047//3312 2447//3312 +f 2392//3313 1340//3313 1344//3313 +f 2079//3314 1928//3314 1529//3314 +f 1916//3315 1602//3315 1522//3315 +f 2052//3316 2046//3316 2165//3316 +f 1529//3317 2066//3317 1522//3317 +f 2052//3318 2105//3318 1988//3318 +f 2046//3319 2052//3319 1988//3319 +f 1988//3320 2105//3320 1928//3320 +f 1998//3321 1916//3321 1522//3321 +f 2066//3322 1998//3322 1522//3322 +f 1928//3323 1974//3323 1529//3323 +f 1529//3324 1974//3324 2066//3324 +f 1320//3325 1803//3325 1459//3325 +f 2111//3326 2052//3326 2173//3326 +f 1998//3327 1833//3327 1916//3327 +f 1570//3328 1916//3328 1833//3328 +f 2052//3329 2111//3329 2105//3329 +f 2105//3330 1474//3330 1928//3330 +f 1928//3331 1474//3331 1974//3331 +f 2439//3332 1980//3332 1969//3332 +f 2066//3333 1914//3333 1998//3333 +f 1998//3334 1914//3334 1833//3334 +f 1914//3335 627//3335 1833//3335 +f 2111//3336 2094//3336 2105//3336 +f 1974//3337 1914//3337 2066//3337 +f 2028//3338 1955//3338 1480//3338 +f 2111//3339 2173//3339 1923//3339 +f 2171//3340 627//3340 1914//3340 +f 1974//3341 2171//3341 1914//3341 +f 1802//3342 1609//3342 2148//3342 +f 2065//3343 2111//3343 1923//3343 +f 2094//3344 2112//3344 2105//3344 +f 2105//3345 2112//3345 1474//3345 +f 2050//3346 2504//3346 2545//3346 +f 1474//3347 2171//3347 1974//3347 +f 2323//3348 2260//3348 2311//3348 +f 1937//3349 1947//3349 1946//3349 +f 2992//3350 1876//3350 1923//3350 +f 1977//3351 2059//3351 627//3351 +f 2171//3352 1977//3352 627//3352 +f 1971//3353 1801//3353 1819//3353 +f 2196//3354 2230//3354 2260//3354 +f 1948//3355 2275//3355 2399//3355 +f 1527//3356 1653//3356 2131//3356 +f 2893//3357 1876//3357 2992//3357 +f 1934//3358 2111//3358 2065//3358 +f 1934//3359 2094//3359 2111//3359 +f 2178//3360 2322//3360 2226//3360 +f 2770//3361 2764//3361 2745//3361 +f 1876//3362 2065//3362 1923//3362 +f 2710//3363 2728//3363 2727//3363 +f 2205//3364 2239//3364 2291//3364 +f 2140//3365 706//3365 2180//3365 +f 2048//3366 2088//3366 2572//3366 +f 2088//3367 2114//3367 2119//3367 +f 2114//3368 2120//3368 2119//3368 +f 2120//3369 2155//3369 2119//3369 +f 2087//3370 1934//3370 2065//3370 +f 2171//3371 1999//3371 1977//3371 +f 1192//3372 2320//3372 2256//3372 +f 2048//3373 2067//3373 2088//3373 +f 2088//3374 2089//3374 2114//3374 +f 2324//3375 2684//3375 1099//3375 +f 2137//3376 2155//3376 2120//3376 +f 1921//3377 2171//3377 1474//3377 +f 2112//3378 1921//3378 1474//3378 +f 1999//3379 1656//3379 1977//3379 +f 2230//3380 2095//3380 2190//3380 +f 2252//3381 2257//3381 2247//3381 +f 1357//3382 2578//3382 1349//3382 +f 2053//3383 2089//3383 2088//3383 +f 2067//3384 2053//3384 2088//3384 +f 2089//3385 2106//3385 2114//3385 +f 2106//3386 2138//3386 2120//3386 +f 2114//3387 2106//3387 2120//3387 +f 2156//3388 1099//3388 2155//3388 +f 2137//3389 2156//3389 2155//3389 +f 1999//3390 678//3390 1656//3390 +f 2252//3391 2030//3391 2257//3391 +f 2323//3392 2234//3392 2312//3392 +f 2047//3393 2049//3393 2048//3393 +f 2106//3394 2121//3394 2138//3394 +f 2138//3395 2137//3395 2120//3395 +f 1677//3396 1080//3396 1630//3396 +f 1921//3397 1999//3397 2171//3397 +f 1946//3398 1963//3398 1953//3398 +f 1614//3399 1316//3399 2896//3399 +f 2257//3400 2030//3400 2236//3400 +f 2260//3401 2230//3401 2190//3401 +f 2049//3402 2053//3402 2048//3402 +f 2048//3403 2053//3403 2067//3403 +f 2156//3404 2137//3404 2138//3404 +f 1609//3405 1722//3405 2168//3405 +f 1481//3406 1921//3406 2112//3406 +f 2094//3407 1481//3407 2112//3407 +f 2323//3408 2311//3408 2234//3408 +f 2438//3409 2038//3409 2049//3409 +f 2047//3410 2438//3410 2049//3410 +f 2053//3411 2090//3411 2089//3411 +f 2156//3412 730//3412 1099//3412 +f 1921//3413 2043//3413 1999//3413 +f 1999//3414 2043//3414 678//3414 +f 1986//3415 1976//3415 1996//3415 +f 1929//3416 1945//3416 1754//3416 +f 1480//3417 1708//3417 1228//3417 +f 897//3418 1696//3418 666//3418 +f 988//3419 2851//3419 960//3419 +f 2257//3420 2355//3420 2271//3420 +f 2000//3421 2038//3421 2438//3421 +f 2049//3422 2039//3422 2053//3422 +f 2089//3423 2090//3423 2106//3423 +f 1934//3424 1481//3424 2094//3424 +f 1802//3425 2148//3425 2127//3425 +f 973//3426 941//3426 1779//3426 +f 1918//3427 2693//3427 1907//3427 +f 1918//3428 1917//3428 2314//3428 +f 1918//3429 1924//3429 1917//3429 +f 1924//3430 2263//3430 1917//3430 +f 1863//3431 1865//3431 732//3431 +f 2000//3432 2012//3432 2038//3432 +f 2049//3433 2038//3433 2039//3433 +f 2121//3434 2150//3434 2138//3434 +f 697//3435 2156//3435 2138//3435 +f 2150//3436 697//3436 2138//3436 +f 1621//3437 1863//3437 732//3437 +f 1865//3438 1359//3438 732//3438 +f 678//3439 2033//3439 1656//3439 +f 1359//3440 927//3440 732//3440 +f 2039//3441 2090//3441 2053//3441 +f 2090//3442 2096//3442 2106//3442 +f 2106//3443 2648//3443 2121//3443 +f 2648//3444 2150//3444 2121//3444 +f 2661//3445 2005//3445 1915//3445 +f 1921//3446 2103//3446 2043//3446 +f 2043//3447 2033//3447 678//3447 +f 2207//3448 2277//3448 1958//3448 +f 2438//3449 1993//3449 2000//3449 +f 2106//3450 2096//3450 2648//3450 +f 1013//3451 679//3451 1388//3451 +f 2690//3452 2371//3452 2473//3452 +f 2841//3453 2882//3453 2840//3453 +f 2872//3454 1335//3454 1467//3454 +f 1467//3455 1335//3455 2087//3455 +f 2338//3456 2218//3456 1978//3456 +f 2245//3457 1872//3457 2192//3457 +f 1908//3458 1924//3458 1918//3458 +f 1908//3459 1932//3459 1924//3459 +f 1980//3460 1993//3460 2353//3460 +f 2000//3461 1993//3461 2012//3461 +f 2012//3462 2039//3462 2038//3462 +f 2090//3463 2594//3463 2096//3463 +f 2299//3464 2198//3464 2412//3464 +f 1318//3465 912//3465 1316//3465 +f 1318//3466 1439//3466 912//3466 +f 1961//3467 2076//3467 2872//3467 +f 2872//3468 2076//3468 1335//3468 +f 1335//3469 2134//3469 2087//3469 +f 2134//3470 1934//3470 2087//3470 +f 1934//3471 2070//3471 1481//3471 +f 1907//3472 1908//3472 1918//3472 +f 2039//3473 2594//3473 2090//3473 +f 2135//3474 1934//3474 2134//3474 +f 2135//3475 2070//3475 1934//3475 +f 1481//3476 2103//3476 1921//3476 +f 2019//3477 519//3477 1871//3477 +f 1780//3478 1772//3478 1950//3478 +f 1907//3479 1909//3479 1908//3479 +f 2690//3480 2689//3480 2362//3480 +f 1969//3481 1980//3481 2353//3481 +f 2039//3482 2054//3482 2594//3482 +f 2096//3483 2594//3483 2632//3483 +f 1614//3484 1318//3484 1316//3484 +f 2070//3485 2103//3485 1481//3485 +f 2103//3486 1596//3486 2043//3486 +f 1607//3487 2199//3487 1871//3487 +f 2018//3488 1607//3488 1871//3488 +f 1939//3489 1932//3489 1908//3489 +f 1989//3490 1993//3490 1980//3490 +f 1993//3491 2020//3491 2012//3491 +f 2303//3492 2298//3492 2244//3492 +f 3015//3493 2979//3493 3003//3493 +f 1952//3494 1972//3494 1944//3494 +f 1976//3495 1972//3495 1987//3495 +f 1968//3496 1319//3496 2043//3496 +f 1596//3497 1968//3497 2043//3497 +f 2043//3498 1319//3498 2033//3498 +f 1939//3499 1908//3499 1909//3499 +f 1939//3500 2258//3500 1932//3500 +f 1993//3501 1989//3501 2020//3501 +f 2054//3502 2574//3502 2594//3502 +f 2070//3503 1596//3503 2103//3503 +f 1957//3504 1459//3504 2025//3504 +f 2020//3505 2050//3505 2012//3505 +f 2012//3506 2050//3506 2039//3506 +f 2039//3507 2050//3507 2054//3507 +f 2184//3508 1366//3508 2186//3508 +f 2512//3509 1902//3509 1903//3509 +f 2025//3510 1480//3510 2023//3510 +f 2023//3511 1480//3511 1228//3511 +f 1956//3512 1957//3512 2010//3512 +f 2076//3513 2149//3513 1335//3513 +f 669//3514 1836//3514 1987//3514 +f 1953//3515 1972//3515 1952//3515 +f 1940//3516 1939//3516 1909//3516 +f 1989//3517 2013//3517 2020//3517 +f 2249//3518 2102//3518 2290//3518 +f 2936//3519 2968//3519 2935//3519 +f 1937//3520 1946//3520 1929//3520 +f 2073//3521 2615//3521 2587//3521 +f 1359//3522 1380//3522 927//3522 +f 1943//3523 2134//3523 1335//3523 +f 2134//3524 1943//3524 2135//3524 +f 1742//3525 1764//3525 2201//3525 +f 1516//3526 1459//3526 1957//3526 +f 2896//3527 1316//3527 1597//3527 +f 2373//3528 1925//3528 1909//3528 +f 1925//3529 1940//3529 1909//3529 +f 1940//3530 2258//3530 1939//3530 +f 2104//3531 1951//3531 1997//3531 +f 1994//3532 1989//3532 1980//3532 +f 1994//3533 2013//3533 1989//3533 +f 2024//3534 2247//3534 2257//3534 +f 2177//3535 2210//3535 2172//3535 +f 1944//3536 1967//3536 1966//3536 +f 1966//3537 1986//3537 1985//3537 +f 1966//3538 1985//3538 1962//3538 +f 1944//3539 1966//3539 1935//3539 +f 1944//3540 1935//3540 1936//3540 +f 1943//3541 1596//3541 2070//3541 +f 2135//3542 1943//3542 2070//3542 +f 1865//3543 2900//3543 1359//3543 +f 1640//3544 1573//3544 1001//3544 +f 2153//3545 1951//3545 2077//3545 +f 2018//3546 2442//3546 1607//3546 +f 2013//3547 2050//3547 2020//3547 +f 2102//3548 2284//3548 2241//3548 +f 1624//3549 2261//3549 1911//3549 +f 2290//3550 2102//3550 2045//3550 +f 1836//3551 1834//3551 1996//3551 +f 2104//3552 2143//3552 2085//3552 +f 2244//3553 2391//3553 2352//3553 +f 1943//3554 1449//3554 1596//3554 +f 1596//3555 1449//3555 1968//3555 +f 1318//3556 1957//3556 1439//3556 +f 1653//3557 1521//3557 2153//3557 +f 2439//3558 1994//3558 1980//3558 +f 2448//3559 2503//3559 1994//3559 +f 2013//3560 2503//3560 2050//3560 +f 2241//3561 2040//3561 2045//3561 +f 2107//3562 2128//3562 1016//3562 +f 2969//3563 2945//3563 2914//3563 +f 2269//3564 2194//3564 1422//3564 +f 2077//3565 2085//3565 2078//3565 +f 2161//3566 1592//3566 2015//3566 +f 3004//3567 2149//3567 1620//3567 +f 2010//3568 2025//3568 1231//3568 +f 2968//3569 2945//3569 1030//3569 +f 1992//3570 1667//3570 1607//3570 +f 2384//3571 1940//3571 1925//3571 +f 1940//3572 2237//3572 2258//3572 +f 1476//3573 1500//3573 1926//3573 +f 1231//3574 2025//3574 2023//3574 +f 2339//3575 2218//3575 2338//3575 +f 2739//3576 2748//3576 2767//3576 +f 2004//3577 2071//3577 1702//3577 +f 2149//3578 594//3578 1335//3578 +f 1319//3579 1968//3579 1449//3579 +f 1700//3580 1220//3580 1209//3580 +f 1708//3581 1675//3581 1228//3581 +f 2026//3582 1521//3582 1527//3582 +f 1106//3583 611//3583 718//3583 +f 1772//3584 1780//3584 1771//3584 +f 596//3585 1847//3585 985//3585 +f 2208//3586 2224//3586 2019//3586 +f 2157//3587 1004//3587 2175//3587 +f 2175//3588 1004//3588 1628//3588 +f 2032//3589 2582//3589 2998//3589 +f 2264//3590 2322//3590 2178//3590 +f 2170//3591 2149//3591 3004//3591 +f 1449//3592 2035//3592 1319//3592 +f 2060//3593 2143//3593 1590//3593 +f 1815//3594 584//3594 1791//3594 +f 1480//3595 1955//3595 1708//3595 +f 1662//3596 2339//3596 2338//3596 +f 2128//3597 2123//3597 2157//3597 +f 1628//3598 1606//3598 2435//3598 +f 2284//3599 2253//3599 2184//3599 +f 2145//3600 2146//3600 2160//3600 +f 1335//3601 1530//3601 1943//3601 +f 1943//3602 1530//3602 1449//3602 +f 2146//3603 1609//3603 2168//3603 +f 1597//3604 776//3604 1202//3604 +f 2238//3605 2200//3605 2239//3605 +f 2158//3606 1004//3606 2157//3606 +f 1606//3607 1663//3607 2435//3607 +f 517//3608 1407//3608 2346//3608 +f 1502//3609 2154//3609 1702//3609 +f 1430//3610 1621//3610 798//3610 +f 2170//3611 594//3611 2149//3611 +f 1530//3612 1335//3612 594//3612 +f 1530//3613 2035//3613 1449//3613 +f 1992//3614 1716//3614 1667//3614 +f 1915//3615 2442//3615 543//3615 +f 1954//3616 1992//3616 2442//3616 +f 2363//3617 2214//3617 2379//3617 +f 2109//3618 2125//3618 2126//3618 +f 1722//3619 712//3619 855//3619 +f 1978//3620 2218//3620 2260//3620 +f 2657//3621 1498//3621 2235//3621 +f 2362//3622 2363//3622 2382//3622 +f 2176//3623 1628//3623 1004//3623 +f 2183//3624 2301//3624 2196//3624 +f 2170//3625 2132//3625 594//3625 +f 712//3626 1722//3626 1430//3626 +f 1954//3627 2442//3627 1915//3627 +f 2035//3628 1883//3628 1319//3628 +f 1766//3629 1621//3629 1430//3629 +f 2259//3630 1192//3630 2186//3630 +f 2217//3631 2293//3631 2235//3631 +f 2264//3632 1979//3632 2322//3632 +f 2123//3633 2158//3633 2157//3633 +f 1606//3634 1628//3634 2176//3634 +f 2340//3635 2037//3635 2307//3635 +f 2776//3636 2775//3636 2738//3636 +f 2210//3637 2680//3637 2281//3637 +f 1530//3638 2162//3638 2035//3638 +f 1722//3639 1766//3639 1430//3639 +f 1347//3640 1202//3640 1581//3640 +f 2308//3641 2317//3641 2072//3641 +f 542//3642 531//3642 1026//3642 +f 2264//3643 1375//3643 2080//3643 +f 2108//3644 2158//3644 2123//3644 +f 2158//3645 2159//3645 1004//3645 +f 1004//3646 2159//3646 2176//3646 +f 2743//3647 2776//3647 2738//3647 +f 2116//3648 1375//3648 2274//3648 +f 2044//3649 2291//3649 2274//3649 +f 1386//3650 2220//3650 2187//3650 +f 2210//3651 2182//3651 2680//3651 +f 2222//3652 2323//3652 2312//3652 +f 2095//3653 2230//3653 2328//3653 +f 2223//3654 2308//3654 2194//3654 +f 1747//3655 1935//3655 1771//3655 +f 2238//3656 1990//3656 2200//3656 +f 1983//3657 1995//3657 2479//3657 +f 2479//3658 1995//3658 2006//3658 +f 2587//3659 2063//3659 2073//3659 +f 2108//3660 2129//3660 2158//3660 +f 2313//3661 2220//3661 2269//3661 +f 2239//3662 2200//3662 2351//3662 +f 2234//3663 2311//3663 2086//3663 +f 2132//3664 2981//3664 2536//3664 +f 2132//3665 2093//3665 594//3665 +f 2162//3666 1530//3666 594//3666 +f 2648//3667 2666//3667 2150//3667 +f 2125//3668 2146//3668 2145//3668 +f 2275//3669 1948//3669 1984//3669 +f 2073//3670 2091//3670 2108//3670 +f 2117//3671 2129//3671 2108//3671 +f 2129//3672 2159//3672 2158//3672 +f 2151//3673 2176//3673 2159//3673 +f 2176//3674 1713//3674 1606//3674 +f 1713//3675 1663//3675 1606//3675 +f 1965//3676 1622//3676 1663//3676 +f 1179//3677 1248//3677 1270//3677 +f 2379//3678 2214//3678 2228//3678 +f 2223//3679 2355//3679 2308//3679 +f 2132//3680 2536//3680 2093//3680 +f 2162//3681 1927//3681 1883//3681 +f 2035//3682 2162//3682 1883//3682 +f 2034//3683 525//3683 1915//3683 +f 1960//3684 1984//3684 1948//3684 +f 2312//3685 2205//3685 2268//3685 +f 2577//3686 2058//3686 2587//3686 +f 2587//3687 2058//3687 2063//3687 +f 2108//3688 2091//3688 2117//3688 +f 2129//3689 2151//3689 2159//3689 +f 2151//3690 1713//3690 2176//3690 +f 1941//3691 1663//3691 1713//3691 +f 2681//3692 1622//3692 1965//3692 +f 2511//3693 2187//3693 2219//3693 +f 2220//3694 2313//3694 2219//3694 +f 2355//3695 2223//3695 2271//3695 +f 2118//3696 2093//3696 2536//3696 +f 2093//3697 1221//3697 594//3697 +f 594//3698 1221//3698 2162//3698 +f 2034//3699 1915//3699 2005//3699 +f 2163//3700 2034//3700 2005//3700 +f 1949//3701 1948//3701 2399//3701 +f 1984//3702 1983//3702 1975//3702 +f 1995//3703 2022//3703 2538//3703 +f 2884//3704 2058//3704 2577//3704 +f 2063//3705 2082//3705 2073//3705 +f 2073//3706 2082//3706 2091//3706 +f 2117//3707 2124//3707 2129//3707 +f 2129//3708 2124//3708 2151//3708 +f 1513//3709 1713//3709 2151//3709 +f 1965//3710 1663//3710 1941//3710 +f 1651//3711 2339//3711 1662//3711 +f 2220//3712 2219//3712 2187//3712 +f 1652//3713 2118//3713 2630//3713 +f 1652//3714 2093//3714 2118//3714 +f 1927//3715 2162//3715 1221//3715 +f 2874//3716 2538//3716 2022//3716 +f 1112//3717 1589//3717 1630//3717 +f 743//3718 607//3718 1982//3718 +f 2353//3719 1993//3719 2198//3719 +f 2730//3720 2743//3720 2738//3720 +f 2124//3721 2139//3721 2151//3721 +f 843//3722 1513//3722 2151//3722 +f 1713//3723 1531//3723 1941//3723 +f 1531//3724 817//3724 1941//3724 +f 817//3725 1965//3725 1941//3725 +f 2306//3726 2268//3726 2291//3726 +f 2823//3727 2905//3727 2815//3727 +f 2169//3728 1652//3728 2630//3728 +f 1652//3729 1221//3729 2093//3729 +f 2163//3730 2005//3730 720//3730 +f 1920//3731 2399//3731 1912//3731 +f 1920//3732 1933//3732 2399//3732 +f 1933//3733 1949//3733 2399//3733 +f 1948//3734 1949//3734 1960//3734 +f 1984//3735 1995//3735 1983//3735 +f 2091//3736 2097//3736 2117//3736 +f 1513//3737 1531//3737 1713//3737 +f 595//3738 581//3738 1455//3738 +f 581//3739 2164//3739 1455//3739 +f 1773//3740 2329//3740 2678//3740 +f 2133//3741 2630//3741 2559//3741 +f 1938//3742 1221//3742 1652//3742 +f 2216//3743 2163//3743 720//3743 +f 2201//3744 1920//3744 1912//3744 +f 1991//3745 1995//3745 1984//3745 +f 2082//3746 2083//3746 2091//3746 +f 2091//3747 2083//3747 2097//3747 +f 2117//3748 2097//3748 2124//3748 +f 2139//3749 843//3749 2151//3749 +f 2681//3750 854//3750 787//3750 +f 595//3751 787//3751 854//3751 +f 595//3752 1476//3752 581//3752 +f 2061//3753 2133//3753 2002//3753 +f 2344//3754 2253//3754 2284//3754 +f 1452//3755 1938//3755 1652//3755 +f 1938//3756 1927//3756 1221//3756 +f 2041//3757 2163//3757 2216//3757 +f 2041//3758 2034//3758 2163//3758 +f 2041//3759 1782//3759 2034//3759 +f 1764//3760 1920//3760 2201//3760 +f 1955//3761 1867//3761 1629//3761 +f 1717//3762 1927//3762 1565//3762 +f 1764//3763 1933//3763 1920//3763 +f 1991//3764 2886//3764 1995//3764 +f 1995//3765 2886//3765 2022//3765 +f 2963//3766 2074//3766 2082//3766 +f 2063//3767 2963//3767 2082//3767 +f 2082//3768 2074//3768 2083//3768 +f 2083//3769 2098//3769 2097//3769 +f 2166//3770 843//3770 2139//3770 +f 843//3771 1331//3771 1513//3771 +f 799//3772 1531//3772 1513//3772 +f 817//3773 524//3773 1965//3773 +f 524//3774 2681//3774 1965//3774 +f 1926//3775 2164//3775 581//3775 +f 1926//3776 2002//3776 2164//3776 +f 2061//3777 1537//3777 2133//3777 +f 1537//3778 2169//3778 2133//3778 +f 2169//3779 1452//3779 1652//3779 +f 1970//3780 1927//3780 1938//3780 +f 1971//3781 1984//3781 1960//3781 +f 1971//3782 1991//3782 1984//3782 +f 843//3783 2166//3783 1331//3783 +f 524//3784 854//3784 2681//3784 +f 1452//3785 2060//3785 1938//3785 +f 2060//3786 1970//3786 1938//3786 +f 1773//3787 2062//3787 2293//3787 +f 2566//3788 2545//3788 2504//3788 +f 1954//3789 1716//3789 1992//3789 +f 1942//3790 1933//3790 1764//3790 +f 1942//3791 1949//3791 1933//3791 +f 1942//3792 1960//3792 1949//3792 +f 2448//3793 2449//3793 2469//3793 +f 2074//3794 2098//3794 2083//3794 +f 2124//3795 2152//3795 2139//3795 +f 2152//3796 2166//3796 2139//3796 +f 1331//3797 1591//3797 1513//3797 +f 1591//3798 799//3798 1513//3798 +f 1494//3799 817//3799 1531//3799 +f 1476//3800 1926//3800 581//3800 +f 2008//3801 1537//3801 2061//3801 +f 839//3802 785//3802 1784//3802 +f 1957//3803 2025//3803 2010//3803 +f 1964//3804 1782//3804 2041//3804 +f 2028//3805 1867//3805 1955//3805 +f 1801//3806 1960//3806 1942//3806 +f 1960//3807 1801//3807 1971//3807 +f 1819//3808 2886//3808 1991//3808 +f 2506//3809 2504//3809 2505//3809 +f 2506//3810 2505//3810 2485//3810 +f 2485//3811 2505//3811 2469//3811 +f 2963//3812 2063//3812 2932//3812 +f 2097//3813 2130//3813 2124//3813 +f 2124//3814 2130//3814 2152//3814 +f 524//3815 1910//3815 854//3815 +f 854//3816 1959//3816 595//3816 +f 1959//3817 1476//3817 595//3817 +f 2304//3818 1498//3818 2267//3818 +f 1498//3819 2662//3819 2267//3819 +f 2102//3820 2227//3820 2284//3820 +f 1483//3821 1492//3821 1472//3821 +f 2255//3822 2293//3822 2217//3822 +f 2272//3823 2360//3823 2268//3823 +f 2341//3824 2333//3824 1543//3824 +f 2332//3825 2044//3825 2226//3825 +f 2264//3826 2080//3826 2641//3826 +f 2973//3827 2948//3827 2997//3827 +f 2312//3828 2234//3828 2285//3828 +f 2308//3829 2355//3829 2317//3829 +f 730//3830 2269//3830 2324//3830 +f 1612//3831 2249//3831 2262//3831 +f 2249//3832 2011//3832 2262//3832 +f 2016//3833 2616//3833 2115//3833 +f 1395//3834 2016//3834 2115//3834 +f 1969//3835 2353//3835 2258//3835 +f 2220//3836 2223//3836 2194//3836 +f 1726//3837 2255//3837 2217//3837 +f 2302//3838 2483//3838 2185//3838 +f 1589//3839 1588//3839 2206//3839 +f 1465//3840 3014//3840 1395//3840 +f 3004//3841 3000//3841 2977//3841 +f 2262//3842 2011//3842 2295//3842 +f 2235//3843 1498//3843 2354//3843 +f 2329//3844 1773//3844 2255//3844 +f 2140//3845 2270//3845 2351//3845 +f 1489//3846 1501//3846 2056//3846 +f 2744//3847 2750//3847 2749//3847 +f 2286//3848 1192//3848 1248//3848 +f 2056//3849 2185//3849 1489//3849 +f 2320//3850 2286//3850 2294//3850 +f 1192//3851 2286//3851 2320//3851 +f 2732//3852 2739//3852 2782//3852 +f 2342//3853 2246//3853 2521//3853 +f 2040//3854 2202//3854 2045//3854 +f 2266//3855 2040//3855 2068//3855 +f 2358//3856 2332//3856 2226//3856 +f 2337//3857 2360//3857 2318//3857 +f 2295//3858 2183//3858 2218//3858 +f 2235//3859 2293//3859 2657//3859 +f 2284//3860 2184//3860 2040//3860 +f 2011//3861 2183//3861 2295//3861 +f 1612//3862 2227//3862 2249//3862 +f 2256//3863 2329//3863 2255//3863 +f 2040//3864 1372//3864 2389//3864 +f 2113//3865 2045//3865 2202//3865 +f 2317//3866 2304//3866 2072//3866 +f 2217//3867 2235//3867 2197//3867 +f 2346//3868 2280//3868 1471//3868 +f 2056//3869 2193//3869 2185//3869 +f 2193//3870 2302//3870 2185//3870 +f 2441//3871 2333//3871 2341//3871 +f 2232//3872 2259//3872 2253//3872 +f 2198//3873 1536//3873 2353//3873 +f 1973//3874 1797//3874 1813//3874 +f 1536//3875 1924//3875 1932//3875 +f 2882//3876 2907//3876 2840//3876 +f 2183//3877 2011//3877 2290//3877 +f 2389//3878 1372//3878 1726//3878 +f 2253//3879 2259//3879 1366//3879 +f 2478//3880 2432//3880 1975//3880 +f 1870//3881 647//3881 1845//3881 +f 2279//3882 2343//3882 1982//3882 +f 1372//3883 2256//3883 2255//3883 +f 1520//3884 2188//3884 1535//3884 +f 2237//3885 2450//3885 2449//3885 +f 1982//3886 2227//3886 1612//3886 +f 2238//3887 2192//3887 1990//3887 +f 2194//3888 2297//3888 1422//3888 +f 2245//3889 2057//3889 1034//3889 +f 2197//3890 2235//3890 2354//3890 +f 1981//3891 2193//3891 2056//3891 +f 2326//3892 2222//3892 2360//3892 +f 2193//3893 2489//3893 2302//3893 +f 2227//3894 2344//3894 2284//3894 +f 2317//3895 2236//3895 2304//3895 +f 2815//3896 2905//3896 2863//3896 +f 2227//3897 2102//3897 2249//3897 +f 2350//3898 2044//3898 2332//3898 +f 2351//3899 2270//3899 1375//3899 +f 1400//3900 1085//3900 1070//3900 +f 1695//3901 2319//3901 2326//3901 +f 2220//3902 2194//3902 2269//3902 +f 2191//3903 2243//3903 2289//3903 +f 2290//3904 2301//3904 2183//3904 +f 2040//3905 2184//3905 2186//3905 +f 2241//3906 2284//3906 2040//3906 +f 1501//3907 1981//3907 2056//3907 +f 2081//3908 2218//3908 1651//3908 +f 2207//3909 2379//3909 2228//3909 +f 1411//3910 2276//3910 1426//3910 +f 1649//3911 2211//3911 1576//3911 +f 2211//3912 890//3912 1576//3912 +f 2057//3913 2245//3913 2192//3913 +f 2307//3914 2193//3914 1981//3914 +f 2291//3915 2116//3915 2274//3915 +f 2360//3916 2312//3916 2268//3916 +f 2349//3917 1610//3917 2191//3917 +f 1547//3918 1544//3918 1454//3918 +f 1964//3919 2041//3919 2216//3919 +f 2231//3920 890//3920 2211//3920 +f 2225//3921 2231//3921 2211//3921 +f 2231//3922 679//3922 890//3922 +f 2354//3923 1498//3923 2304//3923 +f 2183//3924 2260//3924 2218//3924 +f 2183//3925 2196//3925 2260//3925 +f 2815//3926 2863//3926 2822//3926 +f 2396//3927 1958//3927 2412//3927 +f 2334//3928 2303//3928 2244//3928 +f 1375//3929 1894//3929 2080//3929 +f 2815//3930 2822//3930 2780//3930 +f 2285//3931 2057//3931 2205//3931 +f 2472//3932 2173//3932 2165//3932 +f 2211//3933 1874//3933 2225//3933 +f 2225//3934 2251//3934 2231//3934 +f 2231//3935 2251//3935 679//3935 +f 2304//3936 2267//3936 2072//3936 +f 2182//3937 2210//3937 2177//3937 +f 1874//3938 2216//3938 2225//3938 +f 2216//3939 2221//3939 2225//3939 +f 2221//3940 2251//3940 2225//3940 +f 2251//3941 2265//3941 679//3941 +f 1958//3942 2296//3942 2207//3942 +f 2230//3943 2301//3943 2113//3943 +f 2258//3944 2353//3944 1536//3944 +f 2412//3945 1958//3945 2299//3945 +f 720//3946 2221//3946 2216//3946 +f 2278//3947 2982//3947 2265//3947 +f 830//3948 2358//3948 1407//3948 +f 1407//3949 2358//3949 1429//3949 +f 2359//3950 2318//3950 2272//3950 +f 1894//3951 1375//3951 2270//3951 +f 2294//3952 1184//3952 1535//3952 +f 2228//3953 2686//3953 2277//3953 +f 2297//3954 2072//3954 2177//3954 +f 2264//3955 2641//3955 1979//3955 +f 2312//3956 2285//3956 2205//3956 +f 2205//3957 2057//3957 2238//3957 +f 2386//3958 2424//3958 1353//3958 +f 2251//3959 2558//3959 2265//3959 +f 2265//3960 2558//3960 2278//3960 +f 2271//3961 2215//3961 996//3961 +f 2239//3962 2116//3962 2291//3962 +f 2350//3963 2359//3963 2044//3963 +f 2616//3964 2984//3964 2017//3964 +f 3010//3965 2413//3965 1058//3965 +f 1277//3966 2998//3966 1460//3966 +f 1501//3967 2233//3967 1981//3967 +f 2359//3968 2272//3968 2306//3968 +f 2239//3969 2351//3969 2116//3969 +f 2386//3970 2380//3970 2387//3970 +f 2226//3971 2044//3971 2274//3971 +f 1003//3972 2313//3972 730//3972 +f 2274//3973 1375//3973 2264//3973 +f 2582//3974 2980//3974 2974//3974 +f 2210//3975 2673//3975 2682//3975 +f 891//3976 1891//3976 1794//3976 +f 2311//3977 2190//3977 2086//3977 +f 2095//3978 2567//3978 2086//3978 +f 2190//3979 2095//3979 2086//3979 +f 2278//3980 3012//3980 2982//3980 +f 2982//3981 3012//3981 2508//3981 +f 2375//3982 2209//3982 2374//3982 +f 2995//3983 2518//3983 3009//3983 +f 2340//3984 2191//3984 2037//3984 +f 2184//3985 2253//3985 1366//3985 +f 2748//3986 2783//3986 2767//3986 +f 2238//3987 2057//3987 2192//3987 +f 2172//3988 2682//3988 2305//3988 +f 1911//3989 2261//3989 2233//3989 +f 2210//3990 2682//3990 2172//3990 +f 1493//3991 1033//3991 786//3991 +f 2288//3992 2489//3992 2193//3992 +f 1489//3993 2185//3993 1446//3993 +f 2301//3994 2230//3994 2196//3994 +f 2349//3995 2340//3995 2261//3995 +f 3015//3996 2983//3996 1475//3996 +f 2324//3997 1422//3997 2305//3997 +f 2496//3998 2282//3998 705//3998 +f 1651//3999 2218//3999 2339//3999 +f 2318//4000 2360//4000 2272//4000 +f 2518//4001 2558//4001 2251//4001 +f 1427//4002 2483//4002 1416//4002 +f 3012//4003 2309//4003 2315//4003 +f 1429//4004 2358//4004 2226//4004 +f 2203//4005 1429//4005 2226//4005 +f 2254//4006 2266//4006 2055//4006 +f 1209//4007 1175//4007 713//4007 +f 2379//4008 2207//4008 2296//4008 +f 2338//4009 1978//4009 2323//4009 +f 2343//4010 2279//4010 2232//4010 +f 2330//4011 2282//4011 2496//4011 +f 2330//4012 2136//4012 2282//4012 +f 2136//4013 2679//4013 2195//4013 +f 2282//4014 2136//4014 2195//4014 +f 1184//4015 2286//4015 742//4015 +f 1797//4016 1973//4016 566//4016 +f 2299//4017 1958//4017 2263//4017 +f 2189//4018 1589//4018 2199//4018 +f 2081//4019 2295//4019 2218//4019 +f 2372//4020 2371//4020 2362//4020 +f 2040//4021 2266//4021 2202//4021 +f 2305//4022 2674//4022 2324//4022 +f 1422//4023 2172//4023 2305//4023 +f 2327//4024 2287//4024 2072//4024 +f 2359//4025 2306//4025 2044//4025 +f 583//4026 890//4026 679//4026 +f 517//4027 2346//4027 2348//4027 +f 2236//4028 2030//4028 2021//4028 +f 2315//4029 2335//4029 2508//4029 +f 2347//4030 2496//4030 2560//4030 +f 2335//4031 2347//4031 2560//4031 +f 2347//4032 2330//4032 2496//4032 +f 1536//4033 2299//4033 2263//4033 +f 2674//4034 2684//4034 2324//4034 +f 1661//4035 2233//4035 2240//4035 +f 2197//4036 2354//4036 2021//4036 +f 1981//4037 2233//4037 2307//4037 +f 2309//4038 2316//4038 2315//4038 +f 2316//4039 2325//4039 2315//4039 +f 2315//4040 2325//4040 2335//4040 +f 2204//4041 2679//4041 2136//4041 +f 2448//4042 1994//4042 2439//4042 +f 743//4043 1982//4043 1605//4043 +f 2294//4044 2678//4044 2256//4044 +f 2186//4045 2256//4045 1372//4045 +f 2347//4046 1931//4046 2330//4046 +f 1931//4047 2136//4047 2330//4047 +f 2345//4048 2679//4048 2204//4048 +f 2182//4049 2177//4049 2072//4049 +f 2233//4050 2261//4050 2340//4050 +f 2274//4051 2264//4051 2178//4051 +f 2331//4052 2204//4052 2136//4052 +f 2044//4053 2306//4053 2291//4053 +f 1462//4054 2310//4054 2316//4054 +f 2310//4055 2325//4055 2316//4055 +f 2029//4056 2331//4056 2136//4056 +f 2209//4057 2375//4057 2345//4057 +f 2297//4058 2177//4058 2172//4058 +f 2263//4059 1924//4059 1536//4059 +f 1368//4060 2310//4060 1462//4060 +f 2325//4061 2356//4061 2347//4061 +f 2335//4062 2325//4062 2347//4062 +f 2347//4063 2356//4063 1931//4063 +f 2136//4064 1931//4064 2029//4064 +f 641//4065 2318//4065 2359//4065 +f 2200//4066 2140//4066 2351//4066 +f 2122//4067 2204//4067 2331//4067 +f 2037//4068 2289//4068 2276//4068 +f 641//4069 2359//4069 2350//4069 +f 2326//4070 2319//4070 2222//4070 +f 2037//4071 2191//4071 2289//4071 +f 2294//4072 2286//4072 1184//4072 +f 2272//4073 2268//4073 2306//4073 +f 1718//4074 2310//4074 1368//4074 +f 2336//4075 2356//4075 2325//4075 +f 2122//4076 2345//4076 2204//4076 +f 2336//4077 2325//4077 2310//4077 +f 2356//4078 1930//4078 1931//4078 +f 1931//4079 1930//4079 2029//4079 +f 2029//4080 2122//4080 2331//4080 +f 2242//4081 2345//4081 2122//4081 +f 1422//4082 2297//4082 2172//4082 +f 641//4083 2350//4083 830//4083 +f 2319//4084 1662//4084 2338//4084 +f 1366//4085 2259//4085 2186//4085 +f 1992//4086 1607//4086 2442//4086 +f 2336//4087 2357//4087 2356//4087 +f 2357//4088 1473//4088 2356//4088 +f 2356//4089 1473//4089 1930//4089 +f 2242//4090 2209//4090 2345//4090 +f 2242//4091 2374//4091 2209//4091 +f 2860//4092 960//4092 2851//4092 +f 2116//4093 2351//4093 1375//4093 +f 1601//4094 1610//4094 2349//4094 +f 2222//4095 2338//4095 2323//4095 +f 2518//4096 2251//4096 1019//4096 +f 2081//4097 2262//4097 2295//4097 +f 1034//4098 2057//4098 2397//4098 +f 2274//4099 2178//4099 2226//4099 +f 642//4100 1850//4100 586//4100 +f 2567//4101 2397//4101 2057//4101 +f 2336//4102 694//4102 2357//4102 +f 2300//4103 2122//4103 2029//4103 +f 1443//4104 2976//4104 1033//4104 +f 1026//4105 2916//4105 1020//4105 +f 1726//4106 2217//4106 2197//4106 +f 2344//4107 2343//4107 2253//4107 +f 2567//4108 2057//4108 2285//4108 +f 1930//4109 2283//4109 2029//4109 +f 2283//4110 2300//4110 2029//4110 +f 2300//4111 2242//4111 2122//4111 +f 2226//4112 2322//4112 2203//4112 +f 2308//4113 2072//4113 2297//4113 +f 2011//4114 2249//4114 2290//4114 +f 1641//4115 2081//4115 1651//4115 +f 1637//4116 2262//4116 2081//4116 +f 550//4117 719//4117 1699//4117 +f 1473//4118 2248//4118 1930//4118 +f 2252//4119 2247//4119 2055//4119 +f 2288//4120 2276//4120 2488//4120 +f 2266//4121 2068//4121 2055//4121 +f 2266//4122 2254//4122 2202//4122 +f 2040//4123 2389//4123 2068//4123 +f 1982//4124 2343//4124 2344//4124 +f 2269//4125 1422//4125 2324//4125 +f 2230//4126 2113//4126 2328//4126 +f 2320//4127 2294//4127 2256//4127 +f 2822//4128 2863//4128 2854//4128 +f 2346//4129 1429//4129 2203//4129 +f 2227//4130 1982//4130 2344//4130 +f 2328//4131 2113//4131 1860//4131 +f 2346//4132 2203//4132 2280//4132 +f 1536//4133 2198//4133 2299//4133 +f 1607//4134 1667//4134 1630//4134 +f 2186//4135 1192//4135 2256//4135 +f 2189//4136 2199//4136 1607//4136 +f 2355//4137 2257//4137 2236//4137 +f 2328//4138 2567//4138 2095//4138 +f 1978//4139 2260//4139 2323//4139 +f 2999//4140 3011//4140 3007//4140 +f 1930//4141 2248//4141 2283//4141 +f 2179//4142 2242//4142 2300//4142 +f 2179//4143 2465//4143 2242//4143 +f 2465//4144 2374//4144 2242//4144 +f 2465//4145 2608//4145 2374//4145 +f 2358//4146 2350//4146 2332//4146 +f 830//4147 2350//4147 2358//4147 +f 2290//4148 2045//4148 2301//4148 +f 2233//4149 2340//4149 2307//4149 +f 2661//4150 1915//4150 543//4150 +f 2625//4151 2635//4151 2062//4151 +f 2255//4152 1773//4152 2293//4152 +f 2357//4153 861//4153 2348//4153 +f 2357//4154 2248//4154 1473//4154 +f 2280//4155 2283//4155 2248//4155 +f 1471//4156 2280//4156 2248//4156 +f 2280//4157 2300//4157 2283//4157 +f 2280//4158 2203//4158 2300//4158 +f 2203//4159 2179//4159 2300//4159 +f 2268//4160 2205//4160 2291//4160 +f 2021//4161 2354//4161 2304//4161 +f 2275//4162 1984//4162 1975//4162 +f 2037//4163 2193//4163 2307//4163 +f 1605//4164 1982//4164 1612//4164 +f 2334//4165 2244//4165 2352//4165 +f 2357//4166 2348//4166 2248//4166 +f 2322//4167 2465//4167 2179//4167 +f 2102//4168 2241//4168 2045//4168 +f 1407//4169 1429//4169 2346//4169 +f 2037//4170 2288//4170 2193//4170 +f 786//4171 3002//4171 1224//4171 +f 1607//4172 1630//4172 2189//4172 +f 2854//4173 2863//4173 2862//4173 +f 2346//4174 2248//4174 2348//4174 +f 2346//4175 1471//4175 2248//4175 +f 2465//4176 2322//4176 2608//4176 +f 2199//4177 2206//4177 2019//4177 +f 1557//4178 809//4178 1212//4178 +f 2657//4179 2293//4179 2635//4179 +f 2203//4180 2322//4180 2179//4180 +f 2207//4181 2228//4181 2277//4181 +f 2252//4182 2671//4182 2030//4182 +f 1628//4183 2435//4183 750//4183 +f 1782//4184 1847//4184 2034//4184 +f 1663//4185 1622//4185 945//4185 +f 1022//4186 2658//4186 2426//4186 +f 2471//4187 1622//4187 2051//4187 +f 945//4188 1622//4188 2471//4188 +f 1532//4189 1622//4189 2681//4189 +f 1852//4190 2471//4190 2195//4190 +f 2677//4191 2471//4191 1852//4191 +f 2497//4192 1904//4192 2607//4192 +f 544//4193 1071//4193 551//4193 +f 2228//4194 2687//4194 2686//4194 +f 2497//4195 2498//4195 1904//4195 +f 2498//4196 2579//4196 1904//4196 +f 1398//4197 2276//4197 1411//4197 +f 2579//4198 2498//4198 1728//4198 +f 2464//4199 2488//4199 2276//4199 +f 1398//4200 2464//4200 2276//4200 +f 2526//4201 2212//4201 2375//4201 +f 1728//4202 2630//4202 1317//4202 +f 2464//4203 2452//4203 2488//4203 +f 2452//4204 2481//4204 2488//4204 +f 2414//4205 2275//4205 1975//4205 +f 1379//4206 2443//4206 1398//4206 +f 1398//4207 2443//4207 2464//4207 +f 2576//4208 2585//4208 2556//4208 +f 1433//4209 2499//4209 2246//4209 +f 2107//4210 1016//4210 2660//4210 +f 2509//4211 1727//4211 2612//4211 +f 2036//4212 2990//4212 2165//4212 +f 2688//4213 2363//4213 2689//4213 +f 1994//4214 2503//4214 2013//4214 +f 2443//4215 2452//4215 2464//4215 +f 2119//4216 2572//4216 2088//4216 +f 2611//4217 2119//4217 2647//4217 +f 2426//4218 2528//4218 2400//4218 +f 2606//4219 2596//4219 2597//4219 +f 720//4220 2444//4220 1019//4220 +f 2615//4221 2614//4221 2606//4221 +f 2587//4222 2615//4222 2606//4222 +f 1353//4223 2424//4223 1379//4223 +f 2424//4224 2415//4224 2443//4224 +f 1379//4225 2424//4225 2443//4225 +f 2481//4226 2302//4226 2489//4226 +f 2587//4227 2606//4227 2577//4227 +f 2615//4228 2107//4228 2614//4228 +f 2529//4229 2390//4229 2212//4229 +f 2367//4230 2398//4230 2528//4230 +f 2345//4231 2212//4231 2679//4231 +f 1830//4232 787//4232 595//4232 +f 2415//4233 2434//4233 2443//4233 +f 2443//4234 2434//4234 2452//4234 +f 2434//4235 2482//4235 2481//4235 +f 2452//4236 2434//4236 2481//4236 +f 2363//4237 2688//4237 2214//4237 +f 2687//4238 2214//4238 2688//4238 +f 2576//4239 2586//4239 2605//4239 +f 1317//4240 2981//4240 2573//4240 +f 2753//4241 2250//4241 2754//4241 +f 2019//4242 1871//4242 2199//4242 +f 1872//4243 2200//4243 1990//4243 +f 2481//4244 2482//4244 2302//4244 +f 2482//4245 2483//4245 2302//4245 +f 2579//4246 2624//4246 2670//4246 +f 2579//4247 1728//4247 2624//4247 +f 2624//4248 1728//4248 1017//4248 +f 787//4249 2607//4249 1532//4249 +f 787//4250 2497//4250 2607//4250 +f 1046//4251 2400//4251 2669//4251 +f 2548//4252 2535//4252 2461//4252 +f 730//4253 2324//4253 1099//4253 +f 2426//4254 1057//4254 2528//4254 +f 1904//4255 2565//4255 2051//4255 +f 2386//4256 2387//4256 2424//4256 +f 2498//4257 2559//4257 1728//4257 +f 1111//4258 2426//4258 2400//4258 +f 2107//4259 2660//4259 2614//4259 +f 2585//4260 2576//4260 2604//4260 +f 2548//4261 2560//4261 2496//4261 +f 2548//4262 2461//4262 2560//4262 +f 1728//4263 2559//4263 2630//4263 +f 2387//4264 2401//4264 2424//4264 +f 2401//4265 2415//4265 2424//4265 +f 2076//4266 1961//4266 1620//4266 +f 2677//4267 945//4267 2471//4267 +f 2462//4268 2486//4268 2450//4268 +f 2486//4269 2462//4269 2506//4269 +f 2528//4270 2529//4270 2527//4270 +f 2367//4271 2528//4271 2527//4271 +f 2064//4272 2398//4272 2367//4272 +f 2461//4273 2982//4273 2508//4273 +f 1869//4274 2064//4274 2668//4274 +f 1869//4275 2398//4275 2064//4275 +f 2595//4276 2622//4276 2642//4276 +f 2538//4277 2479//4277 2006//4277 +f 2538//4278 2546//4278 2479//4278 +f 2630//4279 2118//4279 1317//4279 +f 2415//4280 2425//4280 2434//4280 +f 2453//4281 2482//4281 2434//4281 +f 2425//4282 2453//4282 2434//4282 +f 1386//4283 2140//4283 2180//4283 +f 2576//4284 2605//4284 2634//4284 +f 2333//4285 2441//4285 2273//4285 +f 1535//4286 2188//4286 2294//4286 +f 1386//4287 2187//4287 2270//4287 +f 2064//4288 1015//4288 2685//4288 +f 1892//4289 2064//4289 2685//4289 +f 2660//4290 2676//4290 2659//4290 +f 1872//4291 996//4291 706//4291 +f 2623//4292 2634//4292 2633//4292 +f 2380//4293 2386//4293 2741//4293 +f 1905//4294 2526//4294 2374//4294 +f 2650//4295 2651//4295 2675//4295 +f 2676//4296 2175//4296 750//4296 +f 2401//4297 2408//4297 2415//4297 +f 2415//4298 2408//4298 2425//4298 +f 1019//4299 2221//4299 720//4299 +f 2634//4300 2651//4300 2650//4300 +f 2656//4301 2678//4301 2188//4301 +f 2374//4302 2526//4302 2375//4302 +f 2408//4303 2453//4303 2425//4303 +f 2594//4304 2574//4304 2632//4304 +f 2676//4305 750//4305 1022//4305 +f 2678//4306 2329//4306 2256//4306 +f 1532//4307 2607//4307 2051//4307 +f 2668//4308 1892//4308 2675//4308 +f 2555//4309 2612//4309 3005//4309 +f 2557//4310 2556//4310 2546//4310 +f 1622//4311 1532//4311 2051//4311 +f 1979//4312 2608//4312 2322//4312 +f 1016//4313 2157//4313 2175//4313 +f 2981//4314 2132//4314 2170//4314 +f 2633//4315 2650//4315 2649//4315 +f 2633//4316 2622//4316 2585//4316 +f 1392//4317 1697//4317 1709//4317 +f 2615//4318 2108//4318 2107//4318 +f 2547//4319 2884//4319 2577//4319 +f 2996//4320 3005//4320 2612//4320 +f 1796//4321 2920//4321 1789//4321 +f 2517//4322 2462//4322 2470//4322 +f 2557//4323 2546//4323 2538//4323 +f 2539//4324 2557//4324 2538//4324 +f 2668//4325 2064//4325 1892//4325 +f 2309//4326 3012//4326 2278//4326 +f 2656//4327 2062//4327 2678//4327 +f 2945//4328 2968//4328 2936//4328 +f 2495//4329 2525//4329 2507//4329 +f 2863//4330 2905//4330 2876//4330 +f 1016//4331 2676//4331 2660//4331 +f 2539//4332 2538//4332 2874//4332 +f 2643//4333 2634//4333 2605//4333 +f 2246//4334 2499//4334 2521//4334 +f 2685//4335 1822//4335 723//4335 +f 2444//4336 2509//4336 2555//4336 +f 1904//4337 1752//4337 2565//4337 +f 2380//4338 2392//4338 2401//4338 +f 2392//4339 2408//4339 2401//4339 +f 2479//4340 2546//4340 2525//4340 +f 1388//4341 2994//4341 3006//4341 +f 2585//4342 2622//4342 2583//4342 +f 1872//4343 2245//4343 996//4343 +f 944//4344 2535//4344 2548//4344 +f 2479//4345 2517//4345 2478//4345 +f 2369//4346 2403//4346 1345//4346 +f 2182//4347 2287//4347 2664//4347 +f 1904//4348 2670//4348 1752//4348 +f 1412//4349 1383//4349 2417//4349 +f 2905//4350 2921//4350 2876//4350 +f 2635//4351 2625//4351 2588//4351 +f 2062//4352 1773//4352 2678//4352 +f 2613//4353 2643//4353 2605//4353 +f 2064//4354 2367//4354 1015//4354 +f 2367//4355 2366//4355 1015//4355 +f 1466//4356 2531//4356 1483//4356 +f 2599//4357 2635//4357 2588//4357 +f 2644//4358 2520//4358 1905//4358 +f 2658//4359 1881//4359 1057//4359 +f 2614//4360 2660//4360 2613//4360 +f 2059//4361 1833//4361 627//4361 +f 2417//4362 2436//4362 1412//4362 +f 2436//4363 2445//4363 1412//4363 +f 1099//4364 2684//4364 2155//4364 +f 2521//4365 2531//4365 1466//4365 +f 2531//4366 2588//4366 1483//4366 +f 2072//4367 2267//4367 2327//4367 +f 1351//4368 2519//4368 2031//4368 +f 2519//4369 2520//4369 2644//4369 +f 2046//4370 1988//4370 2042//4370 +f 2517//4371 2495//4371 2462//4371 +f 2584//4372 2585//4372 2583//4372 +f 2436//4373 1433//4373 2445//4373 +f 2531//4374 2599//4374 2588//4374 +f 2599//4375 2618//4375 2635//4375 +f 2614//4376 2613//4376 2596//4376 +f 2670//4377 2624//4377 2548//4377 +f 1019//4378 2988//4378 2518//4378 +f 2417//4379 1385//4379 2436//4379 +f 2436//4380 2466//4380 1433//4380 +f 1433//4381 2466//4381 2499//4381 +f 2499//4382 2515//4382 2521//4382 +f 2515//4383 2550//4383 2531//4383 +f 2521//4384 2515//4384 2531//4384 +f 2531//4385 2550//4385 2599//4385 +f 2550//4386 2561//4386 2599//4386 +f 2561//4387 2589//4387 2599//4387 +f 2589//4388 2618//4388 2599//4388 +f 2462//4389 2507//4389 2537//4389 +f 2914//4390 2936//4390 2921//4390 +f 2525//4391 2584//4391 2507//4391 +f 2547//4392 2557//4392 2539//4392 +f 2526//4393 2529//4393 2212//4393 +f 2390//4394 1852//4394 2679//4394 +f 1385//4395 2454//4395 2436//4395 +f 2499//4396 2490//4396 2515//4396 +f 2635//4397 2618//4397 2657//4397 +f 1565//4398 1927//4398 1970//4398 +f 2872//4399 1876//4399 2893//4399 +f 2373//4400 2303//4400 2384//4400 +f 2604//4401 2623//4401 2585//4401 +f 1919//4402 1912//4402 2399//4402 +f 2400//4403 2398//4403 1869//4403 +f 2436//4404 2474//4404 2466//4404 +f 2466//4405 2474//4405 2499//4405 +f 2474//4406 2490//4406 2499//4406 +f 2470//4407 2462//4407 2450//4407 +f 2649//4408 723//4408 2642//4408 +f 2671//4409 2389//4409 1726//4409 +f 2674//4410 2682//4410 2683//4410 +f 2414//4411 1975//4411 2432//4411 +f 2515//4412 2532//4412 2550//4412 +f 2589//4413 2600//4413 2618//4413 +f 2625//4414 2656//4414 2617//4414 +f 2451//4415 2470//4415 2450//4415 +f 2537//4416 2584//4416 2575//4416 +f 2649//4417 2642//4417 2622//4417 +f 2556//4418 2585//4418 2525//4418 +f 2652//4419 927//4419 2897//4419 +f 2547//4420 2586//4420 2557//4420 +f 2436//4421 2454//4421 2474//4421 +f 2584//4422 2583//4422 2575//4422 +f 2583//4423 2622//4423 2575//4423 +f 2622//4424 2633//4424 2649//4424 +f 2369//4425 2418//4425 2403//4425 +f 2403//4426 2418//4426 1385//4426 +f 1385//4427 2418//4427 2454//4427 +f 2490//4428 2532//4428 2515//4428 +f 2550//4429 2532//4429 2561//4429 +f 2636//4430 2657//4430 2618//4430 +f 730//4431 2156//4431 1003//4431 +f 2662//4432 1498//4432 2657//4432 +f 2489//4433 2488//4433 2481//4433 +f 2671//4434 2197//4434 2030//4434 +f 2128//4435 2107//4435 2108//4435 +f 2783//4436 2784//4436 2790//4436 +f 2440//4437 2661//4437 543//4437 +f 2596//4438 2605//4438 2586//4438 +f 944//4439 1017//4439 2573//4439 +f 2418//4440 2419//4440 2454//4440 +f 2454//4441 2475//4441 2474//4441 +f 2475//4442 2490//4442 2474//4442 +f 2601//4443 2600//4443 2589//4443 +f 2579//4444 2670//4444 1904//4444 +f 2334//4445 2352//4445 2414//4445 +f 1048//4446 1822//4446 1351//4446 +f 2681//4447 787//4447 1532//4447 +f 1345//4448 2364//4448 2369//4448 +f 2533//4449 2551//4449 2532//4449 +f 2532//4450 2551//4450 2561//4450 +f 2551//4451 2589//4451 2561//4451 +f 2600//4452 2609//4452 2618//4452 +f 2609//4453 2636//4453 2618//4453 +f 2636//4454 2662//4454 2657//4454 +f 2440//4455 1727//4455 2509//4455 +f 1919//4456 2399//4456 2275//4456 +f 2520//4457 2527//4457 2526//4457 +f 2725//4458 2747//4458 2730//4458 +f 2369//4459 2404//4459 2418//4459 +f 2418//4460 2409//4460 2419//4460 +f 2419//4461 2446//4461 2454//4461 +f 2475//4462 2491//4462 2490//4462 +f 2490//4463 2500//4463 2532//4463 +f 2998//4464 2990//4464 2032//4464 +f 2384//4465 1925//4465 2373//4465 +f 2062//4466 2656//4466 2625//4466 +f 2418//4467 2404//4467 2409//4467 +f 2409//4468 2446//4468 2419//4468 +f 2454//4469 2446//4469 2475//4469 +f 2490//4470 2491//4470 2500//4470 +f 2500//4471 2522//4471 2532//4471 +f 2532//4472 2522//4472 2533//4472 +f 2601//4473 2589//4473 2551//4473 +f 2601//4474 2609//4474 2600//4474 +f 2608//4475 1905//4475 2374//4475 +f 2366//4476 2367//4476 2520//4476 +f 2367//4477 2527//4477 2520//4477 +f 1443//4478 1493//4478 1364//4478 +f 2369//4479 2388//4479 2404//4479 +f 2522//4480 2542//4480 2533//4480 +f 2507//4481 2584//4481 2537//4481 +f 2219//4482 2313//4482 2512//4482 +f 2005//4483 2661//4483 720//4483 +f 2365//4484 2370//4484 2369//4484 +f 2409//4485 2404//4485 2388//4485 +f 2552//4486 2533//4486 2542//4486 +f 2552//4487 2562//4487 2551//4487 +f 2533//4488 2552//4488 2551//4488 +f 2562//4489 2581//4489 2601//4489 +f 2551//4490 2562//4490 2601//4490 +f 2601//4491 2581//4491 2609//4491 +f 2609//4492 2663//4492 2636//4492 +f 2663//4493 2662//4493 2636//4493 +f 1822//4494 2519//4494 1351//4494 +f 723//4495 1822//4495 1901//4495 +f 2115//4496 2616//4496 2441//4496 +f 768//4497 684//4497 715//4497 +f 2314//4498 1917//4498 2277//4498 +f 2024//4499 1860//4499 2254//4499 +f 1384//4500 1385//4500 2417//4500 +f 2433//4501 2164//4501 2133//4501 +f 2662//4502 2181//4502 2267//4502 +f 2446//4503 2437//4503 2475//4503 +f 2491//4504 2467//4504 2500//4504 +f 2581//4505 2626//4505 2609//4505 +f 2626//4506 2663//4506 2609//4506 +f 2662//4507 2663//4507 2181//4507 +f 2936//4508 2935//4508 2921//4508 +f 2440//4509 2540//4509 1727//4509 +f 2426//4510 2658//4510 1057//4510 +f 2642//4511 1901//4511 2667//4511 +f 2247//4512 2024//4512 2254//4512 +f 1504//4513 1367//4513 3003//4513 +f 1017//4514 1728//4514 1317//4514 +f 2435//4515 945//4515 2677//4515 +f 2660//4516 2659//4516 2643//4516 +f 2658//4517 2435//4517 2677//4517 +f 2369//4518 2370//4518 2388//4518 +f 2409//4519 2437//4519 2446//4519 +f 2437//4520 2455//4520 2475//4520 +f 2475//4521 2455//4521 2491//4521 +f 2562//4522 2590//4522 2581//4522 +f 2590//4523 2627//4523 2581//4523 +f 2581//4524 2627//4524 2626//4524 +f 2237//4525 2414//4525 2451//4525 +f 2384//4526 2414//4526 2237//4526 +f 1881//4527 2677//4527 1852//4527 +f 1034//4528 1860//4528 2024//4528 +f 2212//4529 2345//4529 2375//4529 +f 2498//4530 2433//4530 2559//4530 +f 2409//4531 2405//4531 2437//4531 +f 2522//4532 2500//4532 2542//4532 +f 2462//4533 2495//4533 2507//4533 +f 2397//4534 1860//4534 1034//4534 +f 2397//4535 2328//4535 1860//4535 +f 2444//4536 720//4536 2661//4536 +f 3013//4537 3000//4537 1961//4537 +f 2405//4538 2420//4538 2437//4538 +f 2437//4539 2467//4539 2455//4539 +f 2467//4540 2491//4540 2455//4540 +f 2467//4541 2501//4541 2500//4541 +f 2627//4542 2637//4542 2626//4542 +f 2637//4543 2663//4543 2626//4543 +f 1901//4544 1822//4544 1740//4544 +f 2113//4545 2202//4545 1860//4545 +f 2607//4546 1904//4546 2051//4546 +f 2517//4547 2525//4547 2495//4547 +f 2501//4548 2542//4548 2500//4548 +f 2552//4549 2563//4549 2562//4549 +f 2562//4550 2563//4550 2590//4550 +f 2327//4551 2181//4551 2663//4551 +f 2637//4552 2327//4552 2663//4552 +f 1975//4553 1983//4553 2478//4553 +f 2271//4554 2024//4554 2257//4554 +f 1019//4555 2444//4555 2513//4555 +f 2737//4556 2298//4556 2303//4556 +f 2046//4557 2036//4557 2165//4557 +f 2420//4558 2427//4558 2437//4558 +f 2427//4559 2457//4559 2437//4559 +f 2457//4560 2456//4560 2437//4560 +f 2437//4561 2456//4561 2467//4561 +f 2456//4562 2501//4562 2467//4562 +f 1822//4563 2366//4563 2519//4563 +f 2567//4564 2328//4564 2397//4564 +f 2247//4565 2254//4565 2055//4565 +f 2668//4566 2400//4566 1869//4566 +f 2017//4567 2042//4567 1988//4567 +f 2388//4568 2393//4568 2409//4568 +f 2409//4569 2393//4569 2405//4569 +f 2590//4570 2638//4570 2627//4570 +f 2627//4571 2638//4571 2637//4571 +f 2410//4572 2405//4572 2393//4572 +f 2405//4573 2410//4573 2420//4573 +f 2456//4574 2476//4574 2501//4574 +f 2476//4575 2523//4575 2542//4575 +f 2501//4576 2476//4576 2542//4576 +f 2523//4577 2552//4577 2542//4577 +f 2623//4578 2633//4578 2585//4578 +f 2432//4579 2470//4579 2451//4579 +f 2365//4580 2378//4580 2370//4580 +f 2410//4581 2411//4581 2420//4581 +f 2420//4582 2411//4582 2427//4582 +f 2457//4583 2476//4583 2456//4583 +f 2563//4584 2591//4584 2590//4584 +f 2638//4585 2639//4585 2637//4585 +f 2444//4586 2661//4586 2440//4586 +f 2416//4587 2408//4587 2392//4587 +f 996//4588 2024//4588 2271//4588 +f 2643//4589 2651//4589 2634//4589 +f 1017//4590 1317//4590 2573//4590 +f 2361//4591 2371//4591 2365//4591 +f 2365//4592 2371//4592 2378//4592 +f 2553//4593 2552//4593 2523//4593 +f 2552//4594 2553//4594 2563//4594 +f 2590//4595 2591//4595 2638//4595 +f 2664//4596 2327//4596 2637//4596 +f 996//4597 1034//4597 2024//4597 +f 2508//4598 2335//4598 2560//4598 +f 2558//4599 2518//4599 2278//4599 +f 2378//4600 2381//4600 2370//4600 +f 2381//4601 2388//4601 2370//4601 +f 2411//4602 2458//4602 2427//4602 +f 2457//4603 2458//4603 2476//4603 +f 2638//4604 2640//4604 2639//4604 +f 2664//4605 2637//4605 2639//4605 +f 2613//4606 2660//4606 2643//4606 +f 2555//4607 2509//4607 2612//4607 +f 2119//4608 2155//4608 2665//4608 +f 2361//4609 2473//4609 2371//4609 +f 2388//4610 2381//4610 2393//4610 +f 2427//4611 2458//4611 2457//4611 +f 2458//4612 2477//4612 2476//4612 +f 2591//4613 2610//4613 2638//4613 +f 2610//4614 2640//4614 2638//4614 +f 2640//4615 2664//4615 2639//4615 +f 1455//4616 2164//4616 2433//4616 +f 2649//4617 2650//4617 723//4617 +f 2398//4618 2400//4618 2528//4618 +f 2563//4619 2543//4619 2591//4619 +f 1902//4620 2641//4620 1903//4620 +f 1903//4621 2641//4621 2080//4621 +f 2444//4622 2440//4622 2509//4622 +f 1455//4623 2433//4623 1830//4623 +f 2624//4624 1017//4624 944//4624 +f 2381//4625 2394//4625 2393//4625 +f 2393//4626 2394//4626 2410//4626 +f 2411//4627 2421//4627 2458//4627 +f 2477//4628 2492//4628 2476//4628 +f 2476//4629 2492//4629 2523//4629 +f 2553//4630 2543//4630 2563//4630 +f 2591//4631 2592//4631 2610//4631 +f 1336//4632 1337//4632 1341//4632 +f 2680//4633 2182//4633 2664//4633 +f 595//4634 1455//4634 1830//4634 +f 2718//4635 2730//4635 2717//4635 +f 2525//4636 2585//4636 2584//4636 +f 2394//4637 2406//4637 2410//4637 +f 2406//4638 2421//4638 2411//4638 +f 2410//4639 2406//4639 2411//4639 +f 2421//4640 2428//4640 2458//4640 +f 2492//4641 2524//4641 2523//4641 +f 2524//4642 2553//4642 2523//4642 +f 2202//4643 2254//4643 1860//4643 +f 2303//4644 2334//4644 2384//4644 +f 2644//4645 1905//4645 2608//4645 +f 2458//4646 2459//4646 2477//4646 +f 2543//4647 2592//4647 2591//4647 +f 2281//4648 2664//4648 2640//4648 +f 2281//4649 2680//4649 2664//4649 +f 1317//4650 2536//4650 2981//4650 +f 2017//4651 2441//4651 2616//4651 +f 2428//4652 2468//4652 2458//4652 +f 2458//4653 2468//4653 2459//4653 +f 2477//4654 2484//4654 2492//4654 +f 2592//4655 2619//4655 2610//4655 +f 2619//4656 2640//4656 2610//4656 +f 2479//4657 2525//4657 2517//4657 +f 706//4658 2140//4658 1872//4658 +f 2615//4659 2073//4659 2108//4659 +f 2444//4660 2555//4660 2513//4660 +f 2212//4661 2390//4661 2679//4661 +f 1912//4662 2385//4662 1405//4662 +f 2679//4663 1852//4663 2195//4663 +f 2484//4664 2524//4664 2492//4664 +f 2524//4665 2544//4665 2543//4665 +f 2553//4666 2524//4666 2543//4666 +f 2544//4667 2569//4667 2592//4667 +f 2543//4668 2544//4668 2592//4668 +f 2363//4669 2362//4669 2689//4669 +f 2385//4670 2376//4670 1405//4670 +f 1057//4671 2529//4671 2528//4671 +f 2371//4672 2372//4672 2378//4672 +f 2378//4673 2372//4673 2381//4673 +f 2477//4674 2459//4674 2484//4674 +f 2569//4675 2602//4675 2592//4675 +f 2592//4676 2602//4676 2619//4676 +f 2619//4677 2645//4677 2640//4677 +f 2640//4678 2645//4678 2281//4678 +f 2577//4679 2597//4679 2547//4679 +f 2675//4680 2685//4680 723//4680 +f 2546//4681 2556//4681 2525//4681 +f 2327//4682 2664//4682 2287//4682 +f 2428//4683 2422//4683 2468//4683 +f 2484//4684 2493//4684 2524//4684 +f 2602//4685 2645//4685 2619//4685 +f 2529//4686 1057//4686 2390//4686 +f 2208//4687 2206//4687 1562//4687 +f 1909//4688 2721//4688 2373//4688 +f 1909//4689 1907//4689 2721//4689 +f 2244//4690 2298//4690 2250//4690 +f 3014//4691 2980//4691 2984//4691 +f 2223//4692 2215//4692 2271//4692 +f 2459//4693 2493//4693 2484//4693 +f 2544//4694 2564//4694 2569//4694 +f 2864//4695 2831//4695 2800//4695 +f 2668//4696 2669//4696 2400//4696 +f 1385//4697 1374//4697 2403//4697 +f 2675//4698 723//4698 2650//4698 +f 3011//4699 2977//4699 3007//4699 +f 2704//4700 2718//4700 2717//4700 +f 2314//4701 2693//4701 1918//4701 +f 2991//4702 2983//4702 1899//4702 +f 1899//4703 2229//4703 2991//4703 +f 2642//4704 723//4704 1901//4704 +f 2372//4705 2382//4705 2381//4705 +f 2381//4706 2395//4706 2394//4706 +f 2407//4707 2406//4707 2394//4707 +f 2395//4708 2407//4708 2394//4708 +f 2407//4709 2421//4709 2406//4709 +f 2421//4710 2422//4710 2428//4710 +f 2468//4711 2493//4711 2459//4711 +f 2493//4712 2494//4712 2524//4712 +f 2645//4713 2673//4713 2281//4713 +f 2279//4714 607//4714 853//4714 +f 2275//4715 2391//4715 1919//4715 +f 1037//4716 1861//4716 1029//4716 +f 2055//4717 2671//4717 2252//4717 +f 2658//4718 2677//4718 1881//4718 +f 1894//4719 1903//4719 2080//4719 +f 2831//4720 2906//4720 2830//4720 +f 2508//4721 3012//4721 2315//4721 +f 2381//4722 2382//4722 2395//4722 +f 2494//4723 2564//4723 2544//4723 +f 2524//4724 2494//4724 2544//4724 +f 2564//4725 2603//4725 2569//4725 +f 2569//4726 2603//4726 2602//4726 +f 2602//4727 2628//4727 2645//4727 +f 2052//4728 2165//4728 2173//4728 +f 2659//4729 2669//4729 2643//4729 +f 2654//4730 543//4730 2442//4730 +f 2884//4731 2547//4731 2539//4731 +f 2766//4732 2753//4732 2754//4732 +f 2753//4733 2766//4733 2376//4733 +f 2906//4734 2905//4734 2830//4734 +f 2983//4735 3015//4735 1899//4735 +f 2991//4736 2229//4736 2224//4736 +f 1016//4737 2128//4737 2157//4737 +f 2952//4738 1741//4738 2945//4738 +f 2429//4739 2421//4739 2407//4739 +f 2429//4740 2422//4740 2421//4740 +f 2468//4741 2422//4741 2493//4741 +f 2422//4742 2502//4742 2493//4742 +f 2493//4743 2502//4743 2494//4743 +f 2628//4744 2673//4744 2645//4744 +f 2669//4745 2668//4745 2643//4745 +f 1022//4746 2480//4746 2658//4746 +f 1386//4747 2270//4747 2140//4747 +f 2224//4748 2229//4748 2019//4748 +f 750//4749 2480//4749 1022//4749 +f 2786//4750 2798//4750 1912//4750 +f 2839//4751 2869//4751 2833//4751 +f 2062//4752 2635//4752 2293//4752 +f 2046//4753 2042//4753 2036//4753 +f 2494//4754 2570//4754 2564//4754 +f 2564//4755 2570//4755 2603//4755 +f 2527//4756 2529//4756 2526//4756 +f 2478//4757 2517//4757 2470//4757 +f 2520//4758 2526//4758 1905//4758 +f 2079//4759 2441//4759 2017//4759 +f 2758//4760 2757//4760 2740//4760 +f 519//4761 2229//4761 1899//4761 +f 2372//4762 2362//4762 2382//4762 +f 2429//4763 2460//4763 2422//4763 +f 2460//4764 2502//4764 2422//4764 +f 2494//4765 2534//4765 2570//4765 +f 2629//4766 2673//4766 2628//4766 +f 2606//4767 2597//4767 2577//4767 +f 1912//4768 2798//4768 2201//4768 +f 2676//4769 2669//4769 2659//4769 +f 1033//4770 2989//4770 3002//4770 +f 2672//4771 519//4771 1899//4771 +f 519//4772 2019//4772 2229//4772 +f 2206//4773 2208//4773 2019//4773 +f 2502//4774 2534//4774 2494//4774 +f 2629//4775 2683//4775 2673//4775 +f 2683//4776 2682//4776 2673//4776 +f 2597//4777 2596//4777 2586//4777 +f 1830//4778 2498//4778 2497//4778 +f 2002//4779 2133//4779 2164//4779 +f 2597//4780 2586//4780 2547//4780 +f 2875//4781 1724//4781 1747//4781 +f 2447//4782 2460//4782 2429//4782 +f 2570//4783 2593//4783 2603//4783 +f 2602//4784 2629//4784 2628//4784 +f 2613//4785 2605//4785 2596//4785 +f 2676//4786 1046//4786 2669//4786 +f 2366//4787 2520//4787 2519//4787 +f 2537//4788 2575//4788 2566//4788 +f 2690//4789 2698//4789 2689//4789 +f 2676//4790 1499//4790 1046//4790 +f 2423//4791 2407//4791 2395//4791 +f 2423//4792 2429//4792 2407//4792 +f 2502//4793 2554//4793 2534//4793 +f 2554//4794 2570//4794 2534//4794 +f 2603//4795 2593//4795 2602//4795 +f 2602//4796 2593//4796 2629//4796 +f 2296//4797 1958//4797 2396//4797 +f 1730//4798 1729//4798 2834//4798 +f 1381//4799 2453//4799 2408//4799 +f 1381//4800 1417//4800 2453//4800 +f 1886//4801 2912//4801 1893//4801 +f 2377//4802 1018//4802 2541//4802 +f 2672//4803 1899//4803 1018//4803 +f 2382//4804 2296//4804 2395//4804 +f 2423//4805 2447//4805 2429//4805 +f 2554//4806 2502//4806 2460//4806 +f 1995//4807 2538//4807 2006//4807 +f 2634//4808 2650//4808 2633//4808 +f 2036//4809 2042//4809 2032//4809 +f 2385//4810 1912//4810 1919//4810 +f 1735//4811 1922//4811 1913//4811 +f 1871//4812 519//4812 2672//4812 +f 2693//4813 2314//4813 2277//4813 +f 2382//4814 2379//4814 2296//4814 +f 2396//4815 2395//4815 2296//4815 +f 2396//4816 2423//4816 2395//4816 +f 2554//4817 2571//4817 2570//4817 +f 2620//4818 2593//4818 2570//4818 +f 2571//4819 2620//4819 2570//4819 +f 2620//4820 2646//4820 2593//4820 +f 2646//4821 2629//4821 2593//4821 +f 2629//4822 2646//4822 2683//4822 +f 1046//4823 1499//4823 1111//4823 +f 2606//4824 2614//4824 2596//4824 +f 1724//4825 1735//4825 1913//4825 +f 1913//4826 1747//4826 1724//4826 +f 2644//4827 2516//4827 2031//4827 +f 2363//4828 2379//4828 2382//4828 +f 2447//4829 2554//4829 2460//4829 +f 566//4830 1783//4830 544//4830 +f 2181//4831 2327//4831 2267//4831 +f 2511//4832 1894//4832 2187//4832 +f 1454//4833 1522//4833 1602//4833 +f 2461//4834 2508//4834 2560//4834 +f 2396//4835 2430//4835 2423//4835 +f 2438//4836 2447//4836 2423//4836 +f 2047//4837 2554//4837 2447//4837 +f 2047//4838 2048//4838 2554//4838 +f 2572//4839 2554//4839 2048//4839 +f 2572//4840 2571//4840 2554//4840 +f 1752//4841 705//4841 2282//4841 +f 2511//4842 1903//4842 1894//4842 +f 2389//4843 2055//4843 2068//4843 +f 2368//4844 1018//4844 2377//4844 +f 2368//4845 2672//4845 1018//4845 +f 2910//4846 1789//4846 2920//4846 +f 2940//4847 2957//4847 667//4847 +f 2430//4848 2438//4848 2423//4848 +f 2439//4849 2449//4849 2448//4849 +f 2384//4850 2237//4850 1940//4850 +f 2572//4851 2611//4851 2571//4851 +f 2611//4852 2620//4852 2571//4852 +f 2646//4853 2665//4853 2683//4853 +f 2665//4854 2674//4854 2683//4854 +f 1620//4855 2149//4855 2076//4855 +f 2471//4856 2282//4856 2195//4856 +f 2471//4857 2565//4857 2282//4857 +f 1040//4858 1049//4858 547//4858 +f 2128//4859 2108//4859 2123//4859 +f 2747//4860 2743//4860 2730//4860 +f 3010//4861 2541//4861 2598//4861 +f 3010//4862 2377//4862 2541//4862 +f 2631//4863 2368//4863 2377//4863 +f 2530//4864 2672//4864 2368//4864 +f 2530//4865 2018//4865 1871//4865 +f 2672//4866 2530//4866 1871//4866 +f 1628//4867 750//4867 2175//4867 +f 2643//4868 2668//4868 2651//4868 +f 2647//4869 2620//4869 2611//4869 +f 3005//4870 2513//4870 2555//4870 +f 2565//4871 1752//4871 2282//4871 +f 2575//4872 2622//4872 2595//4872 +f 2703//4873 2709//4873 2700//4873 +f 2862//4874 2863//4874 2876//4874 +f 2215//4875 706//4875 996//4875 +f 1019//4876 2251//4876 2221//4876 +f 2647//4877 2646//4877 2620//4877 +f 2646//4878 2647//4878 2665//4878 +f 2665//4879 2684//4879 2674//4879 +f 1016//4880 2175//4880 2676//4880 +f 2512//4881 1903//4881 2511//4881 +f 2811//4882 2866//4882 2843//4882 +f 2866//4883 2878//4883 2843//4883 +f 2908//4884 2928//4884 2878//4884 +f 2866//4885 2908//4885 2878//4885 +f 2916//4886 1026//4886 2929//4886 +f 2769//4887 2768//4887 2757//4887 +f 2960//4888 1879//4888 2970//4888 +f 2785//4889 2796//4889 2812//4889 +f 1360//4890 2797//4890 2778//4890 +f 2807//4891 2824//4891 2832//4891 +f 2768//4892 2809//4892 2808//4892 +f 2797//4893 2804//4893 2792//4893 +f 2784//4894 2808//4894 2807//4894 +f 2937//4895 2969//4895 2914//4895 +f 2795//4896 2801//4896 2781//4896 +f 2704//4897 2705//4897 2718//4897 +f 2785//4898 2777//4898 2796//4898 +f 2848//4899 2843//4899 2878//4899 +f 2938//4900 2946//4900 2923//4900 +f 2796//4901 2777//4901 2812//4901 +f 1923//4902 2173//4902 2472//4902 +f 2777//4903 2816//4903 2812//4903 +f 2811//4904 2843//4904 2810//4904 +f 1770//4905 960//4905 2860//4905 +f 2472//4906 3016//4906 2992//4906 +f 2951//4907 2913//4907 2958//4907 +f 777//4908 2880//4908 2873//4908 +f 1363//4909 1341//4909 1337//4909 +f 2825//4910 2839//4910 2804//4910 +f 3013//4911 2893//4911 2948//4911 +f 2960//4912 2970//4912 2937//4912 +f 1461//4913 2872//4913 2893//4913 +f 3013//4914 1461//4914 2893//4914 +f 2719//4915 2709//4915 2726//4915 +f 2759//4916 2751//4916 2741//4916 +f 2759//4917 2770//4917 2751//4917 +f 2770//4918 2777//4918 2785//4918 +f 1070//4919 1085//4919 2819//4919 +f 2042//4920 2582//4920 2032//4920 +f 2938//4921 2953//4921 2946//4921 +f 2816//4922 2866//4922 2811//4922 +f 2380//4923 2751//4923 1340//4923 +f 2762//4924 2756//4924 2725//4924 +f 2848//4925 2878//4925 2877//4925 +f 2749//4926 2758//4926 2740//4926 +f 2769//4927 2809//4927 2768//4927 +f 2843//4928 2838//4928 2810//4928 +f 2953//4929 2961//4929 2487//4929 +f 2843//4930 2848//4930 2838//4930 +f 2923//4931 2946//4931 2928//4931 +f 2807//4932 2832//4932 2790//4932 +f 1380//4933 2939//4933 2930//4933 +f 2001//4934 2007//4934 2886//4934 +f 2751//4935 2745//4935 2744//4935 +f 2929//4936 1026//4936 531//4936 +f 2549//4937 1750//4937 540//4937 +f 1435//4938 2652//4938 1202//4938 +f 3005//4939 2996//4939 2976//4939 +f 520//4940 695//4940 711//4940 +f 2995//4941 1462//4941 2309//4941 +f 2652//4942 2897//4942 2896//4942 +f 2891//4943 2908//4943 2866//4943 +f 2891//4944 1020//4944 2908//4944 +f 2908//4945 1020//4945 2916//4945 +f 2915//4946 2916//4946 2929//4946 +f 2908//4947 2916//4947 2915//4947 +f 2832//4948 2840//4948 2790//4948 +f 2953//4949 2971//4949 2946//4949 +f 2812//4950 2816//4950 2811//4950 +f 2758//4951 2763//4951 2757//4951 +f 2918//4952 1614//4952 2896//4952 +f 2752//4953 2759//4953 2741//4953 +f 2759//4954 2771//4954 2770//4954 +f 2771//4955 2777//4955 2770//4955 +f 2838//4956 2848//4956 2842//4956 +f 2771//4957 2803//4957 2777//4957 +f 2803//4958 2816//4958 2777//4958 +f 2750//4959 2745//4959 2764//4959 +f 2652//4960 2896//4960 1202//4960 +f 2897//4961 2918//4961 2896//4961 +f 1614//4962 2918//4962 2857//4962 +f 2867//4963 2866//4963 2816//4963 +f 2867//4964 2891//4964 2866//4964 +f 2751//4965 2744//4965 2734//4965 +f 2849//4966 2869//4966 2839//4966 +f 2822//4967 2854//4967 2829//4967 +f 2767//4968 2783//4968 2790//4968 +f 2825//4969 2849//4969 2839//4969 +f 2953//4970 2938//4970 1025//4970 +f 2782//4971 2781//4971 2762//4971 +f 2897//4972 927//4972 2918//4972 +f 637//4973 1485//4973 1346//4973 +f 2748//4974 2757//4974 2783//4974 +f 2739//4975 2727//4975 2748//4975 +f 2733//4976 2727//4976 2739//4976 +f 2709//4977 2710//4977 2726//4977 +f 2058//4978 2932//4978 2063//4978 +f 927//4979 1380//4979 2918//4979 +f 2918//4980 1380//4980 2930//4980 +f 2930//4981 2931//4981 2918//4981 +f 2918//4982 2931//4982 2857//4982 +f 2929//4983 2923//4983 2915//4983 +f 2710//4984 2733//4984 2726//4984 +f 2782//4985 2762//4985 2732//4985 +f 2720//4986 2728//4986 2711//4986 +f 2931//4987 2846//4987 2857//4987 +f 2857//4988 2846//4988 1346//4988 +f 2844//4989 2816//4989 2803//4989 +f 2844//4990 2867//4990 2816//4990 +f 2967//4991 2968//4991 1029//4991 +f 2732//4992 2762//4992 2731//4992 +f 2732//4993 2731//4993 2719//4993 +f 2790//4994 2795//4994 2782//4994 +f 2692//4995 2711//4995 2691//4995 +f 2711//4996 2703//4996 2691//4996 +f 2846//4997 2580//4997 1346//4997 +f 1346//4998 2580//4998 637//4998 +f 2745//4999 2750//4999 2744//4999 +f 1183//5000 1464//5000 1658//5000 +f 2731//5001 2725//5001 2713//5001 +f 1730//5002 1723//5002 1731//5002 +f 2580//5003 2879//5003 637//5003 +f 2744//5004 2740//5004 2728//5004 +f 2804//5005 2839//5005 2818//5005 +f 2839//5006 2833//5006 2818//5006 +f 2731//5007 2762//5007 2725//5007 +f 2705//5008 2706//5008 2713//5008 +f 1024//5009 1039//5009 2549//5009 +f 2931//5010 2431//5010 2846//5010 +f 2846//5011 2431//5011 2580//5011 +f 2922//5012 2927//5012 2855//5012 +f 2762//5013 2781//5013 2756//5013 +f 2840//5014 2847//5014 2795//5014 +f 1854//5015 2879//5015 2580//5015 +f 2954//5016 1816//5016 1854//5016 +f 2740//5017 2744//5017 2749//5017 +f 1667//5018 1677//5018 1630//5018 +f 2945//5019 2969//5019 2952//5019 +f 2930//5020 2939//5020 2931//5020 +f 3009//5021 2988//5021 2976//5021 +f 2804//5022 2818//5022 2791//5022 +f 1339//5023 2741//5023 2386//5023 +f 665//5024 753//5024 1552//5024 +f 523//5025 665//5025 1552//5025 +f 1059//5026 1442//5026 2895//5026 +f 2954//5027 2920//5027 1898//5027 +f 1442//5028 2110//5028 2895//5028 +f 2700//5029 2702//5029 2699//5029 +f 2970//5030 540//5030 2402//5030 +f 2801//5031 2847//5031 2776//5031 +f 2939//5032 2856//5032 2931//5032 +f 2856//5033 2431//5033 2931//5033 +f 2431//5034 1391//5034 2580//5034 +f 2850//5035 1854//5035 2580//5035 +f 2850//5036 2954//5036 1854//5036 +f 2842//5037 2865//5037 2841//5037 +f 1339//5038 2752//5038 2741//5038 +f 2865//5039 2882//5039 2841//5039 +f 1736//5040 2902//5040 1725//5040 +f 1192//5041 1270//5041 1248//5041 +f 942//5042 777//5042 1857//5042 +f 2702//5043 2705//5043 2704//5043 +f 2855//5044 2890//5044 2847//5044 +f 2580//5045 1391//5045 2850//5045 +f 2804//5046 2791//5046 2792//5046 +f 1253//5047 1148//5047 1106//5047 +f 1189//5048 818//5048 528//5048 +f 2898//5049 1189//5049 528//5049 +f 2713//5050 2725//5050 2718//5050 +f 2705//5051 2713//5051 2718//5051 +f 2836//5052 2832//5052 2824//5052 +f 2801//5053 2776//5053 2747//5053 +f 2699//5054 2702//5054 2698//5054 +f 2900//5055 2939//5055 1359//5055 +f 2898//5056 1086//5056 1189//5056 +f 1642//5057 637//5057 2879//5057 +f 1346//5058 1485//5058 2857//5058 +f 2702//5059 2700//5059 2705//5059 +f 2699//5060 2698//5060 2690//5060 +f 2859//5061 2431//5061 2856//5061 +f 2859//5062 1391//5062 2431//5062 +f 2850//5063 2920//5063 2954//5063 +f 1485//5064 1614//5064 2857//5064 +f 2813//5065 2803//5065 2771//5065 +f 2813//5066 2817//5066 2803//5066 +f 2763//5067 2769//5067 2757//5067 +f 1020//5068 1027//5068 1026//5068 +f 2951//5069 1469//5069 1733//5069 +f 2101//5070 2912//5070 1838//5070 +f 1391//5071 2910//5071 2850//5071 +f 2850//5072 2910//5072 2920//5072 +f 2977//5073 2993//5073 1393//5073 +f 2890//5074 2926//5074 2864//5074 +f 2795//5075 2781//5075 2782//5075 +f 2817//5076 2844//5076 2803//5076 +f 1138//5077 1149//5077 673//5077 +f 2510//5078 2870//5078 2075//5078 +f 2963//5079 2950//5079 2510//5079 +f 2870//5080 2568//5080 2965//5080 +f 1442//5081 2912//5081 2101//5081 +f 2847//5082 2864//5082 2776//5082 +f 2549//5083 540//5083 2970//5083 +f 2860//5084 2856//5084 2939//5084 +f 2860//5085 2859//5085 2856//5085 +f 2058//5086 2894//5086 2932//5086 +f 2926//5087 2906//5087 2864//5087 +f 1136//5088 1023//5088 1665//5088 +f 2950//5089 2568//5089 2510//5089 +f 1059//5090 2965//5090 1442//5090 +f 2840//5091 2855//5091 2847//5091 +f 2860//5092 2939//5092 2900//5092 +f 1879//5093 2549//5093 2970//5093 +f 2883//5094 2891//5094 2867//5094 +f 2883//5095 1020//5095 2891//5095 +f 2965//5096 1414//5096 1442//5096 +f 1414//5097 2912//5097 1442//5097 +f 1749//5098 2402//5098 1758//5098 +f 2851//5099 2859//5099 2860//5099 +f 1391//5100 1286//5100 2910//5100 +f 1286//5101 1789//5101 2910//5101 +f 2946//5102 2960//5102 2928//5102 +f 2808//5103 2809//5103 2824//5103 +f 2883//5104 2844//5104 1342//5104 +f 2932//5105 2933//5105 2950//5105 +f 2964//5106 2943//5106 2950//5106 +f 2950//5107 2943//5107 2568//5107 +f 3004//5108 3008//5108 2170//5108 +f 1835//5109 669//5109 2852//5109 +f 1770//5110 2860//5110 2900//5110 +f 2962//5111 1391//5111 2859//5111 +f 1391//5112 2962//5112 1286//5112 +f 2960//5113 2937//5113 2928//5113 +f 2865//5114 2848//5114 2877//5114 +f 2757//5115 2768//5115 2783//5115 +f 2894//5116 2933//5116 2932//5116 +f 2933//5117 2964//5117 2950//5117 +f 2797//5118 2792//5118 2778//5118 +f 1336//5119 2711//5119 1337//5119 +f 1522//5120 2273//5120 2079//5120 +f 2962//5121 2859//5121 2851//5121 +f 2784//5122 2807//5122 2790//5122 +f 2837//5123 2838//5123 2842//5123 +f 2943//5124 1526//5124 2568//5124 +f 2740//5125 2757//5125 2727//5125 +f 2909//5126 839//5126 1286//5126 +f 2884//5127 2881//5127 2894//5127 +f 2568//5128 2949//5128 2965//5128 +f 2949//5129 2911//5129 2965//5129 +f 2965//5130 2911//5130 1414//5130 +f 2288//5131 2488//5131 2489//5131 +f 2819//5132 2804//5132 2797//5132 +f 1360//5133 2819//5133 2797//5133 +f 2834//5134 1729//5134 2799//5134 +f 2653//5135 2962//5135 2851//5135 +f 2962//5136 2909//5136 1286//5136 +f 1746//5137 1745//5137 1730//5137 +f 2786//5138 2799//5138 2798//5138 +f 2881//5139 2885//5139 2894//5139 +f 2885//5140 2919//5140 2894//5140 +f 2894//5141 2919//5141 2933//5141 +f 2933//5142 2943//5142 2964//5142 +f 2943//5143 690//5143 1526//5143 +f 2911//5144 2887//5144 1414//5144 +f 2887//5145 2912//5145 1414//5145 +f 2887//5146 1893//5146 2912//5146 +f 2886//5147 2014//5147 2022//5147 +f 1647//5148 1817//5148 1656//5148 +f 2766//5149 2787//5149 2786//5149 +f 1405//5150 2766//5150 2786//5150 +f 2933//5151 2919//5151 2943//5151 +f 2919//5152 2944//5152 2943//5152 +f 2943//5153 2944//5153 690//5153 +f 2703//5154 2700//5154 2695//5154 +f 2726//5155 2733//5155 2732//5155 +f 2826//5156 2653//5156 2851//5156 +f 2653//5157 2898//5157 2962//5157 +f 2962//5158 2898//5158 2909//5158 +f 1413//5159 1369//5159 1357//5159 +f 2786//5160 2787//5160 2799//5160 +f 2845//5161 2817//5161 2813//5161 +f 690//5162 2949//5162 2568//5162 +f 1526//5163 690//5163 2568//5163 +f 2691//5164 2699//5164 2690//5164 +f 2732//5165 2733//5165 2739//5165 +f 1730//5166 1734//5166 1729//5166 +f 2892//5167 2653//5167 2826//5167 +f 2898//5168 528//5168 2909//5168 +f 2838//5169 2809//5169 2769//5169 +f 2754//5170 2787//5170 2766//5170 +f 2885//5171 2901//5171 2919//5171 +f 2924//5172 2944//5172 2919//5172 +f 2944//5173 2956//5173 690//5173 +f 2949//5174 2858//5174 2911//5174 +f 2911//5175 2858//5175 2887//5175 +f 2970//5176 2402//5176 2969//5176 +f 2756//5177 2781//5177 2747//5177 +f 2747//5178 2776//5178 2743//5178 +f 2892//5179 2898//5179 2653//5179 +f 2837//5180 2824//5180 2809//5180 +f 2837//5181 2836//5181 2824//5181 +f 2754//5182 2788//5182 2787//5182 +f 1488//5183 1355//5183 1504//5183 +f 3004//5184 1961//5184 3000//5184 +f 2901//5185 2924//5185 2919//5185 +f 2956//5186 2655//5186 690//5186 +f 2858//5187 2292//5187 2887//5187 +f 1486//5188 1893//5188 2887//5188 +f 2292//5189 1486//5189 2887//5189 +f 1893//5190 1486//5190 942//5190 +f 1725//5191 2951//5191 1737//5191 +f 1742//5192 1729//5192 1734//5192 +f 1216//5193 2892//5193 2826//5193 +f 531//5194 1032//5194 2929//5194 +f 2402//5195 540//5195 1758//5195 +f 2838//5196 2837//5196 2809//5196 +f 2819//5197 2825//5197 2804//5197 +f 2821//5198 2799//5198 2787//5198 +f 2788//5199 2821//5199 2787//5199 +f 2821//5200 2834//5200 2799//5200 +f 2883//5201 1045//5201 1020//5201 +f 2949//5202 2772//5202 2858//5202 +f 2810//5203 2838//5203 2802//5203 +f 1747//5204 1731//5204 2875//5204 +f 2874//5205 2885//5205 2881//5205 +f 2924//5206 2956//5206 2944//5206 +f 690//5207 2655//5207 2772//5207 +f 690//5208 2772//5208 2949//5208 +f 1053//5209 2845//5209 580//5209 +f 2864//5210 2906//5210 2831//5210 +f 2782//5211 2739//5211 2767//5211 +f 2022//5212 2014//5212 2885//5212 +f 2874//5213 2022//5213 2885//5213 +f 2885//5214 2014//5214 2901//5214 +f 1486//5215 2880//5215 942//5215 +f 2140//5216 2200//5216 1872//5216 +f 2273//5217 2321//5217 2333//5217 +f 2791//5218 2771//5218 2759//5218 +f 2791//5219 2813//5219 2771//5219 +f 2298//5220 2742//5220 2250//5220 +f 2779//5221 2754//5221 2250//5221 +f 2742//5222 2779//5222 2250//5222 +f 2779//5223 2788//5223 2754//5223 +f 1723//5224 2834//5224 2821//5224 +f 2834//5225 1723//5225 1730//5225 +f 2069//5226 2098//5226 2074//5226 +f 2901//5227 2014//5227 2886//5227 +f 2924//5228 2934//5228 2956//5228 +f 2947//5229 1486//5229 2292//5229 +f 2947//5230 2880//5230 1486//5230 +f 1469//5231 1036//5231 1739//5231 +f 2853//5232 2821//5232 2788//5232 +f 2886//5233 2007//5233 2901//5233 +f 2925//5234 2934//5234 2924//5234 +f 2934//5235 1468//5235 2956//5235 +f 2956//5236 1468//5236 2655//5236 +f 2858//5237 2947//5237 2292//5237 +f 2719//5238 2726//5238 2732//5238 +f 2842//5239 2848//5239 2865//5239 +f 2908//5240 2915//5240 2928//5240 +f 2764//5241 2770//5241 2785//5241 +f 2853//5242 1723//5242 2821//5242 +f 2842//5243 2836//5243 2837//5243 +f 1380//5244 1359//5244 2939//5244 +f 517//5245 830//5245 1407//5245 +f 2901//5246 2925//5246 2924//5246 +f 2955//5247 2655//5247 1468//5247 +f 2655//5248 2955//5248 2772//5248 +f 2868//5249 2947//5249 2858//5249 +f 2768//5250 2808//5250 2784//5250 +f 2783//5251 2768//5251 2784//5251 +f 1377//5252 2819//5252 1360//5252 +f 2955//5253 2868//5253 2772//5253 +f 2772//5254 2868//5254 2858//5254 +f 2833//5255 2869//5255 565//5255 +f 2737//5256 2742//5256 2298//5256 +f 2007//5257 2925//5257 2901//5257 +f 2074//5258 2963//5258 2069//5258 +f 2802//5259 2838//5259 2769//5259 +f 1339//5260 2765//5260 2752//5260 +f 2765//5261 2759//5261 2752//5261 +f 1813//5262 598//5262 1826//5262 +f 2760//5263 2779//5263 2742//5263 +f 2827//5264 2788//5264 2779//5264 +f 2827//5265 2853//5265 2788//5265 +f 2765//5266 2791//5266 2759//5266 +f 2833//5267 565//5267 2845//5267 +f 1405//5268 2376//5268 2766//5268 +f 2957//5269 1468//5269 2934//5269 +f 2957//5270 2955//5270 1468//5270 +f 1025//5271 2961//5271 2953//5271 +f 2756//5272 2747//5272 2725//5272 +f 702//5273 529//5273 1328//5273 +f 2957//5274 2940//5274 2955//5274 +f 2940//5275 2868//5275 2955//5275 +f 2820//5276 2917//5276 2947//5276 +f 2947//5277 2917//5277 2880//5277 +f 1053//5278 2817//5278 2845//5278 +f 2760//5279 2742//5279 2737//5279 +f 1544//5280 2333//5280 2321//5280 +f 2868//5281 2820//5281 2947//5281 +f 2927//5282 2926//5282 2890//5282 +f 2952//5283 2969//5283 2402//5283 +f 2362//5284 2371//5284 2690//5284 +f 2721//5285 2722//5285 2737//5285 +f 2722//5286 2760//5286 2737//5286 +f 1723//5287 2853//5287 1731//5287 +f 2853//5288 2875//5288 1731//5288 +f 1735//5289 1724//5289 2902//5289 +f 1068//5290 623//5290 592//5290 +f 900//5291 1889//5291 609//5291 +f 2841//5292 2840//5292 2832//5292 +f 2693//5293 2696//5293 1907//5293 +f 2696//5294 2722//5294 1907//5294 +f 1907//5295 2722//5295 2721//5295 +f 2875//5296 2913//5296 2902//5296 +f 2902//5297 2913//5297 1725//5297 +f 2820//5298 2868//5298 2940//5298 +f 2917//5299 2873//5299 2880//5299 +f 2728//5300 2740//5300 2727//5300 +f 2782//5301 2767//5301 2790//5301 +f 1403//5302 2714//5302 2693//5302 +f 2714//5303 2696//5303 2693//5303 +f 2714//5304 2735//5304 2696//5304 +f 2735//5305 2722//5305 2696//5305 +f 2828//5306 2779//5306 2760//5306 +f 2828//5307 2827//5307 2779//5307 +f 2853//5308 2888//5308 2875//5308 +f 2992//5309 2948//5309 2893//5309 +f 2719//5310 2731//5310 2713//5310 +f 2722//5311 2773//5311 2760//5311 +f 2773//5312 2789//5312 2760//5312 +f 2828//5313 2835//5313 2827//5313 +f 2827//5314 2861//5314 2853//5314 +f 2861//5315 2888//5315 2853//5315 +f 2888//5316 2913//5316 2875//5316 +f 667//5317 668//5317 2940//5317 +f 668//5318 2820//5318 2940//5318 +f 2899//5319 2873//5319 2917//5319 +f 2735//5320 2773//5320 2722//5320 +f 2820//5321 2871//5321 2917//5321 +f 2871//5322 2899//5322 2917//5322 +f 2751//5323 2770//5323 2745//5323 +f 2686//5324 2694//5324 1403//5324 +f 2694//5325 2714//5325 1403//5325 +f 2714//5326 2715//5326 2735//5326 +f 2760//5327 2805//5327 2828//5327 +f 2888//5328 2958//5328 2913//5328 +f 1085//5329 1069//5329 2825//5329 +f 2706//5330 2719//5330 2713//5330 +f 2687//5331 2694//5331 2686//5331 +f 2793//5332 2760//5332 2789//5332 +f 2793//5333 2805//5333 2760//5333 +f 2806//5334 2828//5334 2805//5334 +f 2835//5335 2876//5335 2827//5335 +f 2876//5336 2861//5336 2827//5336 +f 2861//5337 2903//5337 2888//5337 +f 2958//5338 1469//5338 2951//5338 +f 2806//5339 2805//5339 2793//5339 +f 2966//5340 2958//5340 2888//5340 +f 2568//5341 2870//5341 2510//5341 +f 2852//5342 2820//5342 668//5342 +f 2700//5343 2706//5343 2705//5343 +f 2707//5344 2715//5344 2714//5344 +f 2773//5345 2735//5345 2715//5345 +f 2761//5346 2773//5346 2715//5346 +f 2966//5347 1469//5347 2958//5347 +f 2792//5348 2791//5348 2765//5348 +f 2852//5349 2871//5349 2820//5349 +f 2695//5350 2700//5350 2699//5350 +f 2790//5351 2840//5351 2795//5351 +f 2946//5352 2971//5352 2960//5352 +f 2712//5353 2715//5353 2707//5353 +f 2712//5354 2746//5354 2715//5354 +f 2746//5355 2761//5355 2715//5355 +f 2903//5356 2966//5356 2888//5356 +f 2966//5357 2144//5357 1469//5357 +f 1917//5358 2263//5358 1958//5358 +f 2069//5359 2510//5359 2075//5359 +f 2871//5360 2941//5360 2899//5360 +f 2899//5361 2942//5361 744//5361 +f 2923//5362 2929//5362 2938//5362 +f 2818//5363 2845//5363 2813//5363 +f 2707//5364 2714//5364 2694//5364 +f 2959//5365 2966//5365 2903//5365 +f 2079//5366 2273//5366 2441//5366 +f 2894//5367 2058//5367 2884//5367 +f 2852//5368 2941//5368 2871//5368 +f 2941//5369 2942//5369 2899//5369 +f 744//5370 736//5370 767//5370 +f 2716//5371 2712//5371 2707//5371 +f 2716//5372 2723//5372 2712//5372 +f 2723//5373 2755//5373 2712//5373 +f 2755//5374 2746//5374 2712//5374 +f 2780//5375 2789//5375 2773//5375 +f 2879//5376 1854//5376 1642//5376 +f 2929//5377 1032//5377 2938//5377 +f 2852//5378 684//5378 2941//5378 +f 684//5379 2942//5379 2941//5379 +f 2695//5380 2699//5380 2691//5380 +f 2710//5381 2709//5381 2703//5381 +f 2697//5382 2707//5382 2694//5382 +f 2967//5383 2144//5383 2966//5383 +f 2711//5384 2728//5384 2703//5384 +f 2915//5385 2923//5385 2928//5385 +f 1336//5386 2734//5386 2711//5386 +f 1724//5387 2875//5387 2902//5387 +f 2701//5388 2707//5388 2697//5388 +f 2701//5389 2716//5389 2707//5389 +f 2780//5390 2793//5390 2789//5390 +f 2793//5391 2814//5391 2806//5391 +f 2889//5392 2861//5392 2876//5392 +f 2889//5393 2904//5393 2861//5393 +f 2904//5394 2903//5394 2861//5394 +f 2967//5395 2966//5395 2959//5395 +f 1861//5396 2144//5396 2967//5396 +f 2144//5397 1861//5397 1036//5397 +f 2734//5398 2720//5398 2711//5398 +f 2776//5399 2864//5399 2800//5399 +f 684//5400 768//5400 2942//5400 +f 2971//5401 2487//5401 2960//5401 +f 2487//5402 1879//5402 2960//5402 +f 2688//5403 2697//5403 2694//5403 +f 2708//5404 2716//5404 2701//5404 +f 2736//5405 2755//5405 2723//5405 +f 2736//5406 2774//5406 2755//5406 +f 2780//5407 2773//5407 2761//5407 +f 2904//5408 2959//5408 2903//5408 +f 2778//5409 2765//5409 1339//5409 +f 2877//5410 2882//5410 2865//5410 +f 2840//5411 2907//5411 2855//5411 +f 2369//5412 2364//5412 2365//5412 +f 2724//5413 2723//5413 2716//5413 +f 2724//5414 2736//5414 2723//5414 +f 2775//5415 2774//5415 2736//5415 +f 2794//5416 2793//5416 2780//5416 +f 2794//5417 2814//5417 2793//5417 +f 765//5418 777//5418 2873//5418 +f 2791//5419 2818//5419 2813//5419 +f 2734//5420 2744//5420 2720//5420 +f 2716//5421 2708//5421 2724//5421 +f 2727//5422 2757//5422 2748//5422 +f 2842//5423 2841//5423 2836//5423 +f 2808//5424 2824//5424 2807//5424 +f 2728//5425 2710//5425 2703//5425 +f 2710//5426 2727//5426 2733//5426 +f 2738//5427 2736//5427 2724//5427 +f 2935//5428 2904//5428 2889//5428 +f 2720//5429 2744//5429 2728//5429 +f 2708//5430 2717//5430 2724//5430 +f 2738//5431 2775//5431 2736//5431 +f 2935//5432 2959//5432 2904//5432 +f 2836//5433 2841//5433 2832//5433 +f 2907//5434 2922//5434 2855//5434 +f 1879//5435 2487//5435 1024//5435 +f 2730//5436 2724//5436 2717//5436 +f 2730//5437 2738//5437 2724//5437 +f 2780//5438 2822//5438 2794//5438 +f 2794//5439 2822//5439 2814//5439 +f 2921//5440 2935//5440 2889//5440 +f 2689//5441 2697//5441 2688//5441 +f 2708//5442 2704//5442 2717//5442 +f 2968//5443 2959//5443 2935//5443 +f 1036//5444 1861//5444 1037//5444 +f 2970//5445 2969//5445 2937//5445 +f 1337//5446 2711//5446 2692//5446 +f 2795//5447 2847//5447 2801//5447 +f 2702//5448 2701//5448 2697//5448 +f 2702//5449 2704//5449 2708//5449 +f 2701//5450 2702//5450 2708//5450 +f 2822//5451 2829//5451 2814//5451 +f 2921//5452 2889//5452 2876//5452 +f 2957//5453 2934//5453 3017//5453 +f 2934//5454 2925//5454 3017//5454 +f 2925//5455 2007//5455 3017//5455 +f 2007//5456 2001//5456 3017//5456 +f 2001//5457 1832//5457 3017//5457 +f 1832//5458 1834//5458 3017//5458 +f 1834//5459 2957//5459 3017//5459 diff --git a/Applications/Plasma/AppDelegate.h b/Applications/Plasma/AppDelegate.h new file mode 100644 index 0000000..986c344 --- /dev/null +++ b/Applications/Plasma/AppDelegate.h @@ -0,0 +1,8 @@ + +#import + +@interface AppDelegate : NSObject + +@property (assign) IBOutlet NSWindow *window; + +@end diff --git a/Applications/Plasma/AppDelegate.m b/Applications/Plasma/AppDelegate.m new file mode 100644 index 0000000..7d54754 --- /dev/null +++ b/Applications/Plasma/AppDelegate.m @@ -0,0 +1,22 @@ + +#import "AppDelegate.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { + // Insert code here to initialize your application +} + +- (void)applicationWillTerminate:(NSNotification *)aNotification { + // Insert code here to tear down your application +} + +- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender { + return YES; +} + +@end diff --git a/Applications/Plasma/CMakeLists.txt b/Applications/Plasma/CMakeLists.txt index 02aedee..c19283b 100644 --- a/Applications/Plasma/CMakeLists.txt +++ b/Applications/Plasma/CMakeLists.txt @@ -1,6 +1,6 @@ project(Plasma) -if(WIN32) +if((WIN32 AND NOT ENABLE_HGI_BACKEND) OR APPLE) option(ENABLE_INTERACTIVE_PLASMA "Build Plasma as an interactive viewer." ON) else() set(ENABLE_INTERACTIVE_PLASMA OFF) @@ -12,23 +12,109 @@ find_package(cxxopts REQUIRED) find_package(stb REQUIRED) find_package(TinyGLTF REQUIRED) find_package(tinyobjloader REQUIRED) +set(optionalLibraries "") -# Add test executable with all source files. -add_executable(${PROJECT_NAME} - "Camera.cpp" - "Camera.h" - "Plasma.cpp" - "Plasma.h" - "glTFLoader.cpp" - "Libraries.cpp" - "Loaders.h" - "OBJLoader.cpp" - "pch.h" - "PerformanceMonitor.h" - "resource.h" - "SceneContents.cpp" - "SceneContents.h" -) +if (APPLE) + # Find and link the Metal framework + find_library(METAL_FRAMEWORK Metal) + find_library(METAL_KIT MetalKit) + find_library(APP_KIT AppKit) + find_library(GAME_CONTROLLER GameController) + list(APPEND optionalLibraries ${METAL_FRAMEWORK} ${METAL_KIT} ${APP_KIT} ${GAME_CONTROLLER}) + + set(APP_BUNDLE_IDENTIFIER "com.autodesk.${PROJECT_NAME}") + set(DEPLOYMENT_TARGET 14.0) + + set(PRODUCT_NAME ${PROJECT_NAME}) + set(EXECUTABLE_NAME ${PROJECT_NAME}) + set(MACOSX_BUNDLE_EXECUTABLE_NAME ${PROJECT_NAME}) + set(MACOSX_BUNDLE_INFO_STRING ${APP_BUNDLE_IDENTIFIER}) + set(MACOSX_BUNDLE_GUI_IDENTIFIER ${APP_BUNDLE_IDENTIFIER}) + set(MACOSX_BUNDLE_BUNDLE_NAME ${APP_BUNDLE_IDENTIFIER}) + set(MACOSX_BUNDLE_ICON_FILE "") + set(MACOSX_BUNDLE_LONG_VERSION_STRING "1.0") + set(MACOSX_BUNDLE_SHORT_VERSION_STRING "1.0") + set(MACOSX_BUNDLE_BUNDLE_VERSION "1.0") + set(MACOSX_BUNDLE_COPYRIGHT "Copyright") + set(MACOSX_DEPLOYMENT_TARGET ${DEPLOYMENT_TARGET}) + + # TODO: These environment variables are to aid development of Metal ray tracing shaders, and will eventually be removed. + set(CMAKE_XCODE_GENERATE_SCHEME YES) + set(CMAKE_XCODE_SCHEME_ENVIRONMENT + HGI_TEMP_RAY_GEN_SHADER_DIR=${CMAKE_SOURCE_DIR}/Libraries/Aurora/Source/HGI/MetalShaders + HGIMETAL_DEBUG=1 + CACHE STRING "" FORCE) + + # Add test executable with all source files. + add_executable(${PROJECT_NAME} MACOSX_BUNDLE + "Camera.cpp" + "Camera.h" + "Plasma.cpp" + "Plasma.h" + "glTFLoader.cpp" + "Libraries.cpp" + "Loaders.h" + "OBJLoader.cpp" + "pch.h" + "PerformanceMonitor.h" + "resource.h" + "SceneContents.cpp" + "SceneContents.h" + "AppDelegate.h" + "AppDelegate.m" + "Renderer.h" + "Renderer.mm" + "PlasmaViewController.h" + "PlasmaViewController.mm" + "PlasmaView.h" + "PlasmaView.mm" + "Shaders.metal" + "ShaderTypes.h" + ) + + set_source_files_properties(Plasma.cpp PROPERTIES LANGUAGE OBJCXX) + + # Add the .storyboard file and set its properties + set(UI_STORYBOARD Main.storyboard) + set_source_files_properties(${UI_STORYBOARD} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") + #set(ENTITLEMENTS_FILE Plasma_Interactive.entitlements) + #set_source_files_properties(${ENTITLEMENTS_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") + + set_source_files_properties(Shaders.metal PROPERTIES LANGUAGE METAL) + + target_include_directories(${PROJECT_NAME} + PRIVATE + "${TinyGLTF_INCLUDE_DIR}" + ) + + # Add the .storyboard file to the target + target_sources(${PROJECT_NAME} PRIVATE ${UI_STORYBOARD}) + + #set_target_properties(${PROJECT_NAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/${ENTITLEMENTS_FILE}") + + set_target_properties(${PROJECT_NAME} PROPERTIES + BUNDLE True + MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/info.plist.in + XCODE_SCHEME_ARGUMENTS "--scene ${CMAKE_SOURCE_DIR}/Applications/Assets/CornellBoxMetal.obj" # TODO: Temp sample model for demo. Need to be removed. + ) +else() + # Add test executable with all source files. + add_executable(${PROJECT_NAME} + "Camera.cpp" + "Camera.h" + "Plasma.cpp" + "Plasma.h" + "glTFLoader.cpp" + "Libraries.cpp" + "Loaders.h" + "OBJLoader.cpp" + "pch.h" + "PerformanceMonitor.h" + "resource.h" + "SceneContents.cpp" + "SceneContents.h" + ) +endif() # Set custom output properties. set_target_properties(${PROJECT_NAME} PROPERTIES @@ -45,6 +131,7 @@ else() set(WINSDK_LIB "") endif() + # Add dependencies. target_link_libraries(${PROJECT_NAME} PRIVATE @@ -57,6 +144,7 @@ PRIVATE Aurora ${WINSDK_LIB} ${CMAKE_DL_LIBS} + ${optionalLibraries} ) if(WIN32 AND ENABLE_INTERACTIVE_PLASMA) diff --git a/Applications/Plasma/Libraries.cpp b/Applications/Plasma/Libraries.cpp index 58c6b23..f7a3eb7 100644 --- a/Applications/Plasma/Libraries.cpp +++ b/Applications/Plasma/Libraries.cpp @@ -13,7 +13,7 @@ // limitations under the License. #include "pch.h" -#if defined(INTERACTIVE_PLASMA) +#if defined(INTERACTIVE_PLASMA) && defined(WIN32) // Window global variable from pch.h. HWND gWindow = nullptr; #endif @@ -28,6 +28,9 @@ HWND gWindow = nullptr; #include #pragma warning(push) #pragma warning(disable : 4996) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" #define STB_IMAGE_WRITE_IMPLEMENTATION #include -#pragma warning(pop) \ No newline at end of file +#pragma clang diagnostic pop +#pragma warning(pop) diff --git a/Applications/Plasma/Main.storyboard b/Applications/Plasma/Main.storyboard new file mode 100644 index 0000000..511d23f --- /dev/null +++ b/Applications/Plasma/Main.storyboard @@ -0,0 +1,719 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Applications/Plasma/PerformanceMonitor.h b/Applications/Plasma/PerformanceMonitor.h index 2bbb4c3..811dd1b 100644 --- a/Applications/Plasma/PerformanceMonitor.h +++ b/Applications/Plasma/PerformanceMonitor.h @@ -144,4 +144,4 @@ class PerformanceMonitor int _statusFrames = 0; int _statusSamples = 0; float _statusLastTime = 0.0f; -}; \ No newline at end of file +}; diff --git a/Applications/Plasma/Plasma.cpp b/Applications/Plasma/Plasma.cpp index 236e3aa..012ad28 100644 --- a/Applications/Plasma/Plasma.cpp +++ b/Applications/Plasma/Plasma.cpp @@ -19,14 +19,17 @@ // A global pointer to the application object, for the static WndProc function. Plasma* gpApp = nullptr; -#if defined(INTERACTIVE_PLASMA) +int gArgc = 0; +const char** gpArgv= nullptr; + +#if defined(INTERACTIVE_PLASMA) && defined(WIN32) static const char* kAppName = "Plasma"; #endif // The maximum number of samples to render when converging. constexpr uint32_t kMaxSamples = 1000; constexpr uint32_t kDenoisingSamples = 50; -#if defined(INTERACTIVE_PLASMA) +#if defined(INTERACTIVE_PLASMA) &&defined(WIN32) // Application constructor. Plasma::Plasma(HINSTANCE hInstance, unsigned int width, unsigned int height) { @@ -107,6 +110,7 @@ bool Plasma::run() return false; } +#if defined(WIN32) // Show the window. ::ShowWindow(_hwnd, SW_SHOWNORMAL); @@ -117,10 +121,12 @@ bool Plasma::run() ::TranslateMessage(&msg); ::DispatchMessage(&msg); } +#endif return true; } +#if defined(WIN32) // The static window callback function. LRESULT __stdcall Plasma::wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { @@ -130,7 +136,10 @@ LRESULT __stdcall Plasma::wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM // Return the result if valid, otherwise use default message processing. return result == -1 ? DefWindowProc(hWnd, message, wParam, lParam) : result; } +#endif + #else + // Runs the application as one-pass command line program bool Plasma::run(int argc, char* argv[]) { @@ -148,6 +157,7 @@ bool Plasma::run(int argc, char* argv[]) return true; } + #endif // Creates a sample scene. @@ -293,6 +303,7 @@ bool Plasma::getFloat3Option(const string& name, glm::vec3& value) const #if defined(INTERACTIVE_PLASMA) void Plasma::parseOptions() { +#if defined(WIN32) // Command line arguments. int numArgs = 0; @@ -319,13 +330,16 @@ void Plasma::parseOptions() // Get char pointer-to-pointer to pass to cxxopts. char** pArgv = argsNarrowPtr.data(); +#else + int numArgs = gArgc; + const char** pArgv = gpArgv; +#endif #else void Plasma::parseOptions(int argc, char* argv[]) { // Command line arguments. int numArgs = argc; char** pArgv = argv; - #endif // Initialize cxxopts options with application name. cxxopts::Options options("Plasma", "Plasma: Aurora example application."); @@ -368,7 +382,7 @@ void Plasma::parseOptions(int argc, char* argv[]) { stringstream message; message << options.help(); -#if defined(INTERACTIVE_PLASMA) +#if defined(INTERACTIVE_PLASMA) && defined(WIN32) wstring messageWide = Foundation::s2w(message.str()); ::MessageBox(nullptr, messageWide.c_str(), L"Command line options", MB_OK); #else @@ -395,7 +409,7 @@ bool Plasma::initialize() } } -#if defined(INTERACTIVE_PLASMA) +#if defined(INTERACTIVE_PLASMA) && defined(WIN32) // Create the application window. _hwnd = createWindow(_dimensions); ::setMessageWindow(_hwnd); @@ -589,7 +603,7 @@ bool Plasma::initialize() AU_INFO("Output command line option is set. Rendered one image to %s, now exiting.", outputFile.c_str()); -#if defined(INTERACTIVE_PLASMA) +#if defined(INTERACTIVE_PLASMA) && defined(WIN32) PostMessage(_hwnd, WM_CLOSE, 0, 0); #endif } @@ -597,14 +611,24 @@ bool Plasma::initialize() else { // Create an Aurora window, which can be used to render into the application window. +#if defined(WIN32) _pWindow = _pRenderer->createWindow(_hwnd, _dimensions.x, _dimensions.y); +#else + _pWindow = _pRenderer->createWindow(nullptr, _dimensions.x, _dimensions.y); +#endif if (!_pWindow) { return false; } +#if defined(WIN32) _pRenderer->setTargets({ { Aurora::AOV::kFinal, _pWindow } }); +#else + _pRenderBuffer = _pRenderer->createRenderBuffer(_dimensions.x, _dimensions.y, Aurora::ImageFormat::Float_RGBA); + _pRenderer->setTargets({ { Aurora::AOV::kFinal, _pRenderBuffer } }); +#endif } #endif + return true; } @@ -793,16 +817,29 @@ void Plasma::updateSampleCount() // Updates the window. void Plasma::update() { + // really want to do something like this: +// std::shared_ptr hgiRenderBuffer = std::dynamic_pointer_cast(_pRenderer); +// _pRenderBuffer->storageTex(); + // Prepare the performance monitor for the frame. _performanceMonitor.beginFrame(_shouldRestart); // Update lighting properties, which may have changed. updateLighting(); +#if defined(__APPLE__) + // TODO: quick fix for row-major/column-major mismatch ... we shouldn't have to do this. + mat4 viewMatrix = transpose(_camera.viewMatrix()); + mat4 projMatrix = transpose(_camera.projMatrix()); +#else + mat4 viewMatrix = _camera.viewMatrix(); + mat4 projMatrix = _camera.projMatrix(); +#endif + // Get the view and projection matrices from the camera as float arrays, and set them on the // renderer as the camera (view). - const float* viewArray = value_ptr(_camera.viewMatrix()); - const float* projArray = value_ptr(_camera.projMatrix()); + const float* viewArray = value_ptr(viewMatrix); + const float* projArray = value_ptr(projMatrix); _pRenderer->setCamera(viewArray, projArray); // Render the scene, accumulating as many frames as possible within a target time, as @@ -811,6 +848,10 @@ void Plasma::update() Foundation::CPUTimer firstFrameTimer; uint32_t sampleStart = 0; uint32_t sampleCount = _sampleCounter.update(sampleStart, _shouldRestart); +#if defined(__APPLE__) + // TODO: temporary hack whilst accumulation is done on the raygen shader rather than as a post process + sampleCount = 1; +#endif if (sampleCount > 0) { _pRenderer->render(sampleStart, sampleCount); @@ -847,8 +888,10 @@ void Plasma::requestUpdate(bool shouldRestart) { _shouldRestart = _shouldRestart || shouldRestart; +#if defined(WIN32) // Invalidate the window to ensure that a paint message is sent. ::InvalidateRect(_hwnd, nullptr, FALSE); +#endif } // Toggles the animating state of the application. @@ -875,6 +918,7 @@ void Plasma::toggleFullScreen() // Toggle the full screen state. _isFullScreenEnabled = !_isFullScreenEnabled; +#if defined(WIN32) LONG windowStyle = 0; HWND windowZ = nullptr; UINT windowShowState = SW_SHOWNORMAL; @@ -916,6 +960,7 @@ void Plasma::toggleFullScreen() // Show the window (again) so that changes take effect, with a show state. ::ShowWindow(_hwnd, windowShowState); +#endif } // Toggles vsync (vertical sync). @@ -971,8 +1016,9 @@ void Plasma::adjustMaxLuminanceExposure(float increment) // Displays a dialog for selecting a file to load, and loads it using the specified load // function. void Plasma::selectFile( - const string& extension, const wchar_t* pFilters, const LoadFileFunction& loadFunc) + [[maybe_unused]] const string& extension, [[maybe_unused]] const wchar_t* pFilters, [[maybe_unused]] const LoadFileFunction& loadFunc) { +#if defined(WIN32) // Prepare a structure for displaying a file open dialog. array filePath = { '\0' }; // must be initialized for GetOpenFileName() OPENFILENAME desc = {}; @@ -1006,6 +1052,7 @@ void Plasma::selectFile( addAssetPathContainingFile(Foundation::w2s(filePath.data())); loadFunc(Foundation::w2s(filePath.data())); +#endif } #endif @@ -1020,7 +1067,7 @@ void Plasma::addAssetPathContainingFile(const string& filePath) void Plasma::addAssetPath(const string& filePath) { - for (int i = 0; i < _assetPaths.size(); i++) + for (size_t i = 0; i < _assetPaths.size(); i++) { if (_assetPaths[i].compare(filePath) == 0) return; @@ -1111,8 +1158,21 @@ void Plasma::saveImage(const wstring& filePath, const uvec2& dimensions) // Get the view and projection matrices from the camera as float arrays, and set them on the // renderer as the camera (view). - auto* viewArray = reinterpret_cast(&_camera.viewMatrix()); - auto* projArray = reinterpret_cast(&_camera.projMatrix()); + +#if defined(__APPLE__) + // TODO: quick fix for row-major/column-major mismatch ... we shouldn't have to do this. + mat4 viewMatrix = transpose(_camera.viewMatrix()); + mat4 projMatrix = transpose(_camera.projMatrix()); +#else + mat4 viewMatrix = _camera.viewMatrix(); + mat4 projMatrix = _camera.projMatrix(); +#endif + + // Get the view and projection matrices from the camera as float arrays, and set them on the + // renderer as the camera (view). + const float* viewArray = value_ptr(viewMatrix); + const float* projArray = value_ptr(projMatrix); + _pRenderer->setCamera(viewArray, projArray); // Create a temporary render buffer. @@ -1129,6 +1189,7 @@ void Plasma::saveImage(const wstring& filePath, const uvec2& dimensions) const void* pData = pRenderBuffer->data(stride); int res = ::stbi_write_png(Foundation::w2s(filePath).c_str(), dimensions.x, dimensions.y, 4, pData, static_cast(stride)); + AU_ASSERT(res, "Failed to write PNG: %s", Foundation::w2s(filePath).c_str()); } @@ -1221,7 +1282,7 @@ void Plasma::resetMaterials() #endif } -#if defined(INTERACTIVE_PLASMA) +#if defined(INTERACTIVE_PLASMA) && defined(WIN32) // Processes a message for the application window. LRESULT Plasma::processMessage(UINT message, WPARAM wParam, LPARAM lParam) { @@ -1355,12 +1416,20 @@ void Plasma::onFilesDropped(HDROP hDrop) (*funcIt).second(filePath); } } - +#endif + +#if defined(INTERACTIVE_PLASMA) + // Handles key presses. +#if defined(WIN32) void Plasma::onKeyPressed(WPARAM keyCode) +#else +void Plasma::onKeyPressed(GCKeyCode keyCode) +#endif { // Get the renderer options object. Aurora::IValues& options = _pRenderer->options(); +#if defined(WIN32) // For sequential keys starting with 0, enable the corresponding debug mode, e.g. 2 means // debug mode 2 (show the view depth AOV). @@ -1385,7 +1454,49 @@ void Plasma::onKeyPressed(WPARAM keyCode) return; } +#endif + + +#if defined(__APPLE__) + // F: Fit the view to the scene, retaining the current direction and up vectors. + if(keyCode == GCKeyCodeKeyF) { + _camera.fit(_sceneContents.bounds); + requestUpdate(); + _pRenderer->setFrameIndex(0); + } + // Space: Toggle animation. + else if(keyCode == GCKeyCodeSpacebar) { + toggleAnimation(); + _pRenderer->setFrameIndex(0); + } + // C: Toggle orthographic projection. + else if(keyCode == GCKeyCodeKeyC) { + _isOrthoProjection = !_isOrthoProjection; + _camera.setIsOrtho(_isOrthoProjection); + requestUpdate(); + _pRenderer->setFrameIndex(0); + } + // S: Save the current image to a file. + else if(keyCode == GCKeyCodeKeyS) { +// saveImage(L"capture.png", uvec2(1280, 720)); + } + // [: Decrease max trace depth. + else if(keyCode == GCKeyCodeOpenBracket) { + _traceDepth = glm::max(1, _traceDepth - 1); + options.setInt("traceDepth", _traceDepth); + requestUpdate(); + _pRenderer->setFrameIndex(0); + } + // ]: Increase max trace depth. + else if(keyCode == GCKeyCodeCloseBracket) { + _traceDepth = glm::min(10, _traceDepth + 1); + options.setInt("traceDepth", _traceDepth); + requestUpdate(); + _pRenderer->setFrameIndex(0); + } +#else + switch (keyCode) { // ESC: Destroy the main window. @@ -1520,7 +1631,7 @@ void Plasma::onKeyPressed(WPARAM keyCode) // S: Save the current image to a file. case 0x53: - saveImage(L"capture.png", uvec2(1920, 1080)); + saveImage(L"capture.png", uvec2(1280, 720)); break; // T: Toggle tone mapping. @@ -1600,8 +1711,44 @@ void Plasma::onKeyPressed(WPARAM keyCode) requestUpdate(); break; } +#endif } +#endif + +#if defined(__APPLE__) +// Handles mouse moves. +void Plasma::onMouseMoved(int xPos, int yPos, bool leftButtonPressed, bool middleButtonPressed, bool rightButtonPressed) +{ + // Update the camera. + Camera::Inputs inputs = {}; + inputs.LeftButton = leftButtonPressed; + inputs.MiddleButton = middleButtonPressed; + inputs.RightButton = rightButtonPressed; + _camera.mouseMove(xPos, yPos, inputs); + // Request an update if the camera is dirty. + if(_camera.isDirty()) { + requestUpdate(); + _pRenderer->setFrameIndex(0); + } +} + +void Plasma::onMouseWheel(int delta) { + // Update the camera. + Camera::Inputs inputs = {}; + inputs.Wheel = true; + _camera.mouseMove(0, delta, inputs); + + // Request an update if the camera is dirty. + if (_camera.isDirty()) { + requestUpdate(); + _pRenderer->setFrameIndex(0); + } +} + +#endif + +#if defined(INTERACTIVE_PLASMA) && defined(WIN32) // Handles mouse moves. void Plasma::onMouseMoved(int xPos, int yPos, WPARAM buttons) { @@ -1679,6 +1826,21 @@ int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE /*hPrevInstance return result ? 0 : -1; } #else //! INTERACTIVE_PLASMA + +#if defined(__APPLE__) +#import + +int main(int argc, const char * argv[]) { + @autoreleasepool { + // Setup code that might create autoreleased objects goes here. + } + Plasma app; + gpApp = &app; + gArgc = argc; + gpArgv = argv; + return NSApplicationMain(argc, argv); +} +#else int main(int argc, char* argv[]) { // Create an application object on the stack, and run it. The run() function returns when @@ -1689,4 +1851,6 @@ int main(int argc, char* argv[]) return result ? 0 : -1; } -#endif // INTERACTIVE_PLASMA \ No newline at end of file +#endif + +#endif // INTERACTIVE_PLASMA diff --git a/Applications/Plasma/Plasma.h b/Applications/Plasma/Plasma.h index 538441b..a502faf 100644 --- a/Applications/Plasma/Plasma.h +++ b/Applications/Plasma/Plasma.h @@ -17,6 +17,9 @@ #include "Loaders.h" #include "PerformanceMonitor.h" #include "SceneContents.h" +#if defined(__APPLE__) +#import +#endif // Structure representing layer geometry and material. struct Layer @@ -35,7 +38,7 @@ class Plasma public: /*** Lifetime Management ***/ -#if defined(INTERACTIVE_PLASMA) +#if defined(INTERACTIVE_PLASMA) && defined(WIN32) explicit Plasma(HINSTANCE hInstance, unsigned int width = 1280, unsigned int height = 720); #else explicit Plasma(unsigned int width = 1280, unsigned int height = 720); @@ -45,9 +48,18 @@ class Plasma /*** Functions **/ #if defined(INTERACTIVE_PLASMA) bool run(); +#else +#if defined(__APPLE__) + bool run(); #else bool run(int argc, char* argv[]); #endif +#endif + +#if defined(__APPLE__) + uvec2 getDims() { return _dimensions; } + const void* getData(size_t& stride) { return _pRenderBuffer->data(stride); } +#endif private: /*** Private Types ***/ @@ -56,31 +68,48 @@ class Plasma using LoadFileFunctionMap = unordered_map; /*** Private Static Functions ***/ -#if defined(INTERACTIVE_PLASMA) +#if defined(INTERACTIVE_PLASMA) && defined(WIN32) static LRESULT __stdcall wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); #endif static void createSampleScene(Aurora::IScene* pRenderer, SceneContents& contentsOut); /*** Private Functions ***/ -#if defined(INTERACTIVE_PLASMA) +#if defined(INTERACTIVE_PLASMA) && defined(WIN32) LRESULT processMessage(UINT message, WPARAM wParam, LPARAM lParam); HWND createWindow(const uvec2& dimensions); #endif bool getFloat3Option(const string& name, glm::vec3& value) const; #if defined(INTERACTIVE_PLASMA) void parseOptions(); +#else +#if defined(__APPLE__) + void parseOptions(); #else void parseOptions(int argc, char* argv[]); +#endif #endif bool initialize(); void updateNewScene(); void updateLighting(); void updateGroundPlane(); void updateSampleCount(); +#if defined(__APPLE__) +public: void update(); +private: +#else + void update(); +#endif #if defined(INTERACTIVE_PLASMA) + +#if defined(__APPLE__) +public: + void requestUpdate(bool shouldRestart = true); +private: +#else void requestUpdate(bool shouldRestart = true); +#endif void toggleAnimation(); void toggleFullScreen(); void toggleVSync(); @@ -104,15 +133,24 @@ class Plasma #if defined(INTERACTIVE_PLASMA) /*** Private Event Handlers ***/ +#if defined(WIN32) void onFilesDropped(HDROP hDrop); void onKeyPressed(WPARAM keyCode); void onMouseMoved(int xPos, int yPos, WPARAM buttons); void onMouseWheel(int delta, WPARAM buttons); void onSizeChanged(UINT width, UINT height); +#else +public: + void onMouseMoved(int xPos, int yPos, bool leftButtonPressed, bool middleButtonPressed, bool rightButtonPressed); + void onMouseWheel(int delta); + void onKeyPressed(GCKeyCode keyCode); +private: +#endif + #endif /*** Private Variables ***/ -#if defined(INTERACTIVE_PLASMA) +#if defined(INTERACTIVE_PLASMA) && defined(WIN32) HINSTANCE _hInstance = nullptr; HWND _hwnd = nullptr; WINDOWPLACEMENT _prevWindowPlacement = {}; @@ -130,24 +168,24 @@ class Plasma #if defined(INTERACTIVE_PLASMA) bool _isFullScreenEnabled = false; bool _isVSyncEnabled = false; - bool _isOrthoProjection = false; + [[maybe_unused]] bool _isOrthoProjection = false; #endif bool _isDirectionalLightEnabled = true; #if defined(INTERACTIVE_PLASMA) - unsigned int _importanceSamplingMode = 2; // Importance sampling mode 2 == MIS - bool _isReferenceBSDFEnabled = false; + [[maybe_unused]] unsigned int _importanceSamplingMode = 2; // Importance sampling mode 2 == MIS + [[maybe_unused]] bool _isReferenceBSDFEnabled = false; #endif vec3 _lightDirection = normalize(vec3(1.0f, -0.5f, 0.0f)); bool _isDenoisingEnabled = false; #if defined(INTERACTIVE_PLASMA) - bool _isDiffuseOnlyEnabled = false; - bool _isForceOpaqueShadowsEnabled = false; - bool _isToneMappingEnabled = false; + [[maybe_unused]] bool _isDiffuseOnlyEnabled = false; + [[maybe_unused]] bool _isForceOpaqueShadowsEnabled = false; + [[maybe_unused]] bool _isToneMappingEnabled = false; #endif bool _isGroundPlaneShadowEnabled = false; bool _isGroundPlaneReflectionEnabled = false; #if defined(INTERACTIVE_PLASMA) - int _traceDepth = 5; + [[maybe_unused]] int _traceDepth = 5; float _exposure = 0.0f; float _maxLuminanceExposure = 0.0f; #endif @@ -174,5 +212,6 @@ class Plasma Aurora::ILightPtr _pDistantLight; Aurora::IScenePtr _pScene; Aurora::IWindowPtr _pWindow; + Aurora::IRenderBufferPtr _pRenderBuffer; vector _assetPaths; }; diff --git a/Applications/Plasma/PlasmaView.h b/Applications/Plasma/PlasmaView.h new file mode 100644 index 0000000..985f894 --- /dev/null +++ b/Applications/Plasma/PlasmaView.h @@ -0,0 +1,10 @@ + +#ifndef _PLASMA_VIEW_ +#define _PLASMA_VIEW_ + +#import + +@interface PlasmaView : MTKView +@end + +#endif diff --git a/Applications/Plasma/PlasmaView.mm b/Applications/Plasma/PlasmaView.mm new file mode 100644 index 0000000..f6985c6 --- /dev/null +++ b/Applications/Plasma/PlasmaView.mm @@ -0,0 +1,21 @@ + +#import "PlasmaView.h" + +@implementation PlasmaView { +} + +// "handle" keyUp and keyDown ecents to avoid the system beeps when we press keys + +- (BOOL)acceptsFirstResponder { + return YES; +} + +- (void)keyDown:(NSEvent*)event { + +} + +- (void)keyUp:(NSEvent*) event { + +} + +@end diff --git a/Applications/Plasma/PlasmaViewController.h b/Applications/Plasma/PlasmaViewController.h new file mode 100644 index 0000000..36e0802 --- /dev/null +++ b/Applications/Plasma/PlasmaViewController.h @@ -0,0 +1,10 @@ + +#import +#import +#import +#import +#import "Renderer.h" + +// Our macOS view controller. +@interface PlasmaViewController : NSViewController +@end diff --git a/Applications/Plasma/PlasmaViewController.mm b/Applications/Plasma/PlasmaViewController.mm new file mode 100644 index 0000000..59326da --- /dev/null +++ b/Applications/Plasma/PlasmaViewController.mm @@ -0,0 +1,124 @@ + +#import "PlasmaViewController.h" +#import "Renderer.h" + +#include "pch.h" +#include "Plasma.h" +extern Plasma* gpApp; + +@interface PlasmaViewController() +@property (nonatomic, strong) GCMouse* _mouse; +@property (nonatomic, strong) GCKeyboard* _keyboard; +@property (assign) bool _leftMouseButtonDown; +@property (assign) bool _rightMouseButtonDown; +@property (assign) bool _middleMouseButtonDown; +@end + +@implementation PlasmaViewController +{ + MTKView *_view; + + Renderer *_renderer; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + _view = (MTKView *)self.view; + + _view.device = MTLCreateSystemDefaultDevice(); + + if(!_view.device) + { + NSLog(@"Metal is not supported on this device"); + self.view = [[NSView alloc] initWithFrame:self.view.frame]; + return; + } + + _renderer = [[Renderer alloc] initWithMetalKitView:_view]; + + [_renderer mtkView:_view drawableSizeWillChange:_view.drawableSize]; + + _view.delegate = _renderer; + + self._leftMouseButtonDown = false; + self._rightMouseButtonDown = false; + self._middleMouseButtonDown = false; + + [self setupMouse]; + [self setupKeyboard]; +} + +- (void)setupKeyboard { + [[NSNotificationCenter defaultCenter] addObserverForName:GCKeyboardDidConnectNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull notification) { + NSLog(@"Keyboard connected"); + GCKeyboard* keyboard = notification.object; + self._keyboard = keyboard; + [self._keyboard.keyboardInput setKeyChangedHandler:^([[maybe_unused]] GCKeyboardInput * _Nonnull keyboard, [[maybe_unused]] GCControllerButtonInput * _Nonnull key, [[maybe_unused]] GCKeyCode keyCode, [[maybe_unused]] BOOL pressed) { + + // key up + if(!pressed) { + gpApp->onKeyPressed(keyCode); + } + }]; + }]; + [[NSNotificationCenter defaultCenter] addObserverForName:GCKeyboardDidDisconnectNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^([[maybe_unused]] NSNotification * _Nonnull notification) { + NSLog(@"Keyboard disconnected"); + }]; +} + +- (void)setupMouse { + if([GCMouse current]) { + self._mouse = [GCMouse current]; + [self listenToMouseEvents:self._mouse]; + } + + [[NSNotificationCenter defaultCenter] addObserverForName:GCMouseDidConnectNotification + object:nil + queue:[NSOperationQueue mainQueue] + usingBlock:^(NSNotification * _Nonnull notification) { + GCMouse *connectedMouse = notification.object; + [self listenToMouseEvents:connectedMouse]; + }]; + + [[NSNotificationCenter defaultCenter] addObserverForName:GCMouseDidDisconnectNotification + object:nil + queue:[NSOperationQueue mainQueue] + usingBlock:^(NSNotification * _Nonnull notification) { + GCMouse *disconnectedMouse = notification.object; + if (self._mouse == disconnectedMouse) { + self._mouse = nil; + } + }]; +} + +- (void)listenToMouseEvents:(GCMouse *)mouse { + //__weak typeof(self) weakSelf = self; + mouse.mouseInput.mouseMovedHandler = ^([[maybe_unused]] GCMouseInput * _Nonnull mouse, [[maybe_unused]] float deltaX, [[maybe_unused]] float deltaY) { + NSPoint location = [NSEvent mouseLocation]; + NSWindow* window = self.view.window; + NSPoint windowLocation = [window convertPointFromScreen:location]; + if(NSPointInRect(windowLocation, [self.view bounds])) { + gpApp->onMouseMoved(windowLocation.x, windowLocation.y, self._leftMouseButtonDown, self._middleMouseButtonDown, self._rightMouseButtonDown); + } + }; + + mouse.mouseInput.leftButton.pressedChangedHandler = ^([[maybe_unused]] GCControllerButtonInput * _Nonnull button, [[maybe_unused]] float value, BOOL pressed) { + self._leftMouseButtonDown = pressed; + }; + + mouse.mouseInput.rightButton.pressedChangedHandler = ^([[maybe_unused]] GCControllerButtonInput * _Nonnull button, [[maybe_unused]] float value, BOOL pressed) { + self._rightMouseButtonDown = pressed; + }; + + mouse.mouseInput.middleButton.pressedChangedHandler = ^([[maybe_unused]] GCControllerButtonInput * _Nonnull button, [[maybe_unused]] float value, BOOL pressed) { + self._middleMouseButtonDown = pressed; + }; + + mouse.mouseInput.scroll.valueChangedHandler = ^([[maybe_unused]] GCControllerDirectionPad * _Nonnull dpad, [[maybe_unused]] float xValue, float yValue) { + gpApp->onMouseWheel(yValue); + }; +} + +@end diff --git a/Applications/Plasma/Renderer.h b/Applications/Plasma/Renderer.h new file mode 100644 index 0000000..af35a63 --- /dev/null +++ b/Applications/Plasma/Renderer.h @@ -0,0 +1,11 @@ + +#import + +// Our platform independent renderer class. Implements the MTKViewDelegate protocol which +// allows it to accept per-frame update and drawable resize callbacks. +@interface Renderer : NSObject + +-(nonnull instancetype)initWithMetalKitView:(nonnull MTKView *)view; + +@end + diff --git a/Applications/Plasma/Renderer.mm b/Applications/Plasma/Renderer.mm new file mode 100644 index 0000000..0700689 --- /dev/null +++ b/Applications/Plasma/Renderer.mm @@ -0,0 +1,134 @@ + +#import +#import + +#import "Renderer.h" + +// Include header shared between C code here, which executes Metal API commands, and .metal files +#import "ShaderTypes.h" + +#include "pch.h" +#include "Plasma.h" +extern Plasma* gpApp; + +#define FORCE_UPDATES + +static const NSUInteger kMaxBuffersInFlight = 3; + +@implementation Renderer +{ + dispatch_semaphore_t _inFlightSemaphore; + id _device; + id _commandQueue; + + id _renderPipelineState; +} + +-(nonnull instancetype)initWithMetalKitView:(nonnull MTKView *)view +{ + self = [super init]; + if(self) + { + _device = view.device; + _inFlightSemaphore = dispatch_semaphore_create(kMaxBuffersInFlight); + [self _loadMetalWithView:view]; + gpApp->run(); + } + + return self; +} + +- (void)_loadMetalWithView:(nonnull MTKView *)view +{ + + /// Load Metal state objects and initialize renderer dependent view properties + + view.depthStencilPixelFormat = MTLPixelFormatInvalid; + view.colorPixelFormat = MTLPixelFormatBGRA8Unorm; + view.sampleCount = 1; + + _commandQueue = [_device newCommandQueue]; + + id library = [_device newDefaultLibrary]; + + MTLRenderPipelineDescriptor* psoDescriptor = [[MTLRenderPipelineDescriptor alloc] init]; + psoDescriptor.label = @"Pass Through PSO"; + psoDescriptor.rasterSampleCount = view.sampleCount; + psoDescriptor.colorAttachments[0].pixelFormat = view.colorPixelFormat; + psoDescriptor.depthAttachmentPixelFormat = view.depthStencilPixelFormat; + psoDescriptor.vertexDescriptor = nil; + psoDescriptor.vertexFunction = [library newFunctionWithName:@"pass_through_vertex"]; + psoDescriptor.fragmentFunction = [library newFunctionWithName:@"pass_through_fragment"]; + + NSError* error = nil; + _renderPipelineState = [_device newRenderPipelineStateWithDescriptor:psoDescriptor error:&error]; + if(!_renderPipelineState) { + os_log(OS_LOG_DEFAULT, "Failed to create render pipeline state (%@): %@", psoDescriptor.label, error.description); + } + + [library release]; + [psoDescriptor release]; +} + +- (void)_updateGameState +{ + +#if defined(FORCE_UPDATES) + gpApp->requestUpdate(); +#endif + gpApp->update(); +} + +- (void)drawInMTKView:(nonnull MTKView *)view +{ + /// Per frame updates here + + dispatch_semaphore_wait(_inFlightSemaphore, DISPATCH_TIME_FOREVER); + + id commandBuffer = [_commandQueue commandBuffer]; + commandBuffer.label = @"MyCommand"; + + [self _updateGameState]; + + uvec2 dims = gpApp->getDims(); + size_t size; + const void* data = gpApp->getData(size); + MTLTextureDescriptor* descriptor = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:MTLPixelFormatRGBA8Unorm width:dims.x height:dims.y mipmapped:false]; + id texture = [_device newTextureWithDescriptor:descriptor]; + MTLRegion region = MTLRegionMake2D(0, 0, dims.x, dims.y); + [texture replaceRegion:region mipmapLevel:0 withBytes:data bytesPerRow:size]; + + __block dispatch_semaphore_t block_sema = _inFlightSemaphore; + [commandBuffer addCompletedHandler:^([[maybe_unused]] id buffer) + { + [texture release]; + dispatch_semaphore_signal(block_sema); + }]; + + /// Delay getting the currentRenderPassDescriptor until we absolutely need it to avoid + /// holding onto the drawable and blocking the display pipeline any longer than necessary + MTLRenderPassDescriptor* renderPassDescriptor = view.currentRenderPassDescriptor; + + if(renderPassDescriptor != nil) { + + id renderEncoder = [commandBuffer renderCommandEncoderWithDescriptor:renderPassDescriptor]; + renderEncoder.label = @"MyRenderEncoder"; + + [renderEncoder setRenderPipelineState:_renderPipelineState]; + [renderEncoder setFragmentTexture:texture atIndex:0]; + [renderEncoder drawPrimitives:MTLPrimitiveTypeTriangle vertexStart:0 vertexCount:6]; + + [renderEncoder endEncoding]; + [commandBuffer presentDrawable:view.currentDrawable]; + } + + [commandBuffer commit]; +} + +- (void)mtkView:(nonnull MTKView *)view drawableSizeWillChange:(CGSize)size +{ + /// Respond to drawable size or orientation changes here +} + + +@end diff --git a/Applications/Plasma/ShaderTypes.h b/Applications/Plasma/ShaderTypes.h new file mode 100644 index 0000000..922b5a8 --- /dev/null +++ b/Applications/Plasma/ShaderTypes.h @@ -0,0 +1,10 @@ + +// +// Header containing types and enum constants shared between Metal shaders and Swift/ObjC source +// +#ifndef ShaderTypes_h +#define ShaderTypes_h + + +#endif /* ShaderTypes_h */ + diff --git a/Applications/Plasma/Shaders.metal b/Applications/Plasma/Shaders.metal new file mode 100644 index 0000000..bee0f9f --- /dev/null +++ b/Applications/Plasma/Shaders.metal @@ -0,0 +1,39 @@ + +// File for Metal kernel and shader functions + +#include +#include + +// Including header shared between this Metal shader code and Swift/C code executing Metal API commands +#import "ShaderTypes.h" + +using namespace metal; + +constant float2 quadVertex[] = { + float2(-1, -1), + float2(-1, 1), + float2( 1, 1), + float2(-1, -1), + float2( 1, 1), + float2( 1, -1) +}; + +typedef struct { + float4 position [[position]]; + float2 uv; +} PostColorInOut; + +vertex PostColorInOut pass_through_vertex(unsigned short vid [[vertex_id]]) { + float2 position = quadVertex[vid]; + PostColorInOut out; + out.position = float4(position, 0, 1); + out.uv = position * 0.5f + 0.5f; + out.uv.y = 1.0f - out.uv.y; + return out; +} + +fragment float4 pass_through_fragment(PostColorInOut in [[stage_in]], + texture2d texture [[texture(0)]]) { + constexpr sampler colorSampler(min_filter::nearest, mag_filter::nearest, mip_filter::none); + return texture.sample(colorSampler, in.uv); +} diff --git a/Applications/Plasma/info.plist.in b/Applications/Plasma/info.plist.in new file mode 100644 index 0000000..fcce2fe --- /dev/null +++ b/Applications/Plasma/info.plist.in @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleGetInfoString + ${MACOSX_BUNDLE_INFO_STRING} + CFBundleIconFile + ${MACOSX_BUNDLE_ICON_FILE} + CFBundleIdentifier + ${MACOSX_BUNDLE_GUI_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleLongVersionString + ${MACOSX_BUNDLE_LONG_VERSION_STRING} + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + ${MACOSX_BUNDLE_SHORT_VERSION_STRING} + CFBundleSignature + ???? + CFBundleVersion + ${MACOSX_BUNDLE_BUNDLE_VERSION} + CSResourcesFileMapped + + NSHumanReadableCopyright + ${MACOSX_BUNDLE_COPYRIGHT} + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSMainStoryboardFile + Main + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + + diff --git a/Applications/Plasma/pch.h b/Applications/Plasma/pch.h index fd8939e..a3f890e 100644 --- a/Applications/Plasma/pch.h +++ b/Applications/Plasma/pch.h @@ -14,13 +14,13 @@ #pragma once // Memory leak detection. -#if defined(INTERACTIVE_PLASMA) +#if defined(INTERACTIVE_PLASMA) && defined(WIN32) #define _CRTDBG_MAP_ALLOC #include #endif #include -#if defined(INTERACTIVE_PLASMA) +#if defined(INTERACTIVE_PLASMA) && defined(WIN32) // Windows headers. #define WIN32_LEAN_AND_MEAN #include @@ -32,6 +32,10 @@ #include #endif +#if defined(__APPLE__) +#include +#endif + // STL headers. #include #include @@ -88,7 +92,7 @@ using namespace Aurora; // Module resources. #include "resource.h" -#if defined(INTERACTIVE_PLASMA) +#if defined(INTERACTIVE_PLASMA) && defined(WIN32) // TODO move those windows implementations to a utility class // Set the window to use for messages. extern HWND gWindow; @@ -109,7 +113,11 @@ inline void errorMessage(const string& message) { AU_ERROR(message); #if defined(INTERACTIVE_PLASMA) +#if defined(WIN32) ::MessageBoxW(gWindow, Foundation::s2w(message).c_str(), L"Error", MB_OK); +#else + os_log_error(OS_LOG_DEFAULT, "Error: %s", message.c_str()); +#endif #endif } diff --git a/CMakeLists.txt b/CMakeLists.txt index f1fb42a..c5130a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,9 +60,20 @@ list(APPEND CMAKE_MODULE_PATH "${SCRIPTS_DIR}/cmake/modules" ) -option(ENABLE_TESTS "Build unit tests" ON) +# XXX: Aurora does not support USDView on MacOS for now. +if(APPLE) + set(ENABLE_USDVIEW OFF) +else() + option(ENABLE_USDVIEW "Build usdview with python" ON) +endif() + +# XXX: Temporarily disable unit tests for Linux. +if(UNIX) + set(ENABLE_TESTS OFF) +else() + option(ENABLE_TESTS "Build unit tests" ON) +endif() option(ENABLE_APPLICATIONS "Build Applications" ON) -option(ENABLE_USDVIEW "Build usdview with python" ON) # Import the cmake utility functions include(toolbox) @@ -92,9 +103,11 @@ if(MSVC) add_compile_options(/MP) # Add INSTALL project to solution by default. set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) -else() +elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang") # Enables strict standard conformance and warning as errors add_compile_options(-Wall -Wextra -Wpedantic -Werror -Wno-unknown-pragmas -Wno-gnu-zero-variadic-macro-arguments) +else() # GCC/G++ + add_compile_options(-Wall -Wextra -Wpedantic -Werror -Wno-unknown-pragmas -Wno-format-security -Wno-deprecated -Wno-class-memaccess -Wno-strict-aliasing) endif() include(externalsConfig OPTIONAL RESULT_VARIABLE EXTERNALS_CONFIG) @@ -111,6 +124,9 @@ endif() if(WIN32) option(ENABLE_DIRECTX_BACKEND "Build with DirectX renderer backend." ON) option(ENABLE_HGI_BACKEND "Build with HGI renderer backend (requires Vulkan SDK)." OFF) +elseif(APPLE) + option(ENABLE_DIRECTX_BACKEND "Build with DirectX renderer backend." OFF) + option(ENABLE_HGI_BACKEND "Build with HGI renderer backend." ON) else() # Always disable DirectX backend on non-Windows platforms set(ENABLE_DIRECTX_BACKEND OFF) diff --git a/Doc/Build.md b/Doc/Build.md index 78aaf0f..677998f 100644 --- a/Doc/Build.md +++ b/Doc/Build.md @@ -7,31 +7,31 @@ Several prerequisites must be installed before building Aurora. ### Windows On windows the following packages should be installed and added to the system PATH environment variable: * [Microsoft Visual Studio 2019](https://my.visualstudio.com/Downloads?q=visual%20studio%202019) or [2022](https://my.visualstudio.com/Downloads?q=visual%20studio%202022). -* CMake 3.26.11 ([installer](https://github.com/Kitware/CMake/releases/download/v3.26.1/cmake-3.26.1-windows-x86_64.msi)). -* Python 3.9.13 ([installer](https://www.python.org/downloads/release/python-3913)) and the following Python packages: +* CMake 3.29.3 or later ([installer](https://github.com/Kitware/CMake/releases/download/v3.29.7/cmake-3.29.7-windows-x86_64.msi)). +* Python 3.11 or later ([installer](https://www.python.org/downloads/release/python-3119/)) and the following Python packages: * PySide6: install with `pip3 install pyside6`. * PyOpenGL: install with `pip3 install PyOpenGL`. + * Jinja2: install with `pip3 install Jinja2`. * NASM 2.16 ([installer](https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/win64/nasm-2.16.01-installer-x64.exe)). * [Vulkan SDK](https://vulkan.lunarg.com/sdk/home#windows). This should be accessible via the `VULKAN_SDK` environment variable. +### MacOS +The following tools should be installed and accessible through PATH environment variable: +* Xcode 15.4 or later. + * Xcode Command Line Tools: install by running `xcode-select --install`. +* Git with LFS: set up by running `git lfs install`. +* CMake 3.29.3 or later ([installer](https://github.com/Kitware/CMake/releases/download/v3.29.7/cmake-3.29.7-macos-universal.dmg)). +* Python 3.11 or later. + ### Linux -The following dependencies are required on Linux. The versions listed are the recommended version for Ubuntu 20.04: -* zlib1g-dev: 1.2.11 -* libjpeg-turbo8-dev: 2.0.3 -* libtiff-dev: 4.1.0 -* libpng-dev: 1.6.37 -* libglm-dev: 0.9.9.7 -* libglew-dev: 2.1.0 -* libglfw3-dev: 3.3.2 -* libgtest-dev: 1.10.0 -* libgmock-dev: 1.10.0 - -On Ubuntu 20.04, these can be installed with the following Advanced Package Tool command: +On Ubuntu 22.04, the dependencies can be installed with the following Advanced Package Tool command: ``` -sudo apt-get -y install zlib1g-dev libjpeg-turbo8-dev libtiff-dev libpng-dev libglm-dev libglew-dev libglfw3-dev libgtest-dev libgmock-dev +sudo apt-get -y install zlib1g-dev libjpeg-turbo8-dev libtiff-dev libpng-dev libglm-dev libglew-dev libglfw3-dev libgtest-dev libgmock-dev libxt-dev ``` +Tools including git, g++/clang, CMake, Python, [VulkanSDK](https://vulkan.lunarg.com/) are also requested. + ## Building Aurora Aurora includes a script that retrieves and builds dependencies ("externals") from source. This script is based on the [USD build script](https://github.com/PixarAnimationStudios/USD/tree/release/build_scripts). CMake is used to build Aurora directly, or to create an IDE project which can then be used to build and debug Aurora. @@ -53,6 +53,8 @@ Aurora includes a script that retrieves and builds dependencies ("externals") fr - Use the `--build-variant` option to choose the build configuration of externals. It can be `Debug`, `Release` (default), or `All`. + - On MacOS, you can specify the build target with `--build-target`. It can be `native`, `x86_64`, `arm64`, or `universal`. + - Use the `-h` option with the script to see available options. 4. **Generating projects:** Run CMake in *AURORA_DIR* to generate build projects, e.g. a Visual Studio solution. @@ -64,7 +66,7 @@ Aurora includes a script that retrieves and builds dependencies ("externals") fr - You can use CMake on the command line or the GUI (cmake-gui). The CMake command to generate projects is as follows: ``` - cmake -S . -B {AURORA_BUILD_DIR} -D CMAKE_BUILD_TYPE={CONFIGURATION} -D EXTERNALS_ROOT={EXTERNALS_ROOT} + cmake -S . -B {AURORA_BUILD_DIR} -G {GENERATOR} -D CMAKE_BUILD_TYPE={CONFIGURATION} -D EXTERNALS_ROOT={EXTERNALS_ROOT} ``` As noted above, the value for `EXTERNALS_ROOT` must be specified as an absolute path. @@ -73,11 +75,13 @@ Aurora includes a script that retrieves and builds dependencies ("externals") fr - On Windows, `CMAKE_BUILD_TYPE` is ignored during the cmake configuration. You are required to specify the build configuration with `--config {CONFIGURATION}` during the cmake build. - - You can optionally specify the desired graphics API backend as described below, e.g. `-D ENABLE_HGI_BACKEND=ON`. + - You can optionally specify the desired graphics API backend as described below, e.g. `-D ENABLE_HGI_BACKEND=ON`. Note that Plasma with Vulkan backend does not support interactive mode yet. If more than one backend is enabled, you can designate the desired one, e.g. `--renderer hgi`, when executing Plasma. - On Windows, you may need to specify the toolchain and architecture with `-G "Visual Studio 16 2019" -A x64` or `-G "Visual Studio 17 2022" -A x64`. -5. **Building:** You can load the *Aurora.sln* Visual Studio solution file from the Aurora build directory, and build Aurora using the build configuration used with the *installExternals.py* script (see below), or use CMake. + - On MacOS, you can specify the toolchain with `-G "Xcode"`. This will also help to generate environment variables, etc. needed by Plasma. + +5. **Building:** You can load the *Aurora.sln* Visual Studio solution file (Windows) / *Aurora.xcodeproj* Xcode project file (MacOS) from the Aurora build directory, and build Aurora using the build configuration used with the *installExternals.py* script (see below), or use CMake. - The CMake command to build Aurora is as follows: diff --git a/Libraries/Aurora/API/Aurora/Aurora.h b/Libraries/Aurora/API/Aurora/Aurora.h index a7a8048..e1bb514 100644 --- a/Libraries/Aurora/API/Aurora/Aurora.h +++ b/Libraries/Aurora/API/Aurora/Aurora.h @@ -1162,6 +1162,8 @@ class AURORA_API IRenderer // TODO: Remove. This has been replaced by GM types. virtual void setCamera(const float* view, const float* proj, float focalDistance = 1.0f, float lensRadius = 0.0f) = 0; + + virtual void setFrameIndex(int frameIndex) = 0; // Render the current scene. virtual void render(uint32_t sampleStart = 0, uint32_t sampleCount = 1) = 0; diff --git a/Libraries/Aurora/CMakeLists.txt b/Libraries/Aurora/CMakeLists.txt index f936eb2..c691698 100644 --- a/Libraries/Aurora/CMakeLists.txt +++ b/Libraries/Aurora/CMakeLists.txt @@ -1,5 +1,7 @@ project(Aurora) +set(AURORA_OPTIONAL_LIBRARIES) + if(ENABLE_DIRECTX_BACKEND) # Add the preprocessor definition for directX backend flag. add_compile_definitions(DIRECTX_SUPPORT=1) @@ -25,11 +27,20 @@ if(ENABLE_HGI_BACKEND) find_package(pxr REQUIRED) # Pixar Universal Scene Description - if (NOT TARGET pxr::hgiVulkan) - message(FATAL_ERROR "USD hgiVulkan library is required to build Aurora with HGI backend enabled.") + if (APPLE) + if (NOT TARGET pxr::hgiMetal) + message(FATAL_ERROR "USD hgiMetal library is required to build Aurora with HGI backend enabled for Mac.") + endif() + + list(APPEND AURORA_OPTIONAL_LIBRARIES "-framework Metal") + else() + if (NOT TARGET pxr::hgiVulkan) + message(FATAL_ERROR "USD hgiVulkan library is required to build Aurora with HGI backend enabled.") + endif() + + find_package(Vulkan REQUIRED) # Vulkan SDK endif() - find_package(Vulkan REQUIRED) # Vulkan SDK else() add_compile_definitions(HGI_SUPPORT=0) endif() @@ -373,6 +384,9 @@ set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${LIBRARY_OUTPUT_DIR}" ARCHIVE_OUTPUT_DIRECTORY "${LIBRARY_OUTPUT_DIR}" PDB_OUTPUT_DIRECTORY "${RUNTIME_OUTPUT_DIR}" + BUILD_WITH_INSTALL_RPATH TRUE + INSTALL_RPATH_USE_LINK_PATH TRUE + INSTALL_RPATH "${TBB_LIBRARY_DIR};${PXR_LIBRARY_DIRS};${INSTALL_RPATH}" # Follow the USD convention of lower-case initial on libraries. OUTPUT_NAME "aurora" ) @@ -399,6 +413,12 @@ else() set(D3D12_TARGETS "") endif() +if(APPLE) + find_library(METAL_FRAMEWORK Metal) +else() + set(METAL_FRAMEWORK "") +endif() + target_link_libraries(${PROJECT_NAME} PRIVATE Foundation @@ -409,6 +429,8 @@ PRIVATE stb::stb glm::glm Slang::Slang + ${AURORA_OPTIONAL_LIBRARIES} + ${METAL_FRAMEWORK} ) target_include_directories(${PROJECT_NAME} @@ -447,6 +469,10 @@ if(ENABLE_DIRECTX_BACKEND) # TODO: do we have Vulkan computer shaders amd need to do similiar things for them? endif() +if(APPLE) + set_source_files_properties(Source/HGI/HGIRenderer.cpp PROPERTIES LANGUAGE OBJCXX) +endif() + install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION "${INSTALL_BIN}" ARCHIVE DESTINATION "${INSTALL_LIB}" diff --git a/Libraries/Aurora/Source/AssetManager.cpp b/Libraries/Aurora/Source/AssetManager.cpp index f3ec9c4..59a6ac7 100644 --- a/Libraries/Aurora/Source/AssetManager.cpp +++ b/Libraries/Aurora/Source/AssetManager.cpp @@ -45,7 +45,7 @@ bool isImageSRGB(stbi_uc const* buffer, int len) } // Setup PNG reading structure. - stbi__png p; + [[maybe_unused]] stbi__png p; p.s = &s; p.expanded = nullptr; p.idata = nullptr; diff --git a/Libraries/Aurora/Source/GeometryBase.cpp b/Libraries/Aurora/Source/GeometryBase.cpp index c1b21b8..deb57ac 100644 --- a/Libraries/Aurora/Source/GeometryBase.cpp +++ b/Libraries/Aurora/Source/GeometryBase.cpp @@ -122,6 +122,84 @@ GeometryBase::GeometryBase(const std::string& name, const GeometryDescriptor& de _texCoords[i * 2u + 1u] = coord; } } + + // TODO: Following code is temporary and will be removed once Metal support is done. + float diffuse[4]{1.0f, 1.0f, 1.0f, 1.0f}; + float smoothness = 0.f; + float emissiveStrength = 0.f; + uint32_t flags = 0; + + if(_name.find("CornellBox_tallBox") != std::string::npos) { + smoothness = 0.95f; + } + else if(_name.find("CornellBox_light") != std::string::npos) { + flags = TRIANGLE_FLAGS_EMISSION; + emissiveStrength = 2.f; + } + else if(_name.find("CornellBox_leftWall") != std::string::npos) { + diffuse[0] = 1.f; + diffuse[1] = 0.f; + diffuse[2] = 0.f; + diffuse[3] = 1.f; + } + else if(_name.find("CornellBox_rightWall") != std::string::npos) { + diffuse[0] = 0.f; + diffuse[1] = 1.f; + diffuse[2] = 0.f; + diffuse[3] = 1.f; + } + else if(_name.find("CornellBox_floor") != std::string::npos) { + smoothness = 0.7f; + } + else if(_name.find("Torus") != std::string::npos) { + smoothness = 1.f; + } + else if(_name.find("Sphere") != std::string::npos) { + smoothness = 0.8f; +// diffuse[0] = 156.f / 255.f; +// diffuse[1] = 176.f / 255.f; +// diffuse[2] = 215.f / 255.f; + diffuse[0] = 1.f; + diffuse[1] = 1.f; + diffuse[2] = 1.f; + diffuse[3] = 1.f; + } + + + for(uint32_t i = 0; i < _indexCount / 3; ++i) { + uint32_t v0 = _indices[i * 3 + 0]; + uint32_t v1 = _indices[i * 3 + 1]; + uint32_t v2 = _indices[i * 3 + 2]; + Triangle triangle; + + if(!_normals.empty()) + { + triangle.normals[0][0] = _normals[v0 * 3 + 0]; + triangle.normals[0][1] = _normals[v0 * 3 + 1]; + triangle.normals[0][2] = _normals[v0 * 3 + 2]; + triangle.normals[0][3] = 0.0f; + + triangle.normals[1][0] = _normals[v1 * 3 + 0]; + triangle.normals[1][1] = _normals[v1 * 3 + 1]; + triangle.normals[1][2] = _normals[v1 * 3 + 2]; + triangle.normals[1][3] = 0.0f; + + triangle.normals[2][0] = _normals[v2 * 3 + 0]; + triangle.normals[2][1] = _normals[v2 * 3 + 1]; + triangle.normals[2][2] = _normals[v2 * 3 + 2]; + triangle.normals[2][3] = 0.0f; + } + + triangle.diffuse[0] = diffuse[0]; + triangle.diffuse[1] = diffuse[1]; + triangle.diffuse[2] = diffuse[2]; + triangle.diffuse[3] = diffuse[3]; + triangle.smoothness = smoothness; + triangle.emissiveStrength = emissiveStrength; + triangle.flags = flags; + + _primitiveData.push_back(triangle); + } } END_AURORA diff --git a/Libraries/Aurora/Source/GeometryBase.h b/Libraries/Aurora/Source/GeometryBase.h index c55c6c5..0d19745 100644 --- a/Libraries/Aurora/Source/GeometryBase.h +++ b/Libraries/Aurora/Source/GeometryBase.h @@ -35,7 +35,9 @@ class GeometryBase : public IGeometry bool isIncomplete() { return _incomplete; } const vector& positions() { return _positions; } - const vector& normals() { return _normals; } + const vector& normals() { + return _normals; + } const vector& tangents() { return _tangents; } const vector& texCoords() { return _texCoords; } @@ -44,6 +46,18 @@ class GeometryBase : public IGeometry /*** Private Variables ***/ + enum TriangleFlags { + TRIANGLE_FLAGS_EMISSION = 0x1, + }; + + struct Triangle { + float normals[3][4]; + float diffuse[4]; + float smoothness; + float emissiveStrength; + uint32_t flags; // is emmisive or not + }; + std::string _name; bool _bIsDirty = true; uint32_t _vertexCount = 0; @@ -53,6 +67,7 @@ class GeometryBase : public IGeometry vector _texCoords; uint32_t _indexCount = 0; vector _indices; + vector _primitiveData; bool _incomplete = false; /*** DirectX 12 Objects ***/ diff --git a/Libraries/Aurora/Source/HGI/HGIGeometry.cpp b/Libraries/Aurora/Source/HGI/HGIGeometry.cpp index 410447e..dfee808 100644 --- a/Libraries/Aurora/Source/HGI/HGIGeometry.cpp +++ b/Libraries/Aurora/Source/HGI/HGIGeometry.cpp @@ -92,6 +92,18 @@ void HGIGeometry::update() indexBufferDesc.byteSize = _indexCount * sizeof(_indices[0]); indexBuffer = HgiBufferHandleWrapper::create( _pRenderer->hgi()->CreateBuffer(indexBufferDesc), _pRenderer->hgi()); + + // Per primitive data + HgiBufferDesc primitiveDataBufferDesc; + primitiveDataBufferDesc.debugName = _name + "PrimitiveData"; + primitiveDataBufferDesc.usage = HgiBufferUsageStorage | + HgiBufferUsageAccelerationStructureBuildInputReadOnly | HgiBufferUsageRayTracingExtensions | + HgiBufferUsageShaderDeviceAddress; + primitiveDataBufferDesc.initialData = _primitiveData.data(); + primitiveDataBufferDesc.vertexStride = sizeof(Triangle); + primitiveDataBufferDesc.byteSize = (_indexCount / 3) * primitiveDataBufferDesc.vertexStride; + primitiveDataBuffer = HgiBufferHandleWrapper::create( + _pRenderer->hgi()->CreateBuffer(primitiveDataBufferDesc), _pRenderer->hgi()); // Get the device addresses for all the buffers to place in shader record. bufferAddresses.indexBufferDeviceAddress = indexBuffer->handle()->GetDeviceAddress(); @@ -122,6 +134,10 @@ void HGIGeometry::update() geometryDesc.maxVertex = _vertexCount; geometryDesc.transformData = transformBuffer->handle(); geometryDesc.count = triangleCount; + geometryDesc.primitiveData = primitiveDataBuffer->handle(); + geometryDesc.primitiveDataStride = primitiveDataBufferDesc.vertexStride; + geometryDesc.primitiveDataElementSize = primitiveDataBufferDesc.vertexStride; + geom = HgiAccelerationStructureGeometryHandleWrapper::create( _pRenderer->hgi()->CreateAccelerationStructureGeometry(geometryDesc), _pRenderer->hgi()); @@ -141,7 +157,6 @@ void HGIGeometry::update() accelStructCmds->PopDebugGroup(); // Buld the BLAS. - // TODO: Should not be done in geometry ctor. _pRenderer->hgi()->SubmitCmds(accelStructCmds.get(), HgiSubmitWaitTypeWaitUntilCompleted); } diff --git a/Libraries/Aurora/Source/HGI/HGIGeometry.h b/Libraries/Aurora/Source/HGI/HGIGeometry.h index da639df..e76ad63 100644 --- a/Libraries/Aurora/Source/HGI/HGIGeometry.h +++ b/Libraries/Aurora/Source/HGI/HGIGeometry.h @@ -45,6 +45,7 @@ class HGIGeometry : public GeometryBase HgiBufferHandleWrapper::Pointer texCoordBuffer; HgiBufferHandleWrapper::Pointer indexBuffer; HgiBufferHandleWrapper::Pointer transformBuffer; + HgiBufferHandleWrapper::Pointer primitiveDataBuffer; HgiAccelerationStructureGeometryHandleWrapper::Pointer geom; HgiAccelerationStructureHandleWrapper::Pointer accelStructure; @@ -52,4 +53,4 @@ class HGIGeometry : public GeometryBase HGIRenderer* _pRenderer; }; -END_AURORA \ No newline at end of file +END_AURORA diff --git a/Libraries/Aurora/Source/HGI/HGILight.h b/Libraries/Aurora/Source/HGI/HGILight.h index 99d2dcc..de100e9 100644 --- a/Libraries/Aurora/Source/HGI/HGILight.h +++ b/Libraries/Aurora/Source/HGI/HGILight.h @@ -27,7 +27,7 @@ class HGILight : public ILight, public FixedValues /*** Lifetime Management ***/ HGILight(HGIScene* pScene, const string& lightType, int index); - ~HGILight() {}; + ~HGILight() { _pScene = nullptr; }; /*** Functions ***/ FixedValues& values() override { return *this; } diff --git a/Libraries/Aurora/Source/HGI/HGIMaterial.cpp b/Libraries/Aurora/Source/HGI/HGIMaterial.cpp index 1e94684..896bceb 100644 --- a/Libraries/Aurora/Source/HGI/HGIMaterial.cpp +++ b/Libraries/Aurora/Source/HGI/HGIMaterial.cpp @@ -40,7 +40,7 @@ void HGIMaterial::update() { // Build a structure from values map into staging buffer. void* pStaging = _ubo->handle()->GetCPUStagingAddress(); - ::memcpy_s(pStaging, uniformBuffer().size(), uniformBuffer().data(), uniformBuffer().size()); + memcpy(pStaging, uniformBuffer().data(), uniformBuffer().size()); // Transfer staging buffer to GPU. pxr::HgiBlitCmdsUniquePtr blitCmds = _pRenderer->hgi()->CreateBlitCmds(); diff --git a/Libraries/Aurora/Source/HGI/HGIRenderer.cpp b/Libraries/Aurora/Source/HGI/HGIRenderer.cpp index 09e6d39..e5f9b1e 100644 --- a/Libraries/Aurora/Source/HGI/HGIRenderer.cpp +++ b/Libraries/Aurora/Source/HGI/HGIRenderer.cpp @@ -28,7 +28,7 @@ using namespace pxr; BEGIN_AURORA -const vector DefaultEntryPoints = { "RADIANCE_HIT" }; +const vector DefaultEntryPoints = { "INITIALIZE_MATERIAL_EXPORT" }; HGIRenderer::HGIRenderer(uint32_t activeFrameCount) : RendererBase(activeFrameCount), _shaderLibrary(DefaultEntryPoints) @@ -44,7 +44,7 @@ HGIRenderer::HGIRenderer(uint32_t activeFrameCount) : _pAssetMgr->enableVerticalFlipOnImageLoad(!_values.asBoolean(kLabelIsFlipImageYEnabled)); MaterialShaderSource defaultMaterialSource( - "Default", CommonShaders::g_sInitializeDefaultMaterialType); + "Default", CommonShaders::g_sMainEntryPoints); // Create the material definition for default shader. _pDefaultMaterialDefinition = make_shared(defaultMaterialSource, @@ -55,9 +55,10 @@ HGIRenderer::HGIRenderer(uint32_t activeFrameCount) : _pDefaultMaterialDefinition->getShaderDefinition(shaderDef); _pDefaultMaterialShader = _shaderLibrary.acquire(shaderDef); - // Ensure the radiance hit entry point is compiled for default shader. - _pDefaultMaterialShader->incrementRefCount("RADIANCE_HIT"); + // Ensure the instance hit entry point is compiled for default shader. + _pDefaultMaterialShader->incrementRefCount("INITIALIZE_MATERIAL_EXPORT"); } + HGIRenderer::~HGIRenderer() { // Ensure scene deleted before resources are destroyed. @@ -154,10 +155,28 @@ void HGIRenderer::createResources() // Use the HGI code generation to add shader inputs to post-processing shader function. HgiShaderFunctionAddWritableTexture( - &postProcessComputeDesc, "outTexture", 2, HgiFormatFloat32Vec4); - HgiShaderFunctionAddTexture(&postProcessComputeDesc, "accumulationTexture"); + &postProcessComputeDesc, "outTexture", /*bindIndex = */0, /*dimensions = */2, HgiFormatFloat32Vec4); + HgiShaderFunctionAddTexture(&postProcessComputeDesc, "accumulationTexture", /*bindIndex = */1); HgiShaderFunctionAddStageInput(&postProcessComputeDesc, "hd_GlobalInvocationID", "uvec3", HgiShaderKeywordTokens->hdGlobalInvocationID); + +// layout(binding = 3) layout(std140) uniform PostProcesssing +// { +// vec3 brightness; +// int debugMode; +// vec2 range; +// bool isDenoisingEnabled; +// bool isToneMappingEnabled; +// bool isGammaCorrectionEnabled; +// bool isAlphaEnabled; +// } gSettings; + HgiShaderFunctionAddConstantParam(&postProcessComputeDesc, "gSettings_brightness", "vec3"); + HgiShaderFunctionAddConstantParam(&postProcessComputeDesc, "gSettings_debugMode", "int"); + HgiShaderFunctionAddConstantParam(&postProcessComputeDesc, "gSettings_range", "vec2"); + HgiShaderFunctionAddConstantParam(&postProcessComputeDesc, "gSettings_isDenoisingEnabled", "bool"); + HgiShaderFunctionAddConstantParam(&postProcessComputeDesc, "gSettings_isToneMappingEnabled", "bool"); + HgiShaderFunctionAddConstantParam(&postProcessComputeDesc, "gSettings_isGammaCorrectionEnabled", "bool"); + HgiShaderFunctionAddConstantParam(&postProcessComputeDesc, "gSettings_isAlphaEnabled", "bool"); // Create post-processing shader function, abort application if compilation fails. _postProcessComputeShader = HgiShaderFunctionHandleWrapper::create( @@ -185,11 +204,20 @@ void HGIRenderer::createResources() accumComputeDesc.computeDescriptor.localSize = GfVec3i(8, 8, 1); // Use the HGI code generation to add shader inputs to accumulation shader function. - HgiShaderFunctionAddWritableTexture(&accumComputeDesc, "outTexture", 2, HgiFormatFloat32Vec4); - HgiShaderFunctionAddTexture(&accumComputeDesc, "accumulationTexture"); - HgiShaderFunctionAddTexture(&accumComputeDesc, "directLightTexture"); + HgiShaderFunctionAddWritableTexture( + &accumComputeDesc, "outTexture", /*bindIndex = */0, /*dimensions = */2, HgiFormatFloat32Vec4); + HgiShaderFunctionAddTexture(&accumComputeDesc, "accumulationTexture", /*bindIndex = */1); + HgiShaderFunctionAddTexture(&accumComputeDesc, "directLightTexture", /*bindIndex = */2); HgiShaderFunctionAddStageInput(&accumComputeDesc, "hd_GlobalInvocationID", "uvec3", HgiShaderKeywordTokens->hdGlobalInvocationID); + +// layout(binding = 3) layout(std140) uniform SampleData +// { +// int sampleIndex; +// int seedOffset; +// } gSampleData; + HgiShaderFunctionAddConstantParam(&accumComputeDesc, "gSampleData_sampleIndex", "int"); + HgiShaderFunctionAddConstantParam(&accumComputeDesc, "gSampleData_seedOffset", "int"); // Create accumulation shader function, abort application if compilation fails. _accumComputeShader = HgiShaderFunctionHandleWrapper::create( @@ -222,6 +250,7 @@ void HGIRenderer::createResources() accumTexBind.bindingIndex = 0; accumTexBind.stageUsage = HgiShaderStageCompute; accumTexBind.textures.push_back(_pAccumulationTex->handle()); + accumTexBind.samplers.push_back(sampler()); accumTexBind.resourceType = HgiBindResourceTypeStorageImage; // Create binding description for final render target as storage texture. @@ -229,6 +258,7 @@ void HGIRenderer::createResources() finalTexBind.bindingIndex = 0; finalTexBind.stageUsage = HgiShaderStageCompute; finalTexBind.textures = { renderBuffer()->storageTex() }; + finalTexBind.samplers.push_back(sampler()); finalTexBind.resourceType = HgiBindResourceTypeStorageImage; // Create binding description for direct light texture as input texture. @@ -265,7 +295,7 @@ void HGIRenderer::createResources() _accumulationComputeResourceBindings = HgiResourceBindingsHandleWrapper::create( hgi()->CreateResourceBindings(resourceDesc), hgi()); - // Create resource descriptoin for post-processing compute shader. + // Create resource description for post-processing compute shader. HgiResourceBindingsDesc postProcessResourceDesc; postProcessResourceDesc.debugName = "PostProcessComputeShaderResources"; postProcessResourceDesc.buffers.push_back(std::move(bufferDesc1)); @@ -433,7 +463,7 @@ void HGIRenderer::render(uint32_t sampleStart, uint32_t sampleCount) hgi()->SubmitCmds(rtCmds.get()); // Create accumulation compute commands for frame. - HgiComputeCmdsUniquePtr computeCmds = hgi()->CreateComputeCmds(); + HgiComputeCmdsUniquePtr computeCmds = hgi()->CreateComputeCmds({}); computeCmds->PushDebugGroup("Accumulation Compute Commands"); computeCmds->BindResources(_accumulationComputeResourceBindings->handle()); computeCmds->BindPipeline(_accumulationComputePipeline->handle()); @@ -446,7 +476,7 @@ void HGIRenderer::render(uint32_t sampleStart, uint32_t sampleCount) // If this is the last frame, run the post processing compute shader, to get final image. if (i == sampleCount - 1) { - HgiComputeCmdsUniquePtr postProcessComputeCmds = hgi()->CreateComputeCmds(); + HgiComputeCmdsUniquePtr postProcessComputeCmds = hgi()->CreateComputeCmds({}); postProcessComputeCmds->PushDebugGroup("Post Process Compute Commands"); postProcessComputeCmds->BindResources(_postProcessComputeResourceBindings->handle()); postProcessComputeCmds->BindPipeline(_postProcessComputePipeline->handle()); @@ -457,6 +487,7 @@ void HGIRenderer::render(uint32_t sampleStart, uint32_t sampleCount) // End HGI frame rendering. hgi()->EndFrame(); } + } void HGIRenderer::waitForTask() diff --git a/Libraries/Aurora/Source/HGI/HGIScene.cpp b/Libraries/Aurora/Source/HGI/HGIScene.cpp index b33d7df..4162874 100644 --- a/Libraries/Aurora/Source/HGI/HGIScene.cpp +++ b/Libraries/Aurora/Source/HGI/HGIScene.cpp @@ -114,7 +114,7 @@ void HGIScene::rebuildInstanceList() // Add instance data for all the instances. for (HGIInstance& instance : _instances.active().resources()) { - // Get instacne and material. + // Get instance and material. auto pMtl = instance.material() ? instance.material() : defaultMaterial; // Create a hit group shader record for instance. @@ -128,9 +128,10 @@ void HGIScene::rebuildInstanceList() // Get baseColor image from material. HGIImagePtr pBaseColorImage = nullptr; - if (pMtl->hasValue("base_color_image")) + if (pMtl->textures().findTexture("base_color_image") != -1) { - pBaseColorImage = dynamic_pointer_cast(pMtl->asImage("base_color_image")); + auto texture = pMtl->textures().getTexture("base_color_image"); + pBaseColorImage = dynamic_pointer_cast(texture); } if (pBaseColorImage) { @@ -142,10 +143,9 @@ void HGIScene::rebuildInstanceList() // Get specular roughness image from material. HGIImagePtr pSpecularRoughnessImage = nullptr; - if (pMtl->hasValue("specular_roughness_image")) + if (pMtl->textures().findTexture("specular_roughness_image") != -1) { - pSpecularRoughnessImage = - dynamic_pointer_cast(pMtl->asImage("specular_roughness_image")); + pSpecularRoughnessImage = dynamic_pointer_cast(pMtl->textures().getTexture("specular_roughness_image")); } if (pSpecularRoughnessImage) { @@ -157,9 +157,9 @@ void HGIScene::rebuildInstanceList() // Get opacity image from material. HGIImagePtr pOpacityImage = nullptr; - if (pMtl->hasValue("opacity_image")) + if (pMtl->textures().findTexture("opacity_image") != -1) { - pOpacityImage = dynamic_pointer_cast(pMtl->asImage("opacity_image")); + pOpacityImage = dynamic_pointer_cast(pMtl->textures().getTexture("opacity_image")); } if (pOpacityImage) { @@ -171,9 +171,9 @@ void HGIScene::rebuildInstanceList() // Get normal image from material. HGIImagePtr pNormalImage = nullptr; - if (pMtl->hasValue("normal_image")) + if (pMtl->textures().findTexture("normal_image") != -1) { - pNormalImage = dynamic_pointer_cast(pMtl->asImage("normal_image")); + pNormalImage = dynamic_pointer_cast(pMtl->textures().getTexture("normal_image")); } if (pNormalImage) { @@ -265,11 +265,12 @@ void HGIScene::rebuildResourceBindings() // - Default sampler // - Background image // - Environment light image - resourceBindingsDesc.textures.resize(5); + resourceBindingsDesc.textures.resize(6); // Add resource for output image storage texture resource. resourceBindingsDesc.textures[0].bindingIndex = 1; resourceBindingsDesc.textures[0].textures = { _pRenderer->directTex() }; + resourceBindingsDesc.textures[0].samplers = { _pRenderer->sampler() }; resourceBindingsDesc.textures[0].resourceType = HgiBindResourceTypeStorageImage; resourceBindingsDesc.textures[0].stageUsage = HgiShaderStageRayGen; @@ -295,6 +296,7 @@ void HGIScene::rebuildResourceBindings() // Add resource for default sampler resource. resourceBindingsDesc.textures[2].bindingIndex = 6; + resourceBindingsDesc.textures[2].textures = { _pDefaultImage->handle() }; resourceBindingsDesc.textures[2].samplers = { _pRenderer->sampler() }; resourceBindingsDesc.textures[2].resourceType = HgiBindResourceTypeSampler; resourceBindingsDesc.textures[2].stageUsage = @@ -304,6 +306,7 @@ void HGIScene::rebuildResourceBindings() resourceBindingsDesc.textures[3].bindingIndex = 7; resourceBindingsDesc.textures[3].textures = { pBackgroundImage ? pBackgroundImage->texture() : _pDefaultImage->handle() }; + resourceBindingsDesc.textures[3].samplers = { _pRenderer->sampler() }; resourceBindingsDesc.textures[3].resourceType = HgiBindResourceTypeSampledImage; resourceBindingsDesc.textures[3].stageUsage = HgiShaderStageRayGen | HgiShaderStageClosestHit | HgiShaderStageMiss; @@ -312,10 +315,18 @@ void HGIScene::rebuildResourceBindings() resourceBindingsDesc.textures[4].bindingIndex = 8; resourceBindingsDesc.textures[4].textures = { pLightImage ? pLightImage->texture() : _pDefaultImage->handle() }; + resourceBindingsDesc.textures[4].samplers = { _pRenderer->sampler() }; resourceBindingsDesc.textures[4].resourceType = HgiBindResourceTypeSampledImage; resourceBindingsDesc.textures[4].stageUsage = HgiShaderStageRayGen | HgiShaderStageClosestHit | HgiShaderStageMiss; ; + // accumulation texture + resourceBindingsDesc.textures[5].bindingIndex = 9; + resourceBindingsDesc.textures[5].textures = { _pRenderer->accumulationTex() }; + resourceBindingsDesc.textures[5].samplers = { _pRenderer->sampler() }; + resourceBindingsDesc.textures[5].resourceType = HgiBindResourceTypeStorageImage; + resourceBindingsDesc.textures[5].stageUsage = HgiShaderStageRayGen; + // 3 buffer resources for: // - frame data UBO @@ -365,111 +376,72 @@ void HGIScene::createResources() defaultTexDesc.usage = HgiTextureUsageBitsShaderRead; _pDefaultImage = HgiTextureHandleWrapper::create(hgi->CreateTexture(defaultTexDesc), hgi); - string transpiledGLSL; string transpilerErrors; + // Common shader declarations required by all stages. + string shaderDeclarations; + if (hgi->GetAPIName() == HgiTokens->Metal) + { + shaderDeclarations = "#define MTL_TRANSLATE_GLSL\n"; + } - // Transpile the ray generation shader. - if (!_transpiler->transpile( - "RayGenShader.slang", transpiledGLSL, transpilerErrors, Transpiler::Language::GLSL)) + // Transpile the main entry point shader. + string mainEntryPointSource = CommonShaders::g_sMainEntryPoints; + _transpiler->setSource("Options.slang", ""); + _transpiler->setSource("Definitions.slang", ""); + + // Create the ray generation shader description including transpiled GLSL source. + string rayGenShaderCode; + // HgiRenderer can only have one main entry point for each shader source. + // Disable the rest of the shader stages and use the ray generation shader. + std::map rayGenPreDefs = { { "DISABLE_HGI_SHADER_STAGE_MISS", "1" }, + { "DISABLE_HGI_SHADER_STAGE_CLOSEST_HIT", "1" }, + { "DISABLE_HGI_SHADER_STAGE_ANY_HIT", "1" } }; + if (!_transpiler->transpileCode( + mainEntryPointSource, rayGenShaderCode, transpilerErrors, Transpiler::Language::GLSL, rayGenPreDefs)) { - AU_ERROR("Slang transpiling error on RayGenShader.slang:\n%s", transpilerErrors.c_str()); + AU_ERROR("Slang transpiling error on ray generation shader:\n%s", transpilerErrors.c_str()); AU_DEBUG_BREAK(); AU_FAIL("Slang transpiling failed, see log in console for details."); } - // Create the ray generation shader description including transpiled GLSL source. - string rayGenShaderCode = transpiledGLSL; + rayGenShaderCode += HGIShaders::g_sInstanceData; + string rayGenShaderDeclarations = shaderDeclarations; HgiShaderFunctionDesc raygenShaderDesc; - raygenShaderDesc.debugName = "RayGenShader"; - raygenShaderDesc.shaderStage = HgiShaderStageRayGen; - raygenShaderDesc.shaderCode = rayGenShaderCode.c_str(); - + raygenShaderDesc.debugName = "RayGenShader"; + raygenShaderDesc.shaderStage = HgiShaderStageRayGen; + raygenShaderDesc.shaderCode = rayGenShaderCode.c_str(); + raygenShaderDesc.shaderCodeDeclarations = rayGenShaderDeclarations.c_str(); // Compile the shader itself. fail and print errors if the compilation doesn't succeed. _rayGenShaderFunc = HgiShaderFunctionHandleWrapper::create(hgi->CreateShaderFunction(raygenShaderDesc), hgi); if (!_rayGenShaderFunc->handle()->IsValid()) { std::string logString = _rayGenShaderFunc->handle()->GetCompileErrors(); - AU_ERROR("Error creating shader function for RayGenShader.slang:\n%s", logString.c_str()); + AU_ERROR("Error creating shader function for RayGenShader:\n%s", logString.c_str()); AU_DEBUG_BREAK(); AU_FAIL("Shader function creation failed, see log in console for details."); } - // Transpile the radiance miss shader. - if (!_transpiler->transpile("BackgroundMissShader.slang", transpiledGLSL, transpilerErrors, - Transpiler::Language::GLSL)) - { - AU_ERROR( - "Slang transpiling error on BackgroundMissShader.slang:\n%s", transpilerErrors.c_str()); - AU_DEBUG_BREAK(); - AU_FAIL("Slang transpiling failed, see log in console for details."); - } - - // Create the radiance miss shader description including transpiled GLSL source. - string backgroundMissShaderCode = transpiledGLSL; - HgiShaderFunctionDesc backgroundMissShaderDesc; - backgroundMissShaderDesc.debugName = "BackgroundMissShader"; - backgroundMissShaderDesc.shaderStage = HgiShaderStageMiss; - backgroundMissShaderDesc.shaderCode = backgroundMissShaderCode.c_str(); - - // Compile the shader itself. fail and print errors if the compilation doesn't succeed. - _backgroundMissShaderFunc = HgiShaderFunctionHandleWrapper::create( - hgi->CreateShaderFunction(backgroundMissShaderDesc), hgi); - if (!_backgroundMissShaderFunc->handle()->IsValid()) - { - std::string logString = _backgroundMissShaderFunc->handle()->GetCompileErrors(); - AU_ERROR("Error creating shader function for BackgroundMissShader.slang:\n%s", - logString.c_str()); - AU_DEBUG_BREAK(); - AU_FAIL("Shader function creation failed, see log in console for details."); - } - - // Transpile the radiance miss shader. - if (!_transpiler->transpile("RadianceMissShader.slang", transpiledGLSL, transpilerErrors, - Transpiler::Language::GLSL)) - { - AU_ERROR( - "Slang transpiling error on RadianceMissShader.slang:\n%s", transpilerErrors.c_str()); - AU_DEBUG_BREAK(); - AU_FAIL("Slang transpiling failed, see log in console for details."); - } - - // Create the radiance miss shader description including transpiled GLSL source. - string radianceMissShaderCode = transpiledGLSL; - HgiShaderFunctionDesc radianceMissShaderDesc; - radianceMissShaderDesc.debugName = "RadianceMissShader"; - radianceMissShaderDesc.shaderStage = HgiShaderStageMiss; - radianceMissShaderDesc.shaderCode = radianceMissShaderCode.c_str(); - - // Compile the shader itself. fail and print errors if the compilation doesn't succeed. - _radianceMissShaderFunc = HgiShaderFunctionHandleWrapper::create( - hgi->CreateShaderFunction(radianceMissShaderDesc), hgi); - if (!_radianceMissShaderFunc->handle()->IsValid()) - { - std::string logString = _radianceMissShaderFunc->handle()->GetCompileErrors(); - AU_ERROR( - "Error creating shader function for RadianceMissShader.slang:\n%s", logString.c_str()); - AU_DEBUG_BREAK(); - AU_FAIL("Shader function creation failed, see log in console for details."); - } - - // Transpile the shadow miss shader. - if (!_transpiler->transpile( - "ShadowMissShader.slang", transpiledGLSL, transpilerErrors, Transpiler::Language::GLSL)) + // Create the shadow miss shader description including GLSL source. + string shadowMissShaderCode; + // Disable the rest of the shader stages and use the shadow miss shader. + std::map shadowMissPreDefs = { { "DISABLE_HGI_SHADER_STAGE_RAY_GEN", "1" }, + { "DISABLE_HGI_SHADER_STAGE_CLOSEST_HIT", "1" }, + { "DISABLE_HGI_SHADER_STAGE_ANY_HIT", "1" } }; + if (!_transpiler->transpileCode( + mainEntryPointSource, shadowMissShaderCode, transpilerErrors, Transpiler::Language::GLSL, shadowMissPreDefs)) { - AU_ERROR( - "Slang transpiling error on ShadowMissShader.slang:\n%s", transpilerErrors.c_str()); + AU_ERROR("Slang transpiling error on shadow miss shader:\n%s", transpilerErrors.c_str()); AU_DEBUG_BREAK(); AU_FAIL("Slang transpiling failed, see log in console for details."); } - // Create the shadow miss shader description including GLSL source. - string shadowMissShaderCode = transpiledGLSL; + string shadowMissShaderDeclarations = shaderDeclarations; HgiShaderFunctionDesc shadowMissShaderDesc; - shadowMissShaderDesc.debugName = "ShadowMissShader"; - shadowMissShaderDesc.shaderStage = HgiShaderStageMiss; - shadowMissShaderDesc.shaderCode = shadowMissShaderCode.c_str(); - + shadowMissShaderDesc.debugName = "ShadowMissShader"; + shadowMissShaderDesc.shaderStage = HgiShaderStageMiss; + shadowMissShaderDesc.shaderCode = shadowMissShaderCode.c_str(); + shadowMissShaderDesc.shaderCodeDeclarations = shadowMissShaderDeclarations.c_str(); // Compile the shader itself. fail and print errors if the compilation doesn't succeed. _shadowMissShaderFunc = HgiShaderFunctionHandleWrapper::create( hgi->CreateShaderFunction(shadowMissShaderDesc), hgi); @@ -477,36 +449,32 @@ void HGIScene::createResources() { std::string logString = _shadowMissShaderFunc->handle()->GetCompileErrors(); AU_ERROR( - "Error creating shader function for ShadowMissShader.slang:\n%s", logString.c_str()); + "Error creating shader function for ShadowMissShader:\n%s", logString.c_str()); AU_DEBUG_BREAK(); AU_FAIL("Shader function creation failed, see log in console for details."); } - // Create the closest hit shader from template text. - string mainEntryPointSource = "#define RADIANCE_HIT 1\n" + - regex_replace(CommonShaders::g_sMainEntryPoints, regex("___Material___"), "Default"); - - _transpiler->setSource( - "InitializeMaterial.slang", CommonShaders::g_sInitializeDefaultMaterialType); - _transpiler->setSource("Options.slang", ""); - _transpiler->setSource("Definitions.slang", ""); - - // Transpaile the closest hit shader. + // Create the closest hit shader description, appending the the raw instance data GLSL code. + string closestHitShaderCode; + // Disable the rest of the shader stages and use the closest hit shader. + std::map closestHitPreDefs = { { "DISABLE_HGI_SHADER_STAGE_RAY_GEN", "1" }, + { "DISABLE_HGI_SHADER_STAGE_MISS", "1" }, + { "DISABLE_HGI_SHADER_STAGE_ANY_HIT", "1" } }; if (!_transpiler->transpileCode( - mainEntryPointSource, transpiledGLSL, transpilerErrors, Transpiler::Language::GLSL)) + mainEntryPointSource, closestHitShaderCode, transpilerErrors, Transpiler::Language::GLSL, closestHitPreDefs)) { - AU_ERROR("Slang transpiling error on closest hit shdaer:\n%s", transpilerErrors.c_str()); + AU_ERROR("Slang transpiling error on closest hit shader:\n%s", transpilerErrors.c_str()); AU_DEBUG_BREAK(); AU_FAIL("Slang transpiling failed, see log in console for details."); } - // Create the closest hit shader description, appending the the raw instance data GLSL code. - string closestHitShaderCode = transpiledGLSL + HGIShaders::g_sInstanceData; + closestHitShaderCode += HGIShaders::g_sInstanceData; + string closestHitShaderDeclarations = shaderDeclarations; HgiShaderFunctionDesc closestHitShaderDesc; - closestHitShaderDesc.debugName = "ClosestHitShader"; - closestHitShaderDesc.shaderStage = HgiShaderStageClosestHit; - closestHitShaderDesc.shaderCode = closestHitShaderCode.c_str(); - + closestHitShaderDesc.debugName = "ClosestHitShader"; + closestHitShaderDesc.shaderStage = HgiShaderStageClosestHit; + closestHitShaderDesc.shaderCode = closestHitShaderCode.c_str(); + closestHitShaderDesc.shaderCodeDeclarations = closestHitShaderDeclarations.c_str(); // Compile the shader itself. fail and print errors if the compilation doesn't succeed. _closestHitShaderFunc = HgiShaderFunctionHandleWrapper::create( hgi->CreateShaderFunction(closestHitShaderDesc), hgi); @@ -517,6 +485,40 @@ void HGIScene::createResources() AU_DEBUG_BREAK(); AU_FAIL("Shader function creation failed, see log in console for details."); } + + /* TODO: Add any hit shader. + // Create the any hit shader description, appending the the raw instance data GLSL code. + string anyHitShaderCode; + // Disable the rest of the shader stages and use the any hit shader. + std::map anyHitPreDefs = { { "DISABLE_HGI_SHADER_STAGE_RAY_GEN", "1" }, + { "DISABLE_HGI_SHADER_STAGE_MISS", "1" }, + { "DISABLE_HGI_SHADER_STAGE_CLOSEST_HIT", "1" } }; + if (!_transpiler->transpileCode( + mainEntryPointSource, anyHitShaderCode, transpilerErrors, Transpiler::Language::GLSL, anyHitPreDefs)) + { + AU_ERROR("Slang transpiling error on any hit shader:\n%s", transpilerErrors.c_str()); + AU_DEBUG_BREAK(); + AU_FAIL("Slang transpiling failed, see log in console for details."); + } + + anyHitShaderCode += HGIShaders::g_sInstanceData; + string anyHitShaderDeclarations = shaderDeclarations; + HgiShaderFunctionDesc anyHitShaderDesc; + anyHitShaderDesc.debugName = "AnyHitShader"; + anyHitShaderDesc.shaderStage = HgiShaderStageAnyHit; + anyHitShaderDesc.shaderCode = anyHitShaderCode.c_str(); + anyHitShaderDesc.shaderCodeDeclarations = anyHitShaderDeclarations.c_str(); + // Compile the shader itself. fail and print errors if the compilation doesn't succeed. + _anyHitShaderFunc = HgiShaderFunctionHandleWrapper::create( + hgi->CreateShaderFunction(anyHitShaderDesc), hgi); + if (!_anyHitShaderFunc->handle()->IsValid()) + { + std::string logString = _anyHitShaderFunc->handle()->GetCompileErrors(); + AU_ERROR("Error creating shader function for any hit shader:\n%s", logString.c_str()); + AU_DEBUG_BREAK(); + AU_FAIL("Shader function creation failed, see log in console for details."); + } + */ } void HGIScene::rebuildPipeline() @@ -541,13 +543,13 @@ void HGIScene::rebuildPipeline() // - background image // - light image HgiRayTracingPipelineDescriptorSetLayoutDesc layoutBinding; - layoutBinding.resourceBinding.resize(9); + layoutBinding.resourceBinding.resize(10); // Description of acceleration structure. layoutBinding.resourceBinding[0].bindingIndex = 0; layoutBinding.resourceBinding[0].count = 1; layoutBinding.resourceBinding[0].resourceType = HgiBindResourceTypeAccelerationStructure; layoutBinding.resourceBinding[0].stageUsage = HgiShaderStageRayGen | HgiShaderStageClosestHit; - // Description of output durect light image. + // Description of output direct light image. layoutBinding.resourceBinding[1].bindingIndex = 1; layoutBinding.resourceBinding[1].count = 1; layoutBinding.resourceBinding[1].resourceType = HgiBindResourceTypeStorageImage; @@ -592,51 +594,61 @@ void HGIScene::rebuildPipeline() layoutBinding.resourceBinding[8].resourceType = HgiBindResourceTypeSampledImage; layoutBinding.resourceBinding[8].stageUsage = HgiShaderStageRayGen | HgiShaderStageClosestHit | HgiShaderStageMiss; + // Description of accumulation texture. + layoutBinding.resourceBinding[9].bindingIndex = 9; + layoutBinding.resourceBinding[9].count = 1; + layoutBinding.resourceBinding[9].resourceType = HgiBindResourceTypeStorageImage; + layoutBinding.resourceBinding[9].stageUsage = HgiShaderStageRayGen; // Create pipeline description. HgiRayTracingPipelineDesc pipelineDesc; pipelineDesc.debugName = "Main Raytracing Pipeline"; pipelineDesc.maxRayRecursionDepth = 10; pipelineDesc.descriptorSetLayouts.push_back(layoutBinding); - // 5 shaders (ray gen, background miss, radiance miss, shadow miss, and closest hit) - pipelineDesc.shaders.resize(5); + // 4 shaders (ray gen, shadow miss, closest hit and any hit) + pipelineDesc.shaders.resize(3); + //pipelineDesc.shaders.resize(4); pipelineDesc.shaders[0].shader = _rayGenShaderFunc->handle(); pipelineDesc.shaders[0].entryPoint = "main"; - pipelineDesc.shaders[1].shader = _backgroundMissShaderFunc->handle(); + pipelineDesc.shaders[1].shader = _shadowMissShaderFunc->handle(); pipelineDesc.shaders[1].entryPoint = "main"; - pipelineDesc.shaders[2].shader = _radianceMissShaderFunc->handle(); + pipelineDesc.shaders[2].shader = _closestHitShaderFunc->handle(); pipelineDesc.shaders[2].entryPoint = "main"; - pipelineDesc.shaders[3].shader = _shadowMissShaderFunc->handle(); - pipelineDesc.shaders[3].entryPoint = "main"; - pipelineDesc.shaders[4].shader = _closestHitShaderFunc->handle(); - pipelineDesc.shaders[4].entryPoint = "main"; + //pipelineDesc.shaders[3].shader = _anyHitShaderFunc->handle(); + //pipelineDesc.shaders[3].entryPoint = "main"; // Three general shader groups (for miss and ray gen) and one triangle shader group for each // instance. - pipelineDesc.groups.resize(4 + _lstInstances.size()); + pipelineDesc.groups.resize(2 + _lstInstances.size()); + //pipelineDesc.groups.resize(2 + (_lstInstances.size() * 2)); // Ray gen shader group. pipelineDesc.groups[0].type = HgiRayTracingShaderGroupTypeGeneral; pipelineDesc.groups[0].generalShader = 0; // Index within shader array above. - // Background miss shader group. + // Shadow miss shader group. pipelineDesc.groups[1].type = HgiRayTracingShaderGroupTypeGeneral; pipelineDesc.groups[1].generalShader = 1; // Index within shader array above. - // Radiance miss shader group. - pipelineDesc.groups[2].type = HgiRayTracingShaderGroupTypeGeneral; - pipelineDesc.groups[2].generalShader = 2; // Index within shader array above. - // Shadow miss shader group. - pipelineDesc.groups[3].type = HgiRayTracingShaderGroupTypeGeneral; - pipelineDesc.groups[3].generalShader = 3; // Index within shader array above. // Triangle shader groups for each instance. for (size_t i = 0; i < _lstInstances.size(); i++) { size_t shaderRecordStride = sizeof(_lstInstances[i].shaderRecord); // Triangle miss shader group with closest hit shader. - pipelineDesc.groups[4 + i].type = HgiRayTracingShaderGroupTypeTriangles; - pipelineDesc.groups[4 + i].closestHitShader = 4; // Index within shader array above. + pipelineDesc.groups[2 + i].type = HgiRayTracingShaderGroupTypeTriangles; + pipelineDesc.groups[2 + i].closestHitShader = 2; // Index within shader array above. + // Add the hit group record structure to the shader record (this will copied after the + // shader handle in the shader binding table.) + pipelineDesc.groups[2 + i].pShaderRecord = &_lstInstances[i].shaderRecord; + pipelineDesc.groups[2 + i].shaderRecordLength = shaderRecordStride; + + /* + // Triangle miss shader group with any hit shader. + i++; + pipelineDesc.groups[2 + i].type = HgiRayTracingShaderGroupTypeTriangles; + pipelineDesc.groups[2 + i].anyHitShader = 3; // Index within shader array above. // Add the hit group record structure to the shader record (this will copied after the // shader handle in the shader binding table.) - pipelineDesc.groups[4 + i].pShaderRecord = &_lstInstances[i].shaderRecord; - pipelineDesc.groups[4 + i].shaderRecordLength = shaderRecordStride; + pipelineDesc.groups[2 + i].pShaderRecord = &_lstInstances[i].shaderRecord; + pipelineDesc.groups[2 + i].shaderRecordLength = shaderRecordStride; + */ } // Create the pipeline. diff --git a/Libraries/Aurora/Source/HGI/HGIScene.h b/Libraries/Aurora/Source/HGI/HGIScene.h index 1cd4e5c..339416c 100644 --- a/Libraries/Aurora/Source/HGI/HGIScene.h +++ b/Libraries/Aurora/Source/HGI/HGIScene.h @@ -57,7 +57,12 @@ class HGIInstance : public IInstance private: shared_ptr _pGeometry; shared_ptr _pMaterial; - [[maybe_unused]] HGIRenderer* _pRenderer; +// Disable warning "attributes" for GCC to fix build error "'maybe_unused' attribute ignored". +// TODO: This might be a bug of GCC. Need to review it when upgrading GCC to a newer version. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wattributes" + [[maybe_unused]] HGIRenderer* _pRenderer = nullptr; +#pragma GCC diagnostic pop pxr::GfMatrix4f _transform; }; @@ -133,11 +138,10 @@ class HGIScene : public SceneBase vector> _lstImages; HgiResourceBindingsHandleWrapper::Pointer _resBindings; HgiTextureHandleWrapper::Pointer _pDefaultImage; - HgiShaderFunctionHandleWrapper::Pointer _backgroundMissShaderFunc; HgiShaderFunctionHandleWrapper::Pointer _rayGenShaderFunc; HgiShaderFunctionHandleWrapper::Pointer _shadowMissShaderFunc; - HgiShaderFunctionHandleWrapper::Pointer _radianceMissShaderFunc; HgiShaderFunctionHandleWrapper::Pointer _closestHitShaderFunc; + HgiShaderFunctionHandleWrapper::Pointer _anyHitShaderFunc; }; using HGIScenePtr = std::shared_ptr; diff --git a/Libraries/Aurora/Source/HGI/MetalShaders/header.metal b/Libraries/Aurora/Source/HGI/MetalShaders/header.metal new file mode 100644 index 0000000..476a561 --- /dev/null +++ b/Libraries/Aurora/Source/HGI/MetalShaders/header.metal @@ -0,0 +1,133 @@ +#include +#include + +using namespace metal; +using namespace raytracing; + +float3 hsv2rgb(float3 c) +{ + float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + float3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} +struct RayPayload +{ + int rayId; +}; +using HandlerFuncSig = int(ray, thread RayPayload&); + + // Structure representing a single distant light. + // Must match GPU struct in Frame.slang + struct DistantLight + { + // Light color (in RGB) and intensity (in alpha channel.) + float4 colorAndIntensity; + // Direction of light (inverted as expected by shaders.) + packed_float3 direction = packed_float3(0, 0, 1); + // The light size is converted from a diameter in radians to the cosine of the radius. + float cosRadius = 0.0f; + }; + + struct LightData + { + // Array of distant lights, only first distantLightCount are used. + DistantLight distantLights[4]; + + // Number of active distant lights. + int distantLightCount = 0; + + // Explicitly pad struct to 16-byte boundary. + int pad[3]; + }; + + struct FrameData + { + // The view-projection matrix. + float4x4 cameraViewProj; + + // The inverse view matrix, also transposed. The *rows* must have the desired vectors: + // right, up, front, and eye position. HLSL array access with [] returns rows, not columns, + // hence the need for the matrix to be supplied transposed. + float4x4 cameraInvView; + + // The dimensions of the view (in world units) at a distance of 1.0 from the camera, which + // is useful to build ray directions. + float2 viewSize; + + // Whether the camera is using an orthographic projection. Otherwise a perspective + // projection is assumed. + int isOrthoProjection; + + // The distance from the camera for sharpest focus, for depth of field. + float focalDistance; + + // The diameter of the lens for depth of field. If this is zero, there is no depth of field, + // i.e. pinhole camera. + float lensRadius; + + // The size of the scene, specifically the maximum distance between any two points in the + // scene. + float sceneSize; + + // Whether shadow evaluation should treat all objects as opaque, as a performance + // optimization. + int isOpaqueShadowsEnabled; + + // Whether to write the NDC depth result to an output texture. + int isDepthNDCEnabled; + + // Whether to render the diffuse material component only. + int isDiffuseOnlyEnabled; + + // Whether to display shading errors as bright colored samples. + int isDisplayErrorsEnabled; + + // Whether denoising is enabled, which affects how path tracing is performed. + int isDenoisingEnabled; + + // Whether to write the AOV data required for denoising. + int isDenoisingAOVsEnabled; + + // The maximum recursion level (or path length) when tracing rays. + int traceDepth; + + // The maximum luminance for path tracing samples, for simple firefly clamping. + float maxLuminance; + + // Pad to 16 byte boundary. + float2 _padding1; + + // Current light data for scene (duplicated each frame in flight.) + LightData lights; + + // frameIndex + int frameIndex; + }; + + // Sample settings GPU data. + struct SampleData + { + // The sample index (iteration) for the frame, for progressive rendering. + uint sampleIndex; + + // An offset to apply to the sample index for seeding a random number generator. + uint seedOffset; + }; + + struct EnvironmentData + { + packed_float3 lightTop; + float _padding1; + packed_float3 lightBottom; + float lightTexLuminanceIntegral; + float4x4 lightTransform; + float4x4 lightTransformInv; + packed_float3 backgroundTop; + float _padding3; + packed_float3 backgroundBottom; + float _padding4; + float4x4 backgroundTransform; + int backgroundUseScreen; + int hasLightTex; + int hasBackgroundTex; + }; diff --git a/Libraries/Aurora/Source/HGI/MetalShaders/ray_gen.metal b/Libraries/Aurora/Source/HGI/MetalShaders/ray_gen.metal new file mode 100644 index 0000000..b2e198b --- /dev/null +++ b/Libraries/Aurora/Source/HGI/MetalShaders/ray_gen.metal @@ -0,0 +1,336 @@ + +// HgiMetalArgumentIndexConstants = 27, +// HgiMetalArgumentIndexSamplers = 28, +// HgiMetalArgumentIndexTextures = 29, +// HgiMetalArgumentIndexBuffers = 30, + +struct Uniforms { + unsigned int width, height, frameIndex; +}; + +struct Textures { + texture2d tex_0; + texture2d tex_1; + texture2d tex_2; + texture2d tex_3; + texture2d tex_4; + texture2d tex_5; + texture2d tex_6; + texture2d tex_7; + texture2d tex_8; + texture2d tex_9; +}; + +struct Samplers { + sampler smp_0; +}; + +struct Buffers { + device void* buf_0; + device void* buf_1; + constant FrameData* frameData; + device void* buf_3; + constant SampleData* sampleData; + constant EnvironmentData* environmentData; + device void* buf_6; +//" constant MTLAccelerationStructureInstanceDescriptor *instances; +}; + +template +inline T interpolateVertexAttribute(thread T* attributes, float2 uv) { + const T T0 = attributes[0]; + const T T1 = attributes[1]; + const T T2 = attributes[2]; + return (1.f - uv.x - uv.y) * T0 + uv.x * T1 + uv.y * T2; +} + +enum TriangleFlags { + TRIANGLE_FLAGS_EMISSION = 0x1, +}; + +struct Triangle { + float3 normals[3]; + float4 diffuse; + float smoothness; + float emissiveStrength; + uint32_t flags; +}; + +/////////////////////////////////// +// FROM Globals.slang +/////////////////////////////////// + +// Math constants. +#define M_PI 3.1415926535897932384626433832795f +#define M_PI_INV 1.0 / 3.1415926535897932384626433832795 +#define M_FLOAT_EPS 0.000001f +#define M_RAY_TMIN 0.01f + +/////////////////////////////////// +// FROM Random.slang +/////////////////////////////////// + +// State used for random number generation (RNG). +struct Random +{ + uint2 state; +}; + +// Initializes a random number generator for PCG2D. +Random pcg2DInit(uint sampleIndex, uint2 screenSize, uint2 screenCoords) +{ + Random rng; + + // Initialize the state based on the pixel location and sample index, to prevent correlation + // across space and time. + // NOTE: Unlike LCG, PCG2D does behave well with consecutive seeds, so the seed does not need to + // be scrambled. See https://www.reedbeta.com/blog/hash-functions-for-gpu-rendering. + rng.state.x = screenCoords.y * screenSize.x + screenCoords.x; + rng.state.y = sampleIndex; + + return rng; +} + + +// Generates two random 32-bit integers from seed values, using a two-dimensional permuted +// congruential generator (PCG). +// NOTE: Based on "Hash Functions for GPU Rendering" @ http://www.jcgt.org/published/0009/03/02. +uint2 pcg2D(thread uint2& state) +{ + // Retain the current state, and advance to the next state with a simple LCG. + uint2 v = state; + state = state * 1664525u + 1013904223u; + + // Apply the PCG2D transformation to the current state to produce the result pair of values. + v.x += v.y * 1664525u; + v.y += v.x * 1664525u; + v = v ^ (v >> 16u); + v.x += v.y * 1664525u; + v.y += v.x * 1664525u; + v = v ^ (v >> 16u); + + return v; +} + +// Computes the next PCG2D value pair, updating the specified RNG. +float2 pcg2DNext2D(thread Random& rng) +{ + rng.state = pcg2D(rng.state); + + // Produce floating-point numbers in the range [0.0, 1.0). + return float2(float2(rng.state) / float2(0xFFFFFFFFu)); +} + +// Generates two uniformly distributed numbers in the range [0.0, 1.0), using the specified random +// number generator. +// NOTE: The two numbers may be correlated to provide an even distribution across the 2D range, +// which is why this is a single 2D function instead of two calls to a 1D function. +float2 random2D(thread Random& rng) +{ + return pcg2DNext2D(rng); +} + +/////////////////////////////////// +// FROM Sampling.slang +/////////////////////////////////// + +// Generates a uniformly distributed random direction. +float3 sampleUniformDirection(float2 random, thread float& pdf) { + // Create a point on the unit sphere, from the uniform random variables. Since this is a unit + // sphere, this can also be used as a direction. + // NOTE: See "Ray Tracing Gems" section 16.5 for details. + float cosTheta = 1.0f - 2.0f * random[1]; + float sinTheta = sqrt(1.0f - cosTheta * cosTheta); + float phi = 2.0f * M_PI * random[0]; + float3 direction = float3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta); + + // The PDF is uniform, at one over the area, i.e. the total solid angle of 4*Pi. + pdf = 0.25f * M_PI_INV; + + return direction; +} + +// Generates a random direction in the cosine-weighted hemisphere above the specified normal. This +// provides a PDF value ("probability density function") which is the *relative* probability that +// the returned direction will be chosen. +float3 sampleHemisphere(float2 random, float3 normal, thread float& pdf) { + // Uniformly sample a direction, i.e. over a sphere. + float3 direction = sampleUniformDirection(random, pdf); + + // To transform that into a sample from a cosine-weighted hemisphere over the normal, treat the + // sphere as tangent to the surface: add the normal to the direction and normalize it. The PDF + // is cos(theta) / PI, so use a dot product to compute cos(theta). + // NOTE: See "Ray Tracing in One Weekend" for details. + direction = normalize(normal + direction); + pdf = dot(normal, direction) * M_PI_INV; + + return direction; +} + +/////////////////////////////////// +// FROM RayTrace.slang +/////////////////////////////////// + +void computeCameraRay(float2 screenCoords, float2 screenSize, float4x4 invView, float2 viewSize, + bool isOrtho, float focalDistance, float lensRadius, thread Random& randState, thread float3& origin, + thread float3& direction) +{ + // Apply a random offset to the screen coordinates, for antialiasing. Convert the screen + // coordinates to normalized device coordinates (NDC), i.e. the range [-1, 1] in X and Y. Also + // flip the Y component, so that +Y is up. + + screenCoords += random2D(randState); + float2 ndc = (screenCoords / screenSize) * 2.f - 1.f; + ndc.y = -ndc.y; + + // Get the world-space orientation vectors from the inverse view matrix. + float3 right = invView[0].xyz; // right: row 0 + float3 up = invView[1].xyz; // up: row 1 + float3 front = -invView[2].xyz; // front: row 2, negated for RH coordinates + + // Build a world-space offset on the view plane, based on the view size and the right and up + // vectors. + float2 size = viewSize * 0.5f; + float3 offsetViewPlane = size.x * ndc.x * right + size.y * ndc.y * up; + + // Compute the ray origin and direction: + // - Direction: For orthographic projection, this is just the front direction (i.e. all rays are + // parallel). For perspective, it is the normalized combination of the front direction and the + // view plane offset. + // - Origin: For orthographic projection, this is the eye position (row 3 of the view matrix), + // translated by the view plane offset. For perspective, it is just the eye position. + // + // NOTE: It is common to \"unproject\" a NDC point using the view-projection matrix, and subtract + // that from the eye position to get a direction. However, this is numerically unstable when the + // eye position has very large coordinates and the projection matrix has small (nearby) clipping + // distances. Clipping is not relevant for ray tracing anyway. + if (isOrtho) { + direction = front; + origin = invView[3].xyz + offsetViewPlane; + } + else { + direction = normalize(front + offsetViewPlane); + origin = invView[3].xyz; + } + + // Adjust the ray origin and direction if depth of field is enabled. The ray must pass through + // the focal point (along the original direction, at the focal distance), with an origin that + // is offset on the lens, represented as a disk. +//" if (lensRadius > 0.0f) +//" { +//" float3 focalPoint = origin + direction * focalDistance; +//" float2 originOffset = sampleDisk(random2D(rng), lensRadius); +//" origin = origin + originOffset.x * right + originOffset.y * up; +//" direction = normalize(focalPoint - origin); +//" } +} + +inline float3 interpolateSkyColor(float3 ray) { + float t = mix(ray.y, 1.0f, 0.5f); + return mix(float3(1.0f, 1.0f, 1.0f), float3(0.45f, 0.65f, 1.0f), t); +} + +float4 tracePath(thread Random& randState, float3 rayOrigin, float3 rayDirection, int depth, instance_acceleration_structure accelerationStructure, intersection_function_table intersectionFunctionTable) { + + float3 incomingLight = float3(0.f, 0.f, 0.f); + float3 rayColour = float3(1.f, 1.f, 1.f); + + bool continuePath; + do { + continuePath = false; + + ray ray; + ray.origin = rayOrigin; + ray.direction = rayDirection; + ray.min_distance = 0.001f; + ray.max_distance = 1000.f; + + intersector> i; + i.accept_any_intersection(false); + i.assume_geometry_type(geometry_type::triangle); + i.force_opacity(forced_opacity::opaque); + typename intersector>::result_type intersection; + intersection = i.intersect(ray, accelerationStructure, 2); + + if(intersection.type == intersection_type::none) { + float3 skyColour = interpolateSkyColor(ray.direction);//float3(0.95f, 0.95f, 0.95f); + incomingLight += skyColour * rayColour; + } + else { + Triangle triangle = *(const device Triangle*)intersection.primitive_data; + float2 barycentricCoords = intersection.triangle_barycentric_coord; + float3 normal = interpolateVertexAttribute(triangle.normals, barycentricCoords); + continuePath = true; + + float smoothness = triangle.smoothness; + float emissiveStrength = triangle.emissiveStrength; + float3 materialColour = triangle.diffuse.xyz; + if(triangle.flags & TRIANGLE_FLAGS_EMISSION) { + rayColour = materialColour = float3(1.f, 1.f, 1.f); + continuePath = false; + } + + rayOrigin = rayOrigin + (intersection.distance * rayDirection); + float pdf = 1.f; + float3 diffuseDirection = sampleHemisphere(random2D(randState), normal, pdf); + float3 specularDirection = reflect(rayDirection, normal); + rayDirection = mix(diffuseDirection, specularDirection, smoothness); + float3 emittedLight = materialColour * emissiveStrength; + incomingLight += emittedLight * rayColour; + rayColour *= materialColour; + + depth--; + } + + } while(depth > 0 && continuePath); + + return float4(incomingLight, 1.f); +} + +kernel void RayGenShader( + uint2 tid [[thread_position_in_grid]], + instance_acceleration_structure accelerationStructure [[buffer(0)]], + constant Uniforms& uniformBuf [[buffer(27)]], + constant Samplers& samplerBuf [[buffer(28)]], + constant Textures& textureBuf [[buffer(29)]], + constant Buffers& bufferBuf [[buffer(30)]], + intersection_function_table intersectionFunctionTable [[buffer(5)]], + visible_function_table hitTable [[buffer(6)]], + visible_function_table missTable [[buffer(7)]] +) +{ + texture2d dstTex = textureBuf.tex_1; + texture2d accumulationTex = textureBuf.tex_9; + constant Uniforms& uniforms = uniformBuf; + +// if (tid.x < uniforms.width && tid.y < uniforms.height) + { + constant FrameData& gFrameData = *bufferBuf.frameData; + + uint2 screenSize = uint2(dstTex.get_width(), dstTex.get_height()); + uint2 screenCoords = tid.xy; + + // init rand + Random randState = pcg2DInit(gFrameData.frameIndex, screenSize, screenCoords); + + // primary ray direction + float3 origin, dir; + computeCameraRay(float2(screenCoords), float2(screenSize), gFrameData.cameraInvView, gFrameData.viewSize, + gFrameData.isOrthoProjection, gFrameData.focalDistance, gFrameData.lensRadius, randState, origin, + dir); + + // path trace + float4 accumulatedColour = tracePath(randState, origin, dir, gFrameData.traceDepth, accelerationStructure, intersectionFunctionTable); + + // accumulate + if(gFrameData.frameIndex > 0) { + float4 prevColour = accumulationTex.read(tid); + prevColour *= gFrameData.frameIndex; + + accumulatedColour += prevColour; + accumulatedColour /= (gFrameData.frameIndex + 1); + } + + dstTex.write(accumulatedColour, tid); + } +} diff --git a/Libraries/Aurora/Source/HGI/Shaders/Accumulation.glsl b/Libraries/Aurora/Source/HGI/Shaders/Accumulation.glsl index d31d77e..346f7bd 100644 --- a/Libraries/Aurora/Source/HGI/Shaders/Accumulation.glsl +++ b/Libraries/Aurora/Source/HGI/Shaders/Accumulation.glsl @@ -1,10 +1,10 @@ // Sample data UBO. // NOTE should be passed as push constants, but this is currently broken in HGI. -layout(binding = 3) layout(std140) uniform SampleData -{ - int sampleIndex; - int seedOffset; -} gSampleData; +//layout(binding = 3) layout(std140) uniform SampleData +//{ +// int sampleIndex; +// int seedOffset; +//} gSampleData; // Get texture UV from input coordinate. vec2 GetTexCoords(ivec2 outCoords) @@ -24,13 +24,13 @@ void main(void) vec3 direct = result.rgb; // For all samples except the first, combine direct light texture with previous frame. - if (gSampleData.sampleIndex > 0) + if (gSampleData_sampleIndex > 0) { // Get result for previous frame. vec4 prevResult = HgiTextureLod_accumulationTexture(texCoords, 0.0); // Blend between the previous result based on sample index. - float t = 1.0 / (gSampleData.sampleIndex + 1); + float t = 1.0 / (gSampleData_sampleIndex + 1); result = mix(prevResult, result, t); } diff --git a/Libraries/Aurora/Source/HGI/Shaders/InstanceData.glsl b/Libraries/Aurora/Source/HGI/Shaders/InstanceData.glsl index 08136b8..c4fb134 100644 --- a/Libraries/Aurora/Source/HGI/Shaders/InstanceData.glsl +++ b/Libraries/Aurora/Source/HGI/Shaders/InstanceData.glsl @@ -42,6 +42,8 @@ layout(shaderRecordEXT, std430) buffer InstanceShaderRecord uint hasNormals; uint hasTangents; uint hasTexCoords; + uint isOpaque; + int instanceBufferOffset; } instance; @@ -89,33 +91,43 @@ bool instanceHasTexCoords_0() { return instance.hasTexCoords!=0; } +// Implementation for forward declared geometry accessor function in PathTracingCommon.slang. +bool instanceIsOpaque_0() { + return instance.isOpaque!=0; +} + +// Implementation for forward declared geometry accessor function in PathTracingCommon.slang. +int getInstanceBufferOffset_0() { + return instance.instanceBufferOffset; +} + // Implementation for forward declared material accessor function in Material.hlsli. MaterialConstants_0 getMaterial_0() { return instance.material.m[0]; } // Implementation for forward declared texture sample function in Material.hlsli. -vec4 sampleBaseColorTexture_0(vec2 uv, float level) { +vec4 sampleBaseColorTexture_0(int /*mtlOffset*/, vec2 uv, float level) { return texture(textureSamplers[nonuniformEXT(instance.baseColorTextureIndex)], uv); } // Implementation for forward declared texture sample function in Material.hlsli. -vec4 sampleSpecularRoughnessTexture_0(vec2 uv, float level) { +vec4 sampleSpecularRoughnessTexture_0(int /*mtlOffset*/, vec2 uv, float level) { return texture(textureSamplers[nonuniformEXT(instance.specularRoughnessTextureIndex)], uv); } // Implementation for forward declared texture sample function in Material.hlsli. -vec4 sampleEmissionColorTexture_0(vec2 uv, float level) { +vec4 sampleEmissionColorTexture_0(int /*mtlOffset*/, vec2 uv, float level) { // TODO: Implement emission color in HGI backend. return vec4(0,0,0,0); } // Implementation for forward declared texture sample function in Material.hlsli. -vec4 sampleNormalTexture_0(vec2 uv, float level) { +vec4 sampleNormalTexture_0(int /*mtlOffset*/, vec2 uv, float level) { return texture(textureSamplers[nonuniformEXT(instance.normalTextureIndex)], uv); } // Implementation for forward declared texture sample function in Material.hlsli. -vec4 sampleOpacityTexture_0(vec2 uv, float level) { +vec4 sampleOpacityTexture_0(int /*mtlOffset*/, vec2 uv, float level) { return texture(textureSamplers[nonuniformEXT(instance.opacityTextureIndex)], uv); } \ No newline at end of file diff --git a/Libraries/Aurora/Source/HGI/Shaders/PostProcessing.glsl b/Libraries/Aurora/Source/HGI/Shaders/PostProcessing.glsl index 3aa82f1..4f20f3c 100644 --- a/Libraries/Aurora/Source/HGI/Shaders/PostProcessing.glsl +++ b/Libraries/Aurora/Source/HGI/Shaders/PostProcessing.glsl @@ -1,15 +1,15 @@ // Post processing data UBO. // NOTE should be passed as push constants, but this is currently broken in HGI. -layout(binding = 3) layout(std140) uniform PostProcesssing -{ - vec3 brightness; - int debugMode; - vec2 range; - bool isDenoisingEnabled; - bool isToneMappingEnabled; - bool isGammaCorrectionEnabled; - bool isAlphaEnabled; -} gSettings; +//layout(binding = 3) layout(std140) uniform PostProcesssing +//{ +// vec3 brightness; +// int debugMode; +// vec2 range; +// bool isDenoisingEnabled; +// bool isToneMappingEnabled; +// bool isGammaCorrectionEnabled; +// bool isAlphaEnabled; +//} gSettings; // Get texture UV from input coordinate. vec2 GetTexCoords(ivec2 outCoords) @@ -51,18 +51,19 @@ void main(void) vec2 texCoords = GetTexCoords(outCoords); vec3 color = HgiTextureLod_accumulationTexture(texCoords, 0.0).rgb; - // Apply brightness. - color *= gSettings.brightness; + +// // Apply brightness. +// color *= gSettings_brightness; // Apply ACES tone mapping or simple saturation. - if (gSettings.isToneMappingEnabled) + if (gSettings_isToneMappingEnabled) { color = toneMapACES(color); } // Apply gamma correction. // NOTE: Gamma correction must be performed here as UAV textures don't support sRGB write. - if (gSettings.isGammaCorrectionEnabled) + if (gSettings_isGammaCorrectionEnabled) { color = linearTosRGB(clamp(color,0.0,1.0)); } diff --git a/Libraries/Aurora/Source/MaterialBase.cpp b/Libraries/Aurora/Source/MaterialBase.cpp index 8ca910a..c9d51e4 100644 --- a/Libraries/Aurora/Source/MaterialBase.cpp +++ b/Libraries/Aurora/Source/MaterialBase.cpp @@ -171,10 +171,10 @@ MaterialDefaultValues MaterialBase::StandardSurfaceDefaults( MaterialBase::MaterialBase( const string& name, MaterialShaderPtr pShader, MaterialDefinitionPtr pDef) : - _textures(pDef->defaults().textureNames), _pDef(pDef), _pShader(pShader), _uniformBuffer(pDef->defaults().propertyDefinitions, pDef->defaults().properties), + _textures(pDef->defaults().textureNames), _name(name) { diff --git a/Libraries/Aurora/Source/MaterialBase.h b/Libraries/Aurora/Source/MaterialBase.h index ec4a9d9..a3420fb 100644 --- a/Libraries/Aurora/Source/MaterialBase.h +++ b/Libraries/Aurora/Source/MaterialBase.h @@ -31,7 +31,7 @@ class TextureProperties TextureProperties(const vector& names) { - for (int i = 0; i < names.size(); i++) + for (size_t i = 0; i < names.size(); i++) { auto& name = names[i]; _textureNameLookup[name.image] = int(_properties.size()); diff --git a/Libraries/Aurora/Source/MaterialDefinition.cpp b/Libraries/Aurora/Source/MaterialDefinition.cpp index cb4c509..438bb82 100644 --- a/Libraries/Aurora/Source/MaterialDefinition.cpp +++ b/Libraries/Aurora/Source/MaterialDefinition.cpp @@ -19,7 +19,7 @@ MaterialDefaultValues::MaterialDefaultValues(const UniformBufferDefinition& prop { AU_ASSERT( defaultProps.size() == propertyDefs.size(), "Default properties do not match definition"); - for (int i = 0; i < defaultTxt.size(); i++) + for (size_t i = 0; i < defaultTxt.size(); i++) { textureNames.push_back(defaultTxt[i].name); } diff --git a/Libraries/Aurora/Source/MaterialShader.cpp b/Libraries/Aurora/Source/MaterialShader.cpp index 188a06e..a601fa5 100644 --- a/Libraries/Aurora/Source/MaterialShader.cpp +++ b/Libraries/Aurora/Source/MaterialShader.cpp @@ -15,13 +15,13 @@ BEGIN_AURORA MaterialShader::MaterialShader(MaterialShaderLibrary* pShaderLibrary, int libraryIndex, const MaterialShaderDefinition& def, const vector entryPoints) : + _entryPointsTypes(entryPoints), _pShaderLibrary(pShaderLibrary), _libraryIndex(libraryIndex), - _entryPointsTypes(entryPoints), _def(def) { // Initialize ref. counts to zero. - for (int i = 0; i < entryPoints.size(); i++) + for (size_t i = 0; i < entryPoints.size(); i++) { _entryPointNameLookup[entryPoints[i]] = i; _entryPoints.push_back({ entryPoints[i], 0 }); @@ -251,7 +251,7 @@ bool MaterialShaderLibrary::update(CompileShader compileFunction, DestroyShader void MaterialShaderLibrary::forceRebuildAll() { // Add all active shaders to compilation pending list. - for (int i = 0; i < _shaderState.size(); i++) + for (size_t i = 0; i < _shaderState.size(); i++) { MaterialShaderPtr pShader = _shaderState[i].first.lock(); if (pShader) diff --git a/Libraries/Aurora/Source/MaterialShader.h b/Libraries/Aurora/Source/MaterialShader.h index 5137bb4..80cd5b1 100644 --- a/Libraries/Aurora/Source/MaterialShader.h +++ b/Libraries/Aurora/Source/MaterialShader.h @@ -17,6 +17,8 @@ #include "Properties.h" #include "UniformBuffer.h" +#include + BEGIN_AURORA class MaterialShader; @@ -28,7 +30,7 @@ struct MaterialShaderSource { MaterialShaderSource(const string& id = "", const string& setupSource = "", const string& definitionsSource = "", const string& bsdfSource = "") : - uniqueId(id), setup(setupSource), definitions(definitionsSource), bsdf(bsdfSource) + uniqueId(id), setup(setupSource), bsdf(bsdfSource), definitions(definitionsSource) { } @@ -194,7 +196,7 @@ class MaterialShader bool isValid() { return _pShaderLibrary != nullptr; } vector _entryPoints; - map _entryPointNameLookup; + map _entryPointNameLookup; vector _entryPointsTypes; // The shader library this type is part of. diff --git a/Libraries/Aurora/Source/MaterialX/BSDFCodeGenerator.cpp b/Libraries/Aurora/Source/MaterialX/BSDFCodeGenerator.cpp index dd7de40..9dfb741 100644 --- a/Libraries/Aurora/Source/MaterialX/BSDFCodeGenerator.cpp +++ b/Libraries/Aurora/Source/MaterialX/BSDFCodeGenerator.cpp @@ -518,7 +518,7 @@ void BSDFCodeGenerator::processInput(MaterialX::ShaderInput* input, " \n"); vector outputVars; - for (int i = 0; i < inputs.size(); i++) + for (size_t i = 0; i < inputs.size(); i++) { // Get the input name and connection name it is coming from.. auto nodeInput = inputs[i]; @@ -536,7 +536,7 @@ void BSDFCodeGenerator::processInput(MaterialX::ShaderInput* input, } // Recursively process inputs. - for (int i = 0; i < inputs.size(); i++) + for (size_t i = 0; i < inputs.size(); i++) { auto nodeInput = inputs[i]; processInput(nodeInput, pBSDFGenShader, outputVars[i], pSourceOut); @@ -643,7 +643,7 @@ int BSDFCodeGenerator::generateDefinitions(string* pResultOut) { // Combine the GLSL code stored in the definitions vector. *pResultOut = ""; - for (int i = 0; i < _definitions.size(); i++) + for (size_t i = 0; i < _definitions.size(); i++) { pResultOut->append(_definitions[i]); } @@ -1020,7 +1020,13 @@ bool BSDFCodeGenerator::generate(const string& document, BSDFCodeGenerator::Resu // https://github.com/AcademySoftwareFoundation/MaterialX/commit/f49359877ea41e7fc8ced47d3334e1d608b35a1a #pragma warning(push) #pragma warning(disable : 4996) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" MaterialX::findRenderableMaterialNodes(mtlxDocument, elements, false, processedOutputs); +#pragma GCC diagnostic pop +#pragma clang diagnostic pop #pragma warning(pop) // Return false if no renderable nodes. @@ -1045,7 +1051,7 @@ bool BSDFCodeGenerator::generate(const string& document, BSDFCodeGenerator::Resu // Find the material node using name from element. MaterialX::NodePtr materialNode = nullptr; - for (int i = 0; i < materialNodes.size(); i++) + for (size_t i = 0; i < materialNodes.size(); i++) { if (materialNodes[i]->getName() == materialNodeName) { @@ -1152,7 +1158,7 @@ bool BSDFCodeGenerator::generate(const string& document, BSDFCodeGenerator::Resu // Build the body of the setup function from the surface shader node inputs. string functionBody = ""; auto surfaceShaderInputs = surfaceShaderNode->getInputs(); - for (int ssi = 0; ssi < surfaceShaderInputs.size(); ssi++) + for (size_t ssi = 0; ssi < surfaceShaderInputs.size(); ssi++) { // Is this shader input one of the outputs we are interested in ? auto surfaceShaderInput = surfaceShaderInputs[ssi]; @@ -1182,14 +1188,14 @@ bool BSDFCodeGenerator::generate(const string& document, BSDFCodeGenerator::Resu // Set the texture names in the result. pResultOut->textures.clear(); - for (int i = 0; i < pResultOut->textureDefaults.size(); i++) + for (size_t i = 0; i < pResultOut->textureDefaults.size(); i++) { pResultOut->textures.push_back(pResultOut->textureDefaults[i].name); } // Create the contents of the material struct. string structProperties; - for (int i = 0; i < pResultOut->materialProperties.size(); i++) + for (size_t i = 0; i < pResultOut->materialProperties.size(); i++) { string glslType = getGLSLStringFromType(pResultOut->materialProperties[i].type); @@ -1224,13 +1230,13 @@ bool BSDFCodeGenerator::generate(const string& document, BSDFCodeGenerator::Resu pResultOut->materialSetupCode = "void " + pResultOut->setupFunctionName + "(\n"; // Keep track of total input and output parameter count. - int numParams = 0; + [[maybe_unused]] int numParams = 0; // The first argument is always the material struct. pResultOut->materialSetupCode.append("\t" + pResultOut->materialStructName + " material"); // Add the texture inputs to the function prototype. - for (int i = 0; i < _textures.size(); i++) + for (size_t i = 0; i < _textures.size(); i++) { pResultOut->materialSetupCode.append(",\n"); diff --git a/Libraries/Aurora/Source/MaterialX/MaterialGenerator.cpp b/Libraries/Aurora/Source/MaterialX/MaterialGenerator.cpp index a7d0db3..be70ebd 100644 --- a/Libraries/Aurora/Source/MaterialX/MaterialGenerator.cpp +++ b/Libraries/Aurora/Source/MaterialX/MaterialGenerator.cpp @@ -162,14 +162,14 @@ shared_ptr MaterialGenerator::generate(const string& documen // Create set of the generated BSDF inputs. set bsdfInputs; - for (int i = 0; i < res.bsdfInputs.size(); i++) + for (size_t i = 0; i < res.bsdfInputs.size(); i++) { bsdfInputs.insert(res.bsdfInputs[i].name); } // Create set of the textures used by the generated setup function. - map textures; - for (int i = 0; i < res.textures.size(); i++) + map textures; + for (size_t i = 0; i < res.textures.size(); i++) { textures[res.textures[i].image] = i; } @@ -212,7 +212,7 @@ shared_ptr MaterialGenerator::generate(const string& documen // Create sampler structs for each of the textures in the materialX material. vector samplerNames; - for (int i = 0; i < res.textureDefaults.size(); i++) + for (size_t i = 0; i < res.textureDefaults.size(); i++) { string samplerName = "sampler" + to_string(i); // Create sampler from Nth texture and sampler. @@ -229,7 +229,7 @@ shared_ptr MaterialGenerator::generate(const string& documen generatedMtlxSetupFunction += "\t" + res.materialStructName + " setupMaterialStruct;\n"; // Fill struct using the byte address buffer accessors. - for (int i = 0; i < res.materialProperties.size(); i++) + for (size_t i = 0; i < res.materialProperties.size(); i++) { generatedMtlxSetupFunction += "\tsetupMaterialStruct." + res.materialProperties[i].variableName + " = " + res.materialStructName + "_" + @@ -244,7 +244,7 @@ shared_ptr MaterialGenerator::generate(const string& documen generatedMtlxSetupFunction += "setupMaterialStruct"; // Add code for all the texture arguments. - for (int i = 0; i < samplerNames.size(); i++) + for (size_t i = 0; i < samplerNames.size(); i++) { // Add texture name. generatedMtlxSetupFunction += ",\n"; @@ -264,7 +264,7 @@ shared_ptr MaterialGenerator::generate(const string& documen } // Add the BSDF inputs that will be output from setup function. - for (int i = 0; i < res.bsdfInputs.size(); i++) + for (size_t i = 0; i < res.bsdfInputs.size(); i++) { generatedMtlxSetupFunction += ",\n"; if (res.bsdfInputs[i].name.compare("normal") == 0) diff --git a/Libraries/Aurora/Source/RendererBase.cpp b/Libraries/Aurora/Source/RendererBase.cpp index 34ce79c..a974cf9 100644 --- a/Libraries/Aurora/Source/RendererBase.cpp +++ b/Libraries/Aurora/Source/RendererBase.cpp @@ -86,6 +86,10 @@ void RendererBase::setCamera( _lensRadius = lensRadius; } +void RendererBase::setFrameIndex(int frameIndex) { + _frameIndex = frameIndex; +} + // Note that this handles strings differently than the implementation in SceneBase. void RendererBase::propertiesToValues(const Properties& properties, IValues& values) { @@ -151,6 +155,7 @@ bool RendererBase::updateFrameDataGPUStruct(FrameData* pStaging) frameData.isOrthoProjection = _cameraProj[3][3] == 1.0f; frameData.focalDistance = _focalDistance; frameData.lensRadius = _lensRadius; + frameData.frameIndex = _frameIndex++; // Get the scene size, specifically the maximum distance between any two points in the scene. // This is computed as the distance between the min / max corners of the bounding box. @@ -227,7 +232,7 @@ bool RendererBase::updateAccumulationGPUStruct(uint32_t sampleIndex, Accumulatio settings.isDenoisingEnabled = _values.asBoolean(kLabelIsDenoisingEnabled) ? 1 : 0; // If there are no changes compared local CPU copy, then do nothing and return false. - if (memcmp(&_accumData, &settings, sizeof(PostProcessing)) == 0) + if (memcmp(&_accumData, &settings, sizeof(Accumulation)) == 0) return false; // No changes. // Update local CPU copy. diff --git a/Libraries/Aurora/Source/RendererBase.h b/Libraries/Aurora/Source/RendererBase.h index c44b879..262dd5a 100644 --- a/Libraries/Aurora/Source/RendererBase.h +++ b/Libraries/Aurora/Source/RendererBase.h @@ -74,6 +74,7 @@ class RendererBase : public IRenderer, public FixedValues float lensRadius = 0.0f) override; void setCamera( const float* view, const float* proj, float focalDistance, float lensRadius) override; + void setFrameIndex(int frameIndex) override; /*** Functions ***/ @@ -115,49 +116,52 @@ class RendererBase : public IRenderer, public FixedValues // Whether the camera is using an orthographic projection. Otherwise a perspective // projection is assumed. - int isOrthoProjection; + int isOrthoProjection = 0; // The distance from the camera for sharpest focus, for depth of field. - float focalDistance; + float focalDistance = 0.f; // The diameter of the lens for depth of field. If this is zero, there is no depth of field, // i.e. pinhole camera. - float lensRadius; + float lensRadius = 0.f; // The size of the scene, specifically the maximum distance between any two points in the // scene. - float sceneSize; + float sceneSize = 0.f; // Whether shadow evaluation should treat all objects as opaque, as a performance // optimization. - int isForceOpaqueShadowsEnabled; + int isForceOpaqueShadowsEnabled = 0; // Whether to write the NDC depth result to an output texture. - int isDepthNDCEnabled; + int isDepthNDCEnabled = 0; // Whether to render the diffuse material component only. - int isDiffuseOnlyEnabled; + int isDiffuseOnlyEnabled = 0; // Whether to display shading errors as bright colored samples. - int isDisplayErrorsEnabled; + int isDisplayErrorsEnabled = 0; // Whether denoising is enabled, which affects how path tracing is performed. - int isDenoisingEnabled; + int isDenoisingEnabled = 0; // Whether to write the AOV data required for denoising. - int isDenoisingAOVsEnabled; + int isDenoisingAOVsEnabled = 0; // The maximum recursion level (or path length) when tracing rays. - int traceDepth; + int traceDepth = 0; // The maximum luminance for path tracing samples, for simple firefly clamping. - float maxLuminance; + float maxLuminance = 0.f; // Pad to 16 byte boundary. vec2 _padding1; // Current light data for scene (duplicated each frame in flight.) SceneBase::LightData lights; + + // frameIndex + int frameIndex; }; // Accumulation settings GPU data. @@ -215,6 +219,7 @@ class RendererBase : public IRenderer, public FixedValues mat4 _cameraProj; float _focalDistance = 1.0f; float _lensRadius = 0.0f; + int _frameIndex = 0; // Asset manager for loading external assets. unique_ptr _pAssetMgr; diff --git a/Libraries/Aurora/Source/SceneBase.cpp b/Libraries/Aurora/Source/SceneBase.cpp index ba72178..23d202c 100644 --- a/Libraries/Aurora/Source/SceneBase.cpp +++ b/Libraries/Aurora/Source/SceneBase.cpp @@ -103,7 +103,7 @@ void SceneBase::createDefaultResources() ImageDescriptor imageDesc; imageDesc.isEnvironment = false; imageDesc.linearize = true; - imageDesc.getData = [this](ImageData& dataOut, AllocateBufferFunction alloc) { + imageDesc.getData = [this](ImageData& dataOut, [[maybe_unused]] AllocateBufferFunction alloc) { dataOut.pPixelBuffer = _defaultImagePixels.data(); dataOut.bufferSize = _defaultImagePixels.size(); dataOut.dimensions = { 2, 2 }; diff --git a/Libraries/Aurora/Source/Shaders/DefaultMaterial.slang b/Libraries/Aurora/Source/Shaders/DefaultMaterial.slang index 66a2723..e6cf8e5 100644 --- a/Libraries/Aurora/Source/Shaders/DefaultMaterial.slang +++ b/Libraries/Aurora/Source/Shaders/DefaultMaterial.slang @@ -64,11 +64,11 @@ float4 sampleOpacityTexture(int mtlOffset, float2 uv, float level) #else // Vulkan GLSL versions are forward declared and implemented in raw GLSL suffix file. MaterialConstants getMaterial(); -float4 sampleBaseColorTexture(float2 uv, float level); -float4 sampleSpecularRoughnessTexture(float2 uv, float level); -float4 sampleEmissionColorTexture(float2 uv, float level); -float4 sampleOpacityTexture(float2 uv, float level); -float4 sampleNormalTexture(float2 uv, float level); +float4 sampleBaseColorTexture(int /*mtlOffset*/, float2 uv, float level); +float4 sampleSpecularRoughnessTexture(int /*mtlOffset*/, float2 uv, float level); +float4 sampleEmissionColorTexture(int /*mtlOffset*/, float2 uv, float level); +float4 sampleOpacityTexture(int /*mtlOffset*/, float2 uv, float level); +float4 sampleNormalTexture(int /*mtlOffset*/, float2 uv, float level); #endif // Normal map spaces definitions. @@ -124,6 +124,9 @@ float3 calculateNormalFromMap(float3 texelValue, int space, float scale, float3 export Material evaluateDefaultMaterial( ShadingData shading, int headerOffset, out float3 materialNormal, out bool isGeneratedNormal) { +#if !DIRECTX + MaterialConstants gGlobalMaterialConstants = getMaterial(); +#endif int offset = headerOffset + kMaterialHeaderSize; // Copy the constant values to the material from the constant buffer. diff --git a/Libraries/Aurora/Source/Shaders/DefaultMaterialUniformBuffer.slang b/Libraries/Aurora/Source/Shaders/DefaultMaterialUniformBuffer.slang index acda477..2d4aa77 100644 --- a/Libraries/Aurora/Source/Shaders/DefaultMaterialUniformBuffer.slang +++ b/Libraries/Aurora/Source/Shaders/DefaultMaterialUniformBuffer.slang @@ -72,230 +72,230 @@ struct MaterialConstants } ; -float Material_base(MaterialConstants mtl) { +float Material_base(MaterialConstants mtl, int /*materialOffset*/) { return mtl.base; } -float3 Material_baseColor(MaterialConstants mtl) { +float3 Material_baseColor(MaterialConstants mtl, int /*materialOffset*/) { return mtl.baseColor; } -float Material_diffuseRoughness(MaterialConstants mtl) { +float Material_diffuseRoughness(MaterialConstants mtl, int /*materialOffset*/) { return mtl.diffuseRoughness; } -float Material_metalness(MaterialConstants mtl) { +float Material_metalness(MaterialConstants mtl, int /*materialOffset*/) { return mtl.metalness; } -float Material_specular(MaterialConstants mtl) { +float Material_specular(MaterialConstants mtl, int /*materialOffset*/) { return mtl.specular; } -float3 Material_specularColor(MaterialConstants mtl) { +float3 Material_specularColor(MaterialConstants mtl, int /*materialOffset*/) { return mtl.specularColor; } -float Material_specularRoughness(MaterialConstants mtl) { +float Material_specularRoughness(MaterialConstants mtl, int /*materialOffset*/) { return mtl.specularRoughness; } -float Material_specularIOR(MaterialConstants mtl) { +float Material_specularIOR(MaterialConstants mtl, int /*materialOffset*/) { return mtl.specularIOR; } -float Material_specularAnisotropy(MaterialConstants mtl) { +float Material_specularAnisotropy(MaterialConstants mtl, int /*materialOffset*/) { return mtl.specularAnisotropy; } -float Material_specularRotation(MaterialConstants mtl) { +float Material_specularRotation(MaterialConstants mtl, int /*materialOffset*/) { return mtl.specularRotation; } -float Material_transmission(MaterialConstants mtl) { +float Material_transmission(MaterialConstants mtl, int /*materialOffset*/) { return mtl.transmission; } -float3 Material_transmissionColor(MaterialConstants mtl) { +float3 Material_transmissionColor(MaterialConstants mtl, int /*materialOffset*/) { return mtl.transmissionColor; } -float Material_subsurface(MaterialConstants mtl) { +float Material_subsurface(MaterialConstants mtl, int /*materialOffset*/) { return mtl.subsurface; } -float3 Material_subsurfaceColor(MaterialConstants mtl) { +float3 Material_subsurfaceColor(MaterialConstants mtl, int /*materialOffset*/) { return mtl.subsurfaceColor; } -float3 Material_subsurfaceRadius(MaterialConstants mtl) { +float3 Material_subsurfaceRadius(MaterialConstants mtl, int /*materialOffset*/) { return mtl.subsurfaceRadius; } -float Material_subsurfaceScale(MaterialConstants mtl) { +float Material_subsurfaceScale(MaterialConstants mtl, int /*materialOffset*/) { return mtl.subsurfaceScale; } -float Material_subsurfaceAnisotropy(MaterialConstants mtl) { +float Material_subsurfaceAnisotropy(MaterialConstants mtl, int /*materialOffset*/) { return mtl.subsurfaceAnisotropy; } -float Material_sheen(MaterialConstants mtl) { +float Material_sheen(MaterialConstants mtl, int /*materialOffset*/) { return mtl.sheen; } -float3 Material_sheenColor(MaterialConstants mtl) { +float3 Material_sheenColor(MaterialConstants mtl, int /*materialOffset*/) { return mtl.sheenColor; } -float Material_sheenRoughness(MaterialConstants mtl) { +float Material_sheenRoughness(MaterialConstants mtl, int /*materialOffset*/) { return mtl.sheenRoughness; } -float Material_coat(MaterialConstants mtl) { +float Material_coat(MaterialConstants mtl, int /*materialOffset*/) { return mtl.coat; } -float3 Material_coatColor(MaterialConstants mtl) { +float3 Material_coatColor(MaterialConstants mtl, int /*materialOffset*/) { return mtl.coatColor; } -float Material_coatRoughness(MaterialConstants mtl) { +float Material_coatRoughness(MaterialConstants mtl, int /*materialOffset*/) { return mtl.coatRoughness; } -float Material_coatAnisotropy(MaterialConstants mtl) { +float Material_coatAnisotropy(MaterialConstants mtl, int /*materialOffset*/) { return mtl.coatAnisotropy; } -float Material_coatRotation(MaterialConstants mtl) { +float Material_coatRotation(MaterialConstants mtl, int /*materialOffset*/) { return mtl.coatRotation; } -float Material_coatIOR(MaterialConstants mtl) { +float Material_coatIOR(MaterialConstants mtl, int /*materialOffset*/) { return mtl.coatIOR; } -float Material_coatAffectColor(MaterialConstants mtl) { +float Material_coatAffectColor(MaterialConstants mtl, int /*materialOffset*/) { return mtl.coatAffectColor; } -float Material_coatAffectRoughness(MaterialConstants mtl) { +float Material_coatAffectRoughness(MaterialConstants mtl, int /*materialOffset*/) { return mtl.coatAffectRoughness; } -float Material_emission(MaterialConstants mtl) { +float Material_emission(MaterialConstants mtl, int /*materialOffset*/) { return mtl.emission; } -float3 Material_emissionColor(MaterialConstants mtl) { +float3 Material_emissionColor(MaterialConstants mtl, int /*materialOffset*/) { return mtl.emissionColor; } -float3 Material_opacity(MaterialConstants mtl) { +float3 Material_opacity(MaterialConstants mtl, int /*materialOffset*/) { return mtl.opacity; } -int Material_thinWalled(MaterialConstants mtl) { +int Material_thinWalled(MaterialConstants mtl, int /*materialOffset*/) { return mtl.thinWalled; } -int Material_hasBaseColorTex(MaterialConstants mtl) { +int Material_hasBaseColorTex(MaterialConstants mtl, int /*materialOffset*/) { return mtl.hasBaseColorTex; } -float2 Material_baseColorTexOffset(MaterialConstants mtl) { +float2 Material_baseColorTexOffset(MaterialConstants mtl, int /*materialOffset*/) { return mtl.baseColorTexOffset; } -float2 Material_baseColorTexScale(MaterialConstants mtl) { +float2 Material_baseColorTexScale(MaterialConstants mtl, int /*materialOffset*/) { return mtl.baseColorTexScale; } -float2 Material_baseColorTexPivot(MaterialConstants mtl) { +float2 Material_baseColorTexPivot(MaterialConstants mtl, int /*materialOffset*/) { return mtl.baseColorTexPivot; } -float Material_baseColorTexRotation(MaterialConstants mtl) { +float Material_baseColorTexRotation(MaterialConstants mtl, int /*materialOffset*/) { return mtl.baseColorTexRotation; } -int Material_hasSpecularRoughnessTex(MaterialConstants mtl) { +int Material_hasSpecularRoughnessTex(MaterialConstants mtl, int /*materialOffset*/) { return mtl.hasSpecularRoughnessTex; } -float2 Material_specularRoughnessTexOffset(MaterialConstants mtl) { +float2 Material_specularRoughnessTexOffset(MaterialConstants mtl, int /*materialOffset*/) { return mtl.specularRoughnessTexOffset; } -float2 Material_specularRoughnessTexScale(MaterialConstants mtl) { +float2 Material_specularRoughnessTexScale(MaterialConstants mtl, int /*materialOffset*/) { return mtl.specularRoughnessTexScale; } -float2 Material_specularRoughnessTexPivot(MaterialConstants mtl) { +float2 Material_specularRoughnessTexPivot(MaterialConstants mtl, int /*materialOffset*/) { return mtl.specularRoughnessTexPivot; } -float Material_specularRoughnessTexRotation(MaterialConstants mtl) { +float Material_specularRoughnessTexRotation(MaterialConstants mtl, int /*materialOffset*/) { return mtl.specularRoughnessTexRotation; } -int Material_hasEmissionColorTex(MaterialConstants mtl) { +int Material_hasEmissionColorTex(MaterialConstants mtl, int /*materialOffset*/) { return mtl.hasEmissionColorTex; } -float2 Material_emissionColorTexOffset(MaterialConstants mtl) { +float2 Material_emissionColorTexOffset(MaterialConstants mtl, int /*materialOffset*/) { return mtl.emissionColorTexOffset; } -float2 Material_emissionColorTexScale(MaterialConstants mtl) { +float2 Material_emissionColorTexScale(MaterialConstants mtl, int /*materialOffset*/) { return mtl.emissionColorTexScale; } -float2 Material_emissionColorTexPivot(MaterialConstants mtl) { +float2 Material_emissionColorTexPivot(MaterialConstants mtl, int /*materialOffset*/) { return mtl.emissionColorTexPivot; } -float Material_emissionColorTexRotation(MaterialConstants mtl) { +float Material_emissionColorTexRotation(MaterialConstants mtl, int /*materialOffset*/) { return mtl.emissionColorTexRotation; } -int Material_hasOpacityTex(MaterialConstants mtl) { +int Material_hasOpacityTex(MaterialConstants mtl, int /*materialOffset*/) { return mtl.hasOpacityTex; } -float2 Material_opacityTexOffset(MaterialConstants mtl) { +float2 Material_opacityTexOffset(MaterialConstants mtl, int /*materialOffset*/) { return mtl.opacityTexOffset; } -float2 Material_opacityTexScale(MaterialConstants mtl) { +float2 Material_opacityTexScale(MaterialConstants mtl, int /*materialOffset*/) { return mtl.opacityTexScale; } -float2 Material_opacityTexPivot(MaterialConstants mtl) { +float2 Material_opacityTexPivot(MaterialConstants mtl, int /*materialOffset*/) { return mtl.opacityTexPivot; } -float Material_opacityTexRotation(MaterialConstants mtl) { +float Material_opacityTexRotation(MaterialConstants mtl, int /*materialOffset*/) { return mtl.opacityTexRotation; } -int Material_hasNormalTex(MaterialConstants mtl) { +int Material_hasNormalTex(MaterialConstants mtl, int /*materialOffset*/) { return mtl.hasNormalTex; } -float2 Material_normalTexOffset(MaterialConstants mtl) { +float2 Material_normalTexOffset(MaterialConstants mtl, int /*materialOffset*/) { return mtl.normalTexOffset; } -float2 Material_normalTexScale(MaterialConstants mtl) { +float2 Material_normalTexScale(MaterialConstants mtl, int /*materialOffset*/) { return mtl.normalTexScale; } -float2 Material_normalTexPivot(MaterialConstants mtl) { +float2 Material_normalTexPivot(MaterialConstants mtl, int /*materialOffset*/) { return mtl.normalTexPivot; } -float Material_normalTexRotation(MaterialConstants mtl) { +float Material_normalTexRotation(MaterialConstants mtl, int /*materialOffset*/) { return mtl.normalTexRotation; } diff --git a/Libraries/Aurora/Source/Shaders/Geometry.slang b/Libraries/Aurora/Source/Shaders/Geometry.slang index 5528d1c..4917eeb 100644 --- a/Libraries/Aurora/Source/Shaders/Geometry.slang +++ b/Libraries/Aurora/Source/Shaders/Geometry.slang @@ -26,6 +26,8 @@ interface IGeometry bool hasTexCoords(); bool hasNormals(); bool hasTangents(); + bool isOpaque(); + int getBufferOffset(); }; diff --git a/Libraries/Aurora/Source/Shaders/GlobalBufferAccessors.slang b/Libraries/Aurora/Source/Shaders/GlobalBufferAccessors.slang index 58b7f6a..e31e484 100644 --- a/Libraries/Aurora/Source/Shaders/GlobalBufferAccessors.slang +++ b/Libraries/Aurora/Source/Shaders/GlobalBufferAccessors.slang @@ -16,27 +16,43 @@ #include "GlobalPipelineState.slang" -// Maxiumum number of textures per-material. -// NOTE: Must match value defined in PTScene.cpp, -#define kMaterialMaxTextures 8 - // Total size of fixed-length material header in bytes. // Material header occurs before each material's properties in the gGlobalMaterialConstants buffer. // NOTE: Must match size of MaterialHeader in PTScene.cpp. #define kMaterialHeaderSize 68 +#if DIRECTX +// Maxiumum number of textures per-material. +// NOTE: Must match value defined in PTScene.cpp, +#define kMaterialMaxTextures 8 + // Total size of fixed-length instance header in bytes. // Instance header occurs before the layer data in the gGlobalInstanceArray buffer. // NOTE: Must match size of InstanceDataHeader in PTScene.cpp. -#define kInstanceDataHeaderSize (2*4) +#define kInstanceDataHeaderSize (2 * 4) // Size of a 3x4 transform matrix, -#define kTransformMatrixSize (12*4) +#define kTransformMatrixSize (12 * 4) + +// Material properties for all scene materials are stored in this ByteAddressBuffer, and accessed with Material_XXX() +// functions, specific to the material type, using the offset included in the instance data for each ray hit. +ByteAddressBuffer gGlobalMaterialConstants : register(t5); + +// Instance properties for all scene instances are stored in this ByteAddressBuffer. This is the instance transform matrix and layer properties, if any. +ByteAddressBuffer gGlobalInstanceBuffer : register(t6); + +// Instance properties for all scene instances are stored in this ByteAddressBuffer. This is the instance transform matrix and layer properties, if any. +ByteAddressBuffer gLayerGeometryBuffer : register(t7); + +// Transform matrices for all the instances. +ByteAddressBuffer gTransformMatrixBuffer : register(t8); + +// Material textures for all the scene materials. Looked up using indices stored in material header. +Texture2D gGlobalMaterialTextures[] : register(t9); // ================================================================================================= // Instance buffer accessor functions // ================================================================================================= - // Get the material offset from instance header. int instanceMaterialBufferOffset(int instanceOffset) { @@ -78,25 +94,40 @@ float2 getLayerUV(int offset, int index) { return asfloat(gLayerGeometryBuffer.Load2(offset + index * 8)); } +#else // DIRECTX +// TODO: Support material layer data for Vulkan/Metal. +int instanceMaterialBufferOffset(int instanceOffset) { return 0; } +int instanceLayerCount(int instanceOffset) { return 0; } +int instanceLayerMaterialBufferOffset(int instanceOffset, int layerIdx) { return 0; } +int instanceLayerUVBufferOffset(int instanceOffset, int layerIdx) { return 0; } +float2 getLayerUV(int offset, int index) { return 0; } + +float3x4 transformMatrixForBLAS(int blasIndex) +{ + return float3x4(1.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0); +} +#endif // DIRECTX float2 computeLayerUV(int instanceOffset, int layerIdx, ShadingData shading) { int uvOffset = instanceLayerUVBufferOffset(instanceOffset, layerIdx); - + float2 uv = 0; for (uint i = 0; i < 3; i++) { uv += shading.barycentrics[i] * getLayerUV(uvOffset, shading.indices[i]); } - + return uv; } - // ================================================================================================= // Common material functions // ================================================================================================= +#if DIRECTX // Get shader index from material header. int materialShaderIndex(int mtlOffset) { @@ -114,6 +145,7 @@ int materialSamplerIndex(int mtlOffset, int textureNo) { return gGlobalMaterialConstants.Load(mtlOffset + 4 * (1 + kMaterialMaxTextures + textureNo)); } + // Get Nth texture using index from material header. Texture2D materialTexture(int mtlOffset, int textureNo) { @@ -141,5 +173,8 @@ float4 sampleTexture(int mtlOffset, int textureNo, float2 uv, float level) SamplerState smp = materialSampler(mtlOffset, textureNo); return txt.SampleLevel(smp, uv, level); } +#else // DIRECTX +int materialShaderIndex(int /*mtlOffset*/) { return 0; } +#endif // DIRECTX #endif // __MATERIALHEADER_H__ diff --git a/Libraries/Aurora/Source/Shaders/GlobalPipelineState.slang b/Libraries/Aurora/Source/Shaders/GlobalPipelineState.slang index 35b6d9b..3ad0bca 100644 --- a/Libraries/Aurora/Source/Shaders/GlobalPipelineState.slang +++ b/Libraries/Aurora/Source/Shaders/GlobalPipelineState.slang @@ -90,23 +90,12 @@ StructuredBuffer gEnvironmentAliasMap : register(t1); ConstantBuffer gGroundPlane : register(b3); RaytracingAccelerationStructure gNullScene : register(t4); -// Material properties for all scene materials are stored in this ByteAddressBuffer, and accessed with Material_XXX() -// functions, specific to the material type, using the offset included in the instance data for each ray hit. -ByteAddressBuffer gGlobalMaterialConstants : register(t5); - -// Instance properties for all scene instances are stored in this ByteAddressBuffer. This is the instance transform matrix and layer properties, if any. -ByteAddressBuffer gGlobalInstanceBuffer : register(t6); - -// Instance properties for all scene instances are stored in this ByteAddressBuffer. This is the instance transform matrix and layer properties, if any. -ByteAddressBuffer gLayerGeometryBuffer : register(t7); - -// Transform matrices for all the instances. -ByteAddressBuffer gTransformMatrixBuffer : register(t8); - -// Material textures for all the scene materials. Looked up using indices stored in material header. -Texture2D gGlobalMaterialTextures[] : register(t9); - +#if DIRECTX // Material textures for all the scene materials. Looked up using indices stored in material header. SamplerState gSamplerArray[] : register(s0); +#else +// The global sampler state, used by default for texture sampling. +[[vk::binding(6)]] SamplerState gDefaultSampler : register(s0); +#endif #endif // PATHTRACINGCOMMON_H diff --git a/Libraries/Aurora/Source/Shaders/GroundPlane.slang b/Libraries/Aurora/Source/Shaders/GroundPlane.slang index c0a3252..92afd01 100644 --- a/Libraries/Aurora/Source/Shaders/GroundPlane.slang +++ b/Libraries/Aurora/Source/Shaders/GroundPlane.slang @@ -20,8 +20,6 @@ #include "RayTrace.slang" #include "GlobalPipelineState.slang" -// TODO: Re-enable ground plane. - // Shades a matte reflection effect with the specified properties. int setupMatteReflectionIndirectLightRay(float opacity, float3 color, float roughness, float3 rayDir, float3 normal, float3 tangent, float3 bitangent, float3 position, uint maxDepth, inout Random rng, out float3 indirectRayDirec, out float3 indirectRayOrigin, out float3 indirectColorOut) diff --git a/Libraries/Aurora/Source/Shaders/InstancePipelineState.slang b/Libraries/Aurora/Source/Shaders/InstancePipelineState.slang index b3bfed1..0101d64 100644 --- a/Libraries/Aurora/Source/Shaders/InstancePipelineState.slang +++ b/Libraries/Aurora/Source/Shaders/InstancePipelineState.slang @@ -32,7 +32,7 @@ ByteAddressBuffer gTexCoords : register(t4, space1); // Must match CPU struct HitGroupShaderRecord in PTScene.cpp. cbuffer gInstanceData : register(b0, space1) { - bool gHasNormals; // Are there normals? + bool gHasNormals; // Are there normals? bool gHasTangents; // Are there tangents? bool gHasTexCoords; // Are there texture coordinates? bool gIsOpaque; // Is the geometry opaque? @@ -69,15 +69,27 @@ bool instanceHasNormals() { return gHasNormals; } + bool instanceHasTangents() { return gHasTangents; } + bool instanceHasTexCoords() { return gHasTexCoords; } +bool instanceIsOpaque() +{ + return gIsOpaque; +} + +int getInstanceBufferOffset() +{ + return gInstanceBufferOffset; +} + #else // Forward declare these functions on Vulkan GLSL. As we need a platform-specific suffix file @@ -90,6 +102,8 @@ float2 getTexCoordForVertex(int bufferLocation); bool instanceHasNormals(); bool instanceHasTangents(); bool instanceHasTexCoords(); +bool instanceIsOpaque(); +int getInstanceBufferOffset(); #endif @@ -104,6 +118,8 @@ struct Geometry : IGeometry bool hasTexCoords() { return instanceHasTexCoords(); } bool hasNormals() { return instanceHasNormals(); } bool hasTangents() { return instanceHasTangents(); } + bool isOpaque() { return instanceIsOpaque(); } + int getBufferOffset() { return getInstanceBufferOffset(); } } gGeometry; #endif diff --git a/Libraries/Aurora/Source/Shaders/MainEntryPoints.slang b/Libraries/Aurora/Source/Shaders/MainEntryPoints.slang index 01d73ac..cb7d4bb 100644 --- a/Libraries/Aurora/Source/Shaders/MainEntryPoints.slang +++ b/Libraries/Aurora/Source/Shaders/MainEntryPoints.slang @@ -24,6 +24,11 @@ // ================================================================================================= // Ray Gen Shader // ================================================================================================= +// HgiVulkan can only have one main entry point for the shader source. +// To share this file between different renderers, we leverage preprocessors and +// enable one shader stage at a time. +// TODO: Consider to use separate shader files for each shader stage. +#ifndef DISABLE_HGI_SHADER_STAGE_RAY_GEN // Must match root signature defined in PTShaderLibrary::initRootSignatures and the descriptors // uploaded to the heap in PTRenderer::updateOutputResources and PTRenderer::updateDenoisingResources. [[vk::binding(1)]] RWTexture2D gResult : register(u0); @@ -72,7 +77,7 @@ struct Output } // The ray generation shader, iteratively shades the entire ray path. -[ shader("raygeneration")] +[shader("raygeneration")] void RayGenShader() { // Get the max trace depth from frame settings. @@ -536,21 +541,23 @@ void RayGenShader() gGlossy[screenCoords] = glossyPacked; } } +#endif // DISABLE_HGI_SHADER_STAGE_RAY_GEN // ================================================================================================= // Shadow miss shader // ================================================================================================= - +#ifndef DISABLE_HGI_SHADER_STAGE_MISS // Shadow miss results sets the visibility to WHITE. [shader("miss")]void ShadowMissShader(inout ShadowRayPayload rayPayload) { rayPayload.visibility = WHITE; } +#endif // DISABLE_HGI_SHADER_STAGE_MISS // ================================================================================================= // Instance closest-hit shader // ================================================================================================= - +#ifndef DISABLE_HGI_SHADER_STAGE_CLOSEST_HIT // Closest hit shader for instance rays. Just returns the shading data. [shader("closesthit")]void InstanceClosestHitShader( inout InstanceRayPayload rayPayload, in BuiltInTriangleIntersectionAttributes hit) @@ -578,9 +585,11 @@ void RayGenShader() rayPayload.distance = RayTCurrent(); // Return the offset within global instance buffer. - rayPayload.instanceBufferOffset = gInstanceBufferOffset; + rayPayload.instanceBufferOffset = gGeometry.getBufferOffset(); } +#endif // DISABLE_HGI_SHADER_STAGE_CLOSEST_HIT +#ifndef DISABLE_HGI_SHADER_STAGE_ANY_HIT [shader("anyhit")]void InstanceShadowAnyHitShader( inout ShadowRayPayload rayPayload, in BuiltInTriangleIntersectionAttributes hit) { @@ -588,7 +597,7 @@ void RayGenShader() // If the material is opaque, set the visibility to zero, accept the hit, and stop searching for // hits, as the shadow ray is completely blocked. Doing this here is a performance optimization, // as it avoids calling the full material initialization below, which can be expensive. - if (gIsOpaque) + if (gGeometry.isOpaque()) { rayPayload.visibility = BLACK; AcceptHitAndEndSearch(); @@ -600,7 +609,7 @@ void RayGenShader() computeShadingData(gGeometry, triangleIndex, hit.barycentrics, ObjectToWorld3x4()); // Get material buffer offset from instance data header. - int materialBufferOffset = instanceMaterialBufferOffset(gInstanceBufferOffset); + int materialBufferOffset = instanceMaterialBufferOffset(gGeometry.getBufferOffset()); // Retrieve the shader index for intersected surface material. // This is stored in the material header in the global material byte buffer, @@ -638,3 +647,4 @@ void RayGenShader() // above. } +#endif // DISABLE_HGI_SHADER_STAGE_ANY_HIT diff --git a/Libraries/Aurora/Source/Shaders/PathTracingCommon.slang b/Libraries/Aurora/Source/Shaders/PathTracingCommon.slang index 45cc1e4..412c325 100644 --- a/Libraries/Aurora/Source/Shaders/PathTracingCommon.slang +++ b/Libraries/Aurora/Source/Shaders/PathTracingCommon.slang @@ -43,7 +43,11 @@ Environment prepareEnvironmentValues() Environment values; values.constants = gEnvironmentConstants; values.backgroundTexture = gEnvironmentBackgroundTexture; +#if DIRECTX values.sampler = gSamplerArray[0]; +#else + values.sampler = gDefaultSampler; +#endif values.lightTexture = gEnvironmentLightTexture; #if DIRECTX values.aliasMap = gEnvironmentAliasMap; diff --git a/Libraries/Aurora/Source/Transpiler.cpp b/Libraries/Aurora/Source/Transpiler.cpp index 09f205f..9b7e7c0 100644 --- a/Libraries/Aurora/Source/Transpiler.cpp +++ b/Libraries/Aurora/Source/Transpiler.cpp @@ -159,8 +159,8 @@ void Transpiler::setSource(const string& name, const string& code) _pFileSystem->setSource(name, code); } -bool Transpiler::transpileCode( - const string& shaderCode, string& codeOut, string& errorOut, Language target) +bool Transpiler::transpileCode(const string& shaderCode, string& codeOut, string& errorOut, + Language target, const map& preprocessorDefines) { // Dummy file name to use as container for shader code. const string codeFileName = "__shaderCode"; @@ -169,7 +169,7 @@ bool Transpiler::transpileCode( setSource(codeFileName, shaderCode); // Transpile the shader code. - bool res = transpile(codeFileName, codeOut, errorOut, target); + bool res = transpile(codeFileName, codeOut, errorOut, target, preprocessorDefines); // Clear the shader source to release memory. setSource(codeFileName, ""); @@ -177,8 +177,8 @@ bool Transpiler::transpileCode( return res; } -bool Transpiler::transpile( - const string& shaderName, string& codeOut, string& errorOut, Language target) +bool Transpiler::transpile(const string& shaderName, string& codeOut, string& errorOut, + Language target, const map& preprocessorDefines) { // Clear result. errorOut.clear(); @@ -188,7 +188,8 @@ bool Transpiler::transpile( slang::ICompileRequest* pRequest; [[maybe_unused]] const int reqIndex = _pSession->createCompileRequest(&pRequest); - auto profileId = _pSession->findProfile("sm_6_3"); + auto profileId = target == Language::GLSL ? _pSession->findProfile("glsl_460") + : _pSession->findProfile("sm_6_3"); // Set the file system and compile fiags. pRequest->setFileSystem(_pFileSystem.get()); @@ -218,6 +219,12 @@ bool Transpiler::transpile( // Set DIRECTX preprocessor directive. pRequest->addPreprocessorDefine("DIRECTX", target == Language::GLSL ? "0" : "1"); + // Add the preprocessor definitions specified by the caller, if any. + for (const auto& [key, value] : preprocessorDefines) + { + pRequest->addPreprocessorDefine(key.c_str(), value.c_str()); + } + // Transpile the file. const SlangResult compileRes = pRequest->compile(); if (compileRes != SLANG_OK) diff --git a/Libraries/Aurora/Source/Transpiler.h b/Libraries/Aurora/Source/Transpiler.h index b05cbf0..0d485f2 100644 --- a/Libraries/Aurora/Source/Transpiler.h +++ b/Libraries/Aurora/Source/Transpiler.h @@ -37,11 +37,12 @@ class Transpiler ~Transpiler(); // Transpile a file with given name (looked up from map of file text strings) - bool transpile(const string& shaderName, string& codeOut, string& errorOut, Language target); + bool transpile(const string& shaderName, string& codeOut, string& errorOut, Language target, + const map& preprocessorDefines = {}); // Transpile a string containing shader code. - bool transpileCode( - const string& shaderCode, string& codeOut, string& errorOut, Language target); + bool transpileCode(const string& shaderCode, string& codeOut, string& errorOut, Language target, + const map& preprocessorDefines = {}); // Set a source file in the file text string map. void setSource(const string& name, const string& code); diff --git a/Libraries/Aurora/Source/UniformBuffer.cpp b/Libraries/Aurora/Source/UniformBuffer.cpp index bf34b4e..ffecbf3 100644 --- a/Libraries/Aurora/Source/UniformBuffer.cpp +++ b/Libraries/Aurora/Source/UniformBuffer.cpp @@ -164,6 +164,7 @@ string UniformBuffer::generateByteAddressBufferAccessors(const string& prefix) c break; case PropertyValue::Type::Float4: ss << "\treturn asfloat(buf.Load4(materialOffset + " << offset << "));" << endl; + break; case PropertyValue::Type::Matrix4: for (int j = 0; j < 16; j++) { diff --git a/Libraries/Foundation/API/Aurora/Foundation/Log.h b/Libraries/Foundation/API/Aurora/Foundation/Log.h index a11e36e..c862535 100644 --- a/Libraries/Foundation/API/Aurora/Foundation/Log.h +++ b/Libraries/Foundation/API/Aurora/Foundation/Log.h @@ -72,6 +72,9 @@ #define AU_LINE 0 #endif +// This is to fix "ISO C++11 requires at least one argument for the "..." in a variadic macro". +#pragma GCC system_header + /// Triggers an information event, which logs a message along with the current file and line. #define AU_INFO(_msg, ...) Aurora::Foundation::Log::info(AU_FILE, AU_LINE, _msg, ##__VA_ARGS__) @@ -305,7 +308,7 @@ class Log // Return a new string object from the buffer. // TODO: Avoid multiple allocations. return std::string(buf.data(), buf.data() + size - 1); - }; + } // Displays a failure dialog box. bool displayFailureDialog(const std::string& file, int line, const std::string& msg); diff --git a/Libraries/Foundation/API/Aurora/Foundation/Timer.h b/Libraries/Foundation/API/Aurora/Foundation/Timer.h index a910514..d26cb6d 100644 --- a/Libraries/Foundation/API/Aurora/Foundation/Timer.h +++ b/Libraries/Foundation/API/Aurora/Foundation/Timer.h @@ -178,8 +178,8 @@ class SampleCounter if (isDone) { _timer.reset(); - samples = samples = computeSampleCount(_activeFrameTime); - sampleStart = 0; + samples = computeSampleCount(_activeFrameTime); + sampleStart = 0; _sampleStart += samples; return samples; diff --git a/Libraries/Foundation/API/Aurora/Foundation/Utilities.h b/Libraries/Foundation/API/Aurora/Foundation/Utilities.h index d446f6a..ee80587 100644 --- a/Libraries/Foundation/API/Aurora/Foundation/Utilities.h +++ b/Libraries/Foundation/API/Aurora/Foundation/Utilities.h @@ -52,9 +52,12 @@ inline std::string w2s(const std::wstring& utf16Source) // standard. #pragma warning(push) #pragma warning(disable : 4996) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" std::wstring_convert> converter; return converter.to_bytes(utf16Source); +#pragma clang diagnostic pop #pragma warning(pop) } @@ -67,9 +70,12 @@ inline std::wstring s2w(const std::string& utf8Source) // standard. #pragma warning(push) #pragma warning(disable : 4996) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" std::wstring_convert> converter; return converter.from_bytes(utf8Source); +#pragma clang diagnostic pop #pragma warning(pop) } diff --git a/Libraries/HdAurora/HdAuroraImageCache.cpp b/Libraries/HdAurora/HdAuroraImageCache.cpp index 7670736..9ee9a65 100644 --- a/Libraries/HdAurora/HdAuroraImageCache.cpp +++ b/Libraries/HdAurora/HdAuroraImageCache.cpp @@ -108,7 +108,9 @@ Aurora::Path HdAuroraImageCache::acquireImage( // Pad to RGBA if required. if (paddingRequired) { - for (size_t idx = 0; idx < image->GetWidth() * image->GetWidth(); idx++) + const size_t totalSize = static_cast(image->GetWidth()) * + static_cast(image->GetWidth()); + for (size_t idx = 0; idx < totalSize; idx++) { pPixelData[idx * 4 + 0] = pUnpaddedPixels[idx * 3 + 0]; pPixelData[idx * 4 + 1] = pUnpaddedPixels[idx * 3 + 1]; diff --git a/README.md b/README.md index 1418ed1..bd3681b 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Below you can learn about features, system requirements, how to build Aurora, ho ### Operating System -Aurora is officially supported on **Windows 10** or **Ubuntu 20.04**. Windows 11 and other Linux distributions may work, but are not yet supported. +Aurora is officially supported on **Windows 10**, **MacOS 14.5** and **Ubuntu 22.04**. Windows 11/other MacOS versions/other Linux distributions may work, but are not guaranteed. To run Aurora, the latest GPU drivers from [NVIDIA](https://www.nvidia.com/download/index.aspx), [AMD](https://www.amd.com/en/support), or [Intel](https://www.intel.com/content/www/us/en/download-center/home.html) are recommended as ray tracing API support is being actively improved. No other software is required to run Aurora. @@ -34,7 +34,7 @@ Software required for building Aurora can be found in [the build instructions](D ### GPU -Aurora requires a GPU with hardware ray tracing support, either through **DirectX Raytracing** (DXR) on Windows, or **Vulkan Ray Tracing** on Windows or Linux. These include, but are not limited to: +Aurora requires a GPU with hardware ray tracing support, either through **DirectX Raytracing** (DXR) on Windows, or **Hgi Ray Tracing** on Windows/MacOS/Linux. These include, but are not limited to: - **NVIDIA GPUs with native ray tracing support** include any GPU with "RTX" in the brand name, including mobile GPUs. This includes: - The GeForce RTX series, such as the GeForce RTX 2060. @@ -51,7 +51,7 @@ Aurora requires a GPU with hardware ray tracing support, either through **Direct - The Intel™ Arc® Pro A-series for workstations, such as the Intel Arc Pro A40 and Intel Arc Pro A50. - The Intel™ Arc® A-series, such as the Intel Arc A380 and Intel Arc A770. -See [the build instructions](Doc/Build.md) for information on enabling support for DirectX Raytracing or Vulkan Ray Tracing. +See [the build instructions](Doc/Build.md) for information on enabling support for DirectX Raytracing or Hgi Ray Tracing. NOTE: At this time Vulkan is supported on NVIDIA GPUs only. @@ -72,14 +72,26 @@ cmake --build Build --config Release cd Build\bin\Release Plasma.exe ``` -#### Linux (Ubuntu 20.04) + +#### MacOS + +``` +python Scripts/installExternals.py ../AuroraExternals +cmake -S . -B Build +cmake --build Build --config Release --build-target native +cd Build/bin/Release +./Plasma --output {OUTPUT_IMAGE_FILE.png} --scene {INPUT_SCENE_FILE.obj} +``` + +#### Linux (Ubuntu 22.04) ``` python Scripts/installExternals.py ../AuroraExternals cmake -S . -B Build cmake --build Build cd Build/bin/Release -./Plasma --output {OUTPUT_IMAGE_FILE.png} --scene {INPUT_SCENE_FILE.obj} --renderer hgi +./Plasma --output {OUTPUT_IMAGE_FILE.png} --scene {INPUT_SCENE_FILE.obj} ``` + ## Running Aurora Aurora can be exercised in three ways: diff --git a/Scripts/Patches/USD.patch b/Scripts/Patches/USD.patch deleted file mode 100644 index c33871a..0000000 --- a/Scripts/Patches/USD.patch +++ /dev/null @@ -1,98 +0,0 @@ -diff --git a/cmake/modules/FindOpenEXR.cmake b/cmake/modules/FindOpenEXR.cmake -index 7cf5d4681..633c4383e 100644 ---- a/cmake/modules/FindOpenEXR.cmake -+++ b/cmake/modules/FindOpenEXR.cmake -@@ -52,9 +52,11 @@ foreach(OPENEXR_LIB - # OpenEXR libraries may be suffixed with the version number, so we search - # using both versioned and unversioned names. - set(DEBUG_POSTFIX ) -- if(DEFINED PXR_USE_DEBUG_BUILD) -- if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND ${PXR_USE_DEBUG_BUILD} MATCHES ON) -+ if(CMAKE_BUILD_TYPE STREQUAL Debug) -+ if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - set(DEBUG_POSTFIX _d) -+ else() -+ set(DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}) - endif() - endif() - find_library(OPENEXR_${OPENEXR_LIB}_LIBRARY -diff --git a/cmake/modules/FindOpenImageIO.cmake b/cmake/modules/FindOpenImageIO.cmake -index 4d2ff1ec4..c8045efdf 100644 ---- a/cmake/modules/FindOpenImageIO.cmake -+++ b/cmake/modules/FindOpenImageIO.cmake -@@ -5,6 +5,15 @@ - # https://openusd.org/license. - # - -+set(DEBUG_POSTFIX ) -+if(CMAKE_BUILD_TYPE STREQUAL Debug) -+ if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") -+ set(DEBUG_POSTFIX _d) -+ else() -+ set(DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}) -+ endif() -+endif() -+ - if(UNIX) - find_path(OIIO_BASE_DIR - include/OpenImageIO/oiioversion.h -@@ -13,14 +22,8 @@ if(UNIX) - "$ENV{OIIO_LOCATION}" - "/opt/oiio" - ) -- set(LIBNAME libOpenImageIO.so) -- if(DEFINED PXR_USE_DEBUG_BUILD) -- if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND ${PXR_USE_DEBUG_BUILD} MATCHES ON) -- set(LIBNAME libOpenImageIO_d.dylib) -- endif() -- endif() - find_path(OIIO_LIBRARY_DIR -- ${LIBNAME} -+ libOpenImageIO${DEBUG_POSTFIX}.so - HINTS - "${OIIO_LOCATION}" - "$ENV{OIIO_LOCATION}" -@@ -38,7 +41,7 @@ elseif(WIN32) - "$ENV{OIIO_LOCATION}" - ) - find_path(OIIO_LIBRARY_DIR -- OpenImageIO.lib -+ OpenImageIO${DEBUG_POSTFIX}.lib - HINTS - "${OIIO_LOCATION}" - "$ENV{OIIO_LOCATION}" -@@ -63,12 +66,6 @@ find_path(OIIO_INCLUDE_DIR - ) - - list(APPEND OIIO_INCLUDE_DIRS ${OIIO_INCLUDE_DIR}) --set(DEBUG_POSTFIX ) --if(DEFINED PXR_USE_DEBUG_BUILD) -- if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND ${PXR_USE_DEBUG_BUILD} MATCHES ON) -- set(DEBUG_POSTFIX _d) -- endif() --endif() - foreach(OIIO_LIB - OpenImageIO${DEBUG_POSTFIX} - OpenImageIO_Util${DEBUG_POSTFIX} -diff --git a/cmake/modules/FindOpenSubdiv.cmake b/cmake/modules/FindOpenSubdiv.cmake -index 77bdb27ca..2fe33e220 100644 ---- a/cmake/modules/FindOpenSubdiv.cmake -+++ b/cmake/modules/FindOpenSubdiv.cmake -@@ -75,12 +75,16 @@ if(OPENSUBDIV_INCLUDE_DIR AND EXISTS "${OPENSUBDIV_INCLUDE_DIR}/opensubdiv/versi - ) - endif() - -+if(CMAKE_BUILD_TYPE STREQUAL Debug) -+ SET(LIB_POSTFIX ${CMAKE_DEBUG_POSTFIX}) -+endif() -+ - SET(_opensubdiv_LIBRARIES) - FOREACH(COMPONENT ${_opensubdiv_FIND_COMPONENTS}) - STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT) - FIND_LIBRARY(OPENSUBDIV_${UPPERCOMPONENT}_LIBRARY - NAMES -- ${COMPONENT} -+ ${COMPONENT}${LIB_POSTFIX} - HINTS - ${_opensubdiv_SEARCH_DIRS} - PATH_SUFFIXES diff --git a/Scripts/apple_utils.py b/Scripts/apple_utils.py new file mode 100644 index 0000000..740ea85 --- /dev/null +++ b/Scripts/apple_utils.py @@ -0,0 +1,219 @@ +# +# Copyright 2022 Pixar +# +# Licensed under the Apache License, Version 2.0 (the "Apache License") +# with the following modification; you may not use this file except in +# compliance with the Apache License and the following modification to it: +# Section 6. Trademarks. is deleted and replaced with: +# +# 6. Trademarks. This License does not grant permission to use the trade +# names, trademarks, service marks, or product names of the Licensor +# and its affiliates, except as required to comply with Section 4(c) of +# the License and to reproduce the content of the NOTICE file. +# +# You may obtain a copy of the Apache License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the Apache License with the above modification is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the Apache License for the specific +# language governing permissions and limitations under the Apache License. +# + +# Utilities for managing Apple OS build concerns. +# +# NOTE: This file and its contents may change significantly as we continue +# working to make the build scripts more modular. We anticipate providing +# a clearer and more extensible way of expressing platform specific concerns +# as we add support for additional platforms. + +import sys +import locale +import os +import platform +import shlex +import subprocess + +TARGET_NATIVE = "native" +TARGET_X86 = "x86_64" +TARGET_ARM64 = "arm64" +TARGET_UNIVERSAL = "universal" + +def GetBuildTargets(): + return [TARGET_NATIVE, + TARGET_X86, + TARGET_ARM64, + TARGET_UNIVERSAL] + +def GetBuildTargetDefault(): + return TARGET_NATIVE; + +def MacOS(): + return platform.system() == "Darwin" + +def GetLocale(): + return sys.stdout.encoding or locale.getdefaultlocale()[1] or "UTF-8" + +def GetCommandOutput(command): + """Executes the specified command and returns output or None.""" + try: + return subprocess.check_output( + shlex.split(command), + stderr=subprocess.STDOUT).decode(GetLocale(), 'replace').strip() + except subprocess.CalledProcessError: + pass + return None + +def GetTargetArmArch(): + # Allows the arm architecture string to be overridden by + # setting MACOS_ARM_ARCHITECTURE + return os.environ.get('MACOS_ARM_ARCHITECTURE') or TARGET_ARM64 + +def GetHostArch(): + macArch = GetCommandOutput('arch').strip() + if macArch == "i386" or macArch == TARGET_X86: + macArch = TARGET_X86 + else: + macArch = GetTargetArmArch() + return macArch + +def GetTargetArch(context): + if context.targetNative: + macTargets = GetHostArch() + else: + if context.targetX86: + macTargets = TARGET_X86 + if context.targetARM64: + macTargets = GetTargetArmArch() + if context.targetUniversal: + macTargets = TARGET_X86 + ";" + GetTargetArmArch() + return macTargets + +def IsHostArm(): + return GetHostArch() != TARGET_X86 + +def IsTargetArm(context): + return GetTargetArch(context) != TARGET_X86 + +def GetTargetArchPair(context): + secondaryArch = None + + if context.targetNative: + primaryArch = GetHostArch() + if context.targetX86: + primaryArch = TARGET_X86 + if context.targetARM64: + primaryArch = GetTargetArmArch() + if context.targetUniversal: + primaryArch = GetHostArch() + if (primaryArch == TARGET_X86): + secondaryArch = GetTargetArmArch() + else: + secondaryArch = TARGET_X86 + + return (primaryArch, secondaryArch) + +def SupportsMacOSUniversalBinaries(): + if not MacOS(): + return False + XcodeOutput = GetCommandOutput('/usr/bin/xcodebuild -version') + XcodeFind = XcodeOutput.rfind('Xcode ', 0, len(XcodeOutput)) + XcodeVersion = XcodeOutput[XcodeFind:].split(' ')[1] + return (XcodeVersion > '11.0') + +def SetTarget(context, targetName): + context.targetNative = (targetName == TARGET_NATIVE) + context.targetX86 = (targetName == TARGET_X86) + context.targetARM64 = (targetName == GetTargetArmArch()) + context.targetUniversal = (targetName == TARGET_UNIVERSAL) + if context.targetUniversal and not SupportsMacOSUniversalBinaries(): + self.targetUniversal = False + raise ValueError( + "Universal binaries only supported in macOS 11.0 and later.") + +def GetTargetName(context): + return (TARGET_NATIVE if context.targetNative else + TARGET_X86 if context.targetX86 else + GetTargetArmArch() if context.targetARM64 else + TARGET_UNIVERSAL if context.targetUniversal else + "") + +devout = open(os.devnull, 'w') + +def ExtractFilesRecursive(path, cond): + files = [] + for r, d, f in os.walk(path): + for file in f: + if cond(os.path.join(r,file)): + files.append(os.path.join(r, file)) + return files + +def CodesignFiles(files): + SDKVersion = subprocess.check_output( + ['xcodebuild', '-version']).strip()[6:10] + codeSignIDs = subprocess.check_output( + ['security', 'find-identity', '-vp', 'codesigning']) + + codeSignID = "-" + if os.environ.get('CODE_SIGN_ID'): + codeSignID = os.environ.get('CODE_SIGN_ID') + elif float(SDKVersion) >= 11.0 and \ + codeSignIDs.find(b'Apple Development') != -1: + codeSignID = "Apple Development" + elif codeSignIDs.find(b'Mac Developer') != -1: + codeSignID = "Mac Developer" + + for f in files: + subprocess.call(['codesign', '-f', '-s', '{codesignid}' + .format(codesignid=codeSignID), f], + stdout=devout, stderr=devout) + +def Codesign(install_path, verbose_output=False): + if not MacOS(): + return False + if verbose_output: + global devout + devout = sys.stdout + + files = ExtractFilesRecursive(install_path, + (lambda file: '.so' in file or '.dylib' in file)) + CodesignFiles(files) + +def CreateUniversalBinaries(context, libNames, x86Dir, armDir): + if not MacOS(): + return False + lipoCommands = [] + xcodeRoot = subprocess.check_output( + ["xcode-select", "--print-path"]).decode('utf-8').strip() + lipoBinary = \ + "{XCODE_ROOT}/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo".format( + XCODE_ROOT=xcodeRoot) + for libName in libNames: + outputName = os.path.join(context.instDir, "lib", libName) + if not os.path.islink("{x86Dir}/{libName}".format( + x86Dir=x86Dir, libName=libName)): + if os.path.exists(outputName): + os.remove(outputName) + lipoCmd = "{lipo} -create {x86Dir}/{libName} {armDir}/{libName} " \ + "-output {outputName}".format( + lipo=lipoBinary, + x86Dir=x86Dir, armDir=armDir, + libName=libName, outputName=outputName) + lipoCommands.append(lipoCmd) + p = subprocess.Popen(shlex.split(lipoCmd)) + p.wait() + for libName in libNames: + if os.path.islink("{x86Dir}/{libName}".format( + x86Dir=x86Dir, libName=libName)): + outputName = os.path.join(context.instDir, "lib", libName) + if os.path.exists(outputName): + os.unlink(outputName) + targetName = os.readlink("{x86Dir}/{libName}".format( + x86Dir=x86Dir, libName=libName)) + targetName = os.path.basename(targetName) + os.symlink("{instDir}/lib/{libName}".format( + instDir=context.instDir, libName=targetName), + outputName) + return lipoCommands \ No newline at end of file diff --git a/Scripts/cmake/modules/FindSlang.cmake b/Scripts/cmake/modules/FindSlang.cmake index 3634d1e..ba9c6b4 100644 --- a/Scripts/cmake/modules/FindSlang.cmake +++ b/Scripts/cmake/modules/FindSlang.cmake @@ -5,8 +5,10 @@ endif() if(WIN32) set(Slang_BUILD_CONFIG "windows-x64") -elseif(UNIX) +elseif(LINUX) set(Slang_BUILD_CONFIG "linux-x64") +elseif(APPLE) + set(Slang_BUILD_CONFIG "macosx-aarch64") endif() # Find the Slang include path @@ -25,8 +27,8 @@ if (DEFINED Slang_ROOT) PATH_SUFFIXES release debug DOC "path to slang library files" ) - find_program(Slang_COMPILER # Set variable Slang_LIBRARY - slangc # Find library path with libslang.so, slang.dll, or slang.lib + find_program(Slang_COMPILER # Set variable Slang_COMPILER + slangc # Find executable path with slangc NO_DEFAULT_PATH PATHS "${Slang_ROOT}/bin/${Slang_BUILD_CONFIG}" PATH_SUFFIXES release debug diff --git a/Scripts/cmake/modules/FindTBB.cmake b/Scripts/cmake/modules/FindTBB.cmake index a378998..87eb543 100644 --- a/Scripts/cmake/modules/FindTBB.cmake +++ b/Scripts/cmake/modules/FindTBB.cmake @@ -5,6 +5,8 @@ endif() find_path(TBB_INCLUDE_DIRS # Set variable TBB_INCLUDE_DIRS tbb/tbb.h # Find a path with tbb.h + HINTS ${TBB_ROOT} + PATH_SUFFIXES include REQUIRED ) cmake_path(GET TBB_INCLUDE_DIRS PARENT_PATH TBB_INSTALL_PREFIX) @@ -45,6 +47,13 @@ foreach(_comp ${TBB_COMPOMPONENTS}) set_target_properties(TBB::${_comp} PROPERTIES IMPORTED_LOCATION_RELEASE "${TBB_${_comp}_DLL_RELEASE}" ) + elseif(APPLE) + find_file(TBB_${_comp}_LIBRARY_RELEASE ${_comp}.dylib REQUIRED + PATHS "${TBB_INSTALL_PREFIX}/lib" + ) + set_target_properties(TBB::${_comp} PROPERTIES + IMPORTED_LOCATION_RELEASE "${TBB_${_comp}_LIBRARY_RELEASE}" + ) else() # linux cmake_path(GET TBB_${_comp}_LIBRARY_RELEASE FILENAME TBB_${_comp}_SO) set_target_properties(TBB::${_comp} PROPERTIES @@ -71,6 +80,13 @@ foreach(_comp ${TBB_COMPOMPONENTS}) set_target_properties(TBB::${_comp} PROPERTIES IMPORTED_LOCATION_DEBUG "${TBB_${_comp}_DLL_DEBUG}" ) + elseif(APPLE) + find_file(TBB_${_comp}_LIBRARY_DEBUG ${_comp}_debug.dylib REQUIRED + PATHS "${TBB_INSTALL_PREFIX}/lib" + ) + set_target_properties(TBB::${_comp} PROPERTIES + IMPORTED_LOCATION_DEBUG "${TBB_${_comp}_LIBRARY_DEBUG}" + ) else() # linux cmake_path(GET TBB_${_comp}_LIBRARY_DEBUG FILENAME TBB_${_comp}_SO) set_target_properties(TBB::${_comp} PROPERTIES @@ -92,6 +108,8 @@ elseif (TBB_LIBRARIES_DEBUG) set(TBB_LIBRARIES ${TBB_LIBRARIES_DEBUG}) endif() +set(TBB_LIBRARY_DIR "${TBB_INSTALL_PREFIX}/lib") + include(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set TBB_FOUND to TRUE # if all listed variables are TRUE @@ -103,6 +121,7 @@ find_package_handle_standard_args(TBB mark_as_advanced( TBB_INCLUDE_DIRS + TBB_LIBRARY_DIR TBB_LIBRARIES TBB_LIBRARIES_RELEASE TBB_LIBRARIES_DEBUG diff --git a/Scripts/cmake/modules/Findpxr.cmake b/Scripts/cmake/modules/Findpxr.cmake index 037c241..5d110e8 100644 --- a/Scripts/cmake/modules/Findpxr.cmake +++ b/Scripts/cmake/modules/Findpxr.cmake @@ -44,13 +44,18 @@ if(NOT OPENSUBDIV_FOUND) set(OPENSUBDIV_USE_GPU TRUE) find_package(OpenSubdiv REQUIRED) endif() -if(NOT Vulkan_shaderc_combined_FOUND) - # Vulkan is required by hgiVulkan - find_package(Vulkan COMPONENTS shaderc_combined) # requires cmake 3.24 +if(NOT APPLE) + if(NOT Vulkan_shaderc_combined_FOUND) + # Vulkan is required by hgiVulkan + find_package(Vulkan COMPONENTS shaderc_combined) # requires cmake 3.24 + endif() endif() if(NOT OpenGL_FOUND) find_package(OpenGL REQUIRED) endif() +#if(NOT Metal_FOUND) +# find_package(Metal REQUIRED) +#endif() find_path(PXR_INCLUDE_DIR # Set variable PXR_INCLUDE_DIR pxr/pxr.h # Find a path with pxr.h @@ -68,6 +73,10 @@ if(Vulkan_shaderc_combined_FOUND) list(APPEND USD_COMPOMPONENTS "hgiVulkan") endif() +if(APPLE) + list(APPEND USD_COMPOMPONENTS "hgiMetal") +endif() + if(USD_COMPOMPONENTS_USDVIEW) list(APPEND USD_COMPOMPONENTS "usdviewq") endif() @@ -97,6 +106,13 @@ foreach(_comp ${USD_COMPOMPONENTS}) ) unset(USD_${_comp}_LIBRARY_DIR_RELEASE) unset(USD_${_comp}_DLL_RELEASE) + elseif(APPLE) + find_file(USD_${_comp}_LIBRARY_RELEASE usd_${_comp}.dylib REQUIRED + PATHS "${PXR_LIBRARY_DIR}" + ) + set_target_properties(${_comp} PROPERTIES + IMPORTED_LOCATION_RELEASE "${USD_${_comp}_LIBRARY_RELEASE}" + ) else() # linux cmake_path(GET USD_${_comp}_LIBRARY_RELEASE FILENAME USD_${_comp}_SO) set_target_properties(${_comp} PROPERTIES @@ -126,6 +142,13 @@ foreach(_comp ${USD_COMPOMPONENTS}) ) unset(USD_${_comp}_LIBRARY_DIR_DEBUG) unset(USD_${_comp}_DLL_DEBUG) + elseif(APPLE) + find_file(USD_${_comp}_LIBRARY_DEBUG usd_${_comp}d.dylib REQUIRED + PATHS "${PXR_LIBRARY_DIR}" + ) + set_target_properties(${_comp} PROPERTIES + IMPORTED_LOCATION_DEBUG "${USD_${_comp}_LIBRARY_DEBUG}" + ) else() # linux cmake_path(GET USD_${_comp}_LIBRARY_DEBUG FILENAME USD_${_comp}_SO) set_target_properties(${_comp} PROPERTIES @@ -395,20 +418,26 @@ if(USD_hgiVulkan_LIBRARY_RELEASE OR USD_hgiVulkan_LIBRARY_DEBUG) INTERFACE_LINK_LIBRARIES "arch;hgi;tf;trace;Vulkan::Vulkan;Vulkan::shaderc_combined" ) endif() +if(USD_hgiMetal_LIBRARY_RELEASE OR USD_hgiMetal_LIBRARY_DEBUG) + set_target_properties(hgiMetal PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${PXR_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "arch;hgi;tf;trace;-framework Metal;-framework AppKit" + ) +endif() set_target_properties(hgiInterop PROPERTIES INTERFACE_COMPILE_DEFINITIONS "PXR_PYTHON_ENABLED=1" INTERFACE_INCLUDE_DIRECTORIES "${PXR_INCLUDE_DIRS}" ) +set(HGI_INTEROP_LIBRARIES "gf;tf;hgi;vt;garch") if (USD_hgiVulkan_LIBRARY_RELEASE OR USD_hgiVulkan_LIBRARY_DEBUG) - set_target_properties(hgiInterop PROPERTIES - INTERFACE_LINK_LIBRARIES "gf;tf;hgi;vt;garch;hgiVulkan" - ) -else() - set_target_properties(hgiInterop PROPERTIES - INTERFACE_LINK_LIBRARIES "gf;tf;hgi;vt;garch" - ) + set(HGI_INTEROP_LIBRARIES "${HGI_INTEROP_LIBRARIES};hgiVulkan") endif() - +if (USD_hgiMetal_LIBRARY_RELEASE OR USD_hgiMetal_LIBRARY_DEBUG) + set(HGI_INTEROP_LIBRARIES "${HGI_INTEROP_LIBRARIES};hgiMetal;-framework CoreVideo") +endif() +set_target_properties(hgiInterop PROPERTIES + INTERFACE_LINK_LIBRARIES "${HGI_INTEROP_LIBRARIES}" +) include(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set pxr_FOUND to TRUE diff --git a/Scripts/cmake/toolbox.cmake b/Scripts/cmake/toolbox.cmake index df914de..0696f66 100644 --- a/Scripts/cmake/toolbox.cmake +++ b/Scripts/cmake/toolbox.cmake @@ -42,10 +42,20 @@ macro(minify_shaders header shader_folder shaders) endforeach() # Add a custom command to create minified shader. - add_custom_command( - OUTPUT ${header} - COMMAND ${Python3_EXECUTABLE} ${SCRIPTS_DIR}/minifyShadersFolder.py ${shader_folder} ${header} ${Slang_COMPILER} - COMMENT "Minifying path tracing shaders to ${header}" - DEPENDS ${shaders} - ) + if(APPLE OR UNIX) + # XXX: Disable slangc on MacOS & Linux for now. + add_custom_command( + OUTPUT ${header} + COMMAND ${Python3_EXECUTABLE} ${SCRIPTS_DIR}/minifyShadersFolder.py ${shader_folder} ${header} + COMMENT "Minifying path tracing shaders to ${header}" + DEPENDS ${shaders} + ) + else() + add_custom_command( + OUTPUT ${header} + COMMAND ${Python3_EXECUTABLE} ${SCRIPTS_DIR}/minifyShadersFolder.py ${shader_folder} ${header} ${Slang_COMPILER} + COMMENT "Minifying path tracing shaders to ${header}" + DEPENDS ${shaders} + ) + endif() endmacro() diff --git a/Scripts/installExternals.py b/Scripts/installExternals.py index 36ccbea..5cf9000 100644 --- a/Scripts/installExternals.py +++ b/Scripts/installExternals.py @@ -105,14 +105,10 @@ def InstallZlib(context, force, buildArgs): # Use a sub-version in the version string to force reinstallation, even if 1.85.0 installed. BOOST_VERSION_STRING = BOOST_URL+".a" -if Linux(): - BOOST_VERSION_FILE = "include/boost/version.hpp" -elif Windows(): - # The default installation of boost on Windows puts headers in a versioned - # subdirectory, which we have to account for here. In theory, specifying - # "layout=system" would make the Windows install match Linux, but that - # causes problems for other dependencies that look for boost. +if Windows(): BOOST_VERSION_FILE = "include/boost-1_85/boost/version.hpp" +else: + BOOST_VERSION_FILE = "include/boost/version.hpp" BOOST_INSTALL_FOLDER = "boost" BOOST_PACKAGE_NAME = "Boost" @@ -148,12 +144,46 @@ def InstallBoost_Helper(context, force, buildArgs): bsToolset = "vc142" bootstrap = "bootstrap.bat" if Windows() else "./bootstrap.sh" - Run(f'{bootstrap} {bsToolset}') + if not Windows(): + # zip doesn't preserve file attributes, so force +x manually. + Run('chmod +x ' + bootstrap) + Run('chmod +x ./tools/build/src/engine/build.sh') + + # For cross-compilation on macOS we need to specify the architecture + # for both the bootstrap and the b2 phase of building boost. + bootstrapCmd = '{bootstrap} --prefix="{instDir}"'.format( + bootstrap=bootstrap, instDir=instFolder) + + macOSArch = "" + + if MacOS(): + if apple_utils.GetTargetArch(context) == \ + apple_utils.TARGET_X86: + macOSArch = "-arch {0}".format(apple_utils.TARGET_X86) + elif apple_utils.GetTargetArch(context) == \ + apple_utils.GetTargetArmArch(): + macOSArch = "-arch {0}".format( + apple_utils.GetTargetArmArch()) + elif context.targetUniversal: + (primaryArch, secondaryArch) = \ + apple_utils.GetTargetArchPair(context) + macOSArch="-arch {0} -arch {1}".format( + primaryArch, secondaryArch) + if macOSArch: + bootstrapCmd += " cxxflags=\"{0} -std=c++17 -stdlib=libc++\" " \ + " cflags=\"{0}\" " \ + " linkflags=\"{0}\"".format(macOSArch) + bootstrapCmd += " --with-toolset=clang" + elif Windows(): + bootstrapCmd += " \"{0}\"".format(bsToolset) + + Run(bootstrapCmd) # b2 supports at most -j64 and will error if given a higher value. numProc = min(64, context.numJobs) b2Settings = [ + f'--prefix="{instFolder}"', f'--build-dir="{context.buildDir}"', f'-j{numProc}', 'address-model=64', @@ -202,9 +232,26 @@ def InstallBoost_Helper(context, force, buildArgs): if context.cmakeToolset == "v143" or IsVisualStudio2022OrGreater(): b2Settings.append("toolset=msvc-14.3") elif context.cmakeToolset == "v142" or IsVisualStudio2019OrGreater(): - b2Settings.append("toolset=msvc-14.2") + b2Settings.append("toolset=msvc-14.2") else: b2Settings.append("toolset=msvc-14.2") + + if MacOS(): + # Must specify toolset=clang to ensure install_name for boost + # libraries includes @rpath + b2Settings.append("toolset=clang") + # + # Xcode 15.3 (and hence Apple Clang 15) removed the global + # declaration of std::piecewise_construct which causes boost build + # to fail. + # https://developer.apple.com/documentation/xcode-release-notes/xcode-15_3-release-notes. + # A fix for the same is also available in boost 1.84: + # https://github.com/boostorg/container/commit/79a75f470e75f35f5f2a91e10fcc67d03b0a2160 + b2Settings.append(f"define=BOOST_UNORDERED_HAVE_PIECEWISE_CONSTRUCT=0") + if macOSArch: + b2Settings.append("cxxflags=\"{0} -std=c++17 -stdlib=libc++\"".format(macOSArch)) + b2Settings.append("cflags=\"{0}\"".format(macOSArch)) + b2Settings.append("linkflags=\"{0}\"".format(macOSArch)) # Add on any user-specified extra arguments. b2Settings += buildArgs @@ -214,14 +261,12 @@ def InstallBoost_Helper(context, force, buildArgs): # boost only accepts three variants: debug, release, profile b2ExtraSettings = [] if context.buildDebug: - b2ExtraSettings.append('--prefix="{}" variant=debug --debug-configuration'.format( - instFolder)) + b2ExtraSettings.append('variant=debug --debug-configuration') if context.buildRelease: - b2ExtraSettings.append('--prefix="{}" variant=release'.format( - instFolder)) + b2ExtraSettings.append('variant=release') if context.buildRelWithDebInfo: - b2ExtraSettings.append('--prefix="{}" variant=profile'.format( - instFolder)) + b2ExtraSettings.append('variant=profile') + for extraSettings in b2ExtraSettings: b2Settings.append(extraSettings) # Build and install Boost @@ -261,8 +306,8 @@ def InstallBoost(context, force, buildArgs): def InstallTBB(context, force, buildArgs): if Windows(): InstallTBB_Windows(context, force, buildArgs) - elif Linux(): - InstallTBB_Linux(context, force, buildArgs) + elif Linux() or MacOS(): + InstallTBB_LinuxOrMacOS(context, force, buildArgs) def InstallTBB_Windows(context, force, buildArgs): with CurrentWorkingDirectory(DownloadURL(TBB_URL, context, force, TBB_ROOT_DIR_NAME)): @@ -278,18 +323,44 @@ def InstallTBB_Windows(context, force, buildArgs): CopyDirectory(context, "include/serial", "include/serial", TBB_INSTALL_FOLDER) CopyDirectory(context, "include/tbb", "include/tbb", TBB_INSTALL_FOLDER) -def InstallTBB_Linux(context, force, buildArgs): +def InstallTBB_LinuxOrMacOS(context, force, buildArgs): with CurrentWorkingDirectory(DownloadURL(TBB_URL, context, force)): + # Ensure that the tbb build system picks the proper architecture. + if MacOS() and Arm(): + buildArgs.append("arch=arm64") + # TBB does not support out-of-source builds in a custom location. - Run('make -j{procs} {buildArgs}' - .format(procs=context.numJobs, - buildArgs=" ".join(buildArgs))) + makeTBBCmd = 'make -j{procs} {buildArgs}'.format( + procs=context.numJobs, + buildArgs=" ".join(buildArgs)) + Run(makeTBBCmd) + + # Install both release and debug builds. + # + # As of TBB 2020 the build no longer produces a debug build along + # with the release build. There is also no way to specify a debug + # build when running make, even though the internals of the build + # still support it. + # + # To workaround this, we patch the Makefile to change "release" to + # "debug" and re-run the build, copying the debug libraries + # afterwards. + # + # See https://github.com/oneapi-src/oneTBB/issues/207/ + PatchFile("Makefile", [("release", "debug")]) + Run(makeTBBCmd) for config in BuildConfigs(context): - if (config == "Debug"): - CopyFiles(context, "build/*_debug/libtbb*.2", "lib", TBB_INSTALL_FOLDER) - if (config == "Release" or config == "RelWithDebInfo"): - CopyFiles(context, "build/*_release/libtbb*.2", "lib", TBB_INSTALL_FOLDER) + if MacOS(): + if (config == "Debug"): + CopyFiles(context, "build/*_debug/libtbb*", "lib", TBB_INSTALL_FOLDER) + if (config == "Release" or config == "RelWithDebInfo"): + CopyFiles(context, "build/*_release/libtbb*", "lib", TBB_INSTALL_FOLDER) + else: + if (config == "Debug"): + CopyFiles(context, "build/*_debug/libtbb*.2", "lib", TBB_INSTALL_FOLDER) + if (config == "Release" or config == "RelWithDebInfo"): + CopyFiles(context, "build/*_release/libtbb*.2", "lib", TBB_INSTALL_FOLDER) installLibDir = os.path.join(context.externalsInstDir, TBB_INSTALL_FOLDER, "lib") with CurrentWorkingDirectory(installLibDir): MakeSymLink(context, f"*.2") @@ -336,7 +407,7 @@ def InstallTIFF(context, force, buildArgs): # functionality is only for compilers using GNU ld on # ELF systems or systems which provide an emulation; therefore # skipping it completely on mac and windows. - if Windows(): + if MacOS() or Windows(): extraArgs = ["-Dld-version-script=OFF"] else: extraArgs = [] @@ -354,7 +425,18 @@ def InstallTIFF(context, force, buildArgs): def InstallPNG(context, force, buildArgs): with CurrentWorkingDirectory(DownloadURL(PNG_URL, context, force)): - RunCMake(context, True, PNG_INSTALL_FOLDER, buildArgs) + macArgs = [] + if MacOS() and apple_utils.IsTargetArm(context): + # Ensure libpng's build doesn't erroneously activate inappropriate + # Neon extensions + macArgs = ["-DCMAKE_C_FLAGS=\"-DPNG_ARM_NEON_OPT=0\""] + + if context.targetUniversal: + PatchFile("scripts/genout.cmake.in", + [("CMAKE_OSX_ARCHITECTURES", + "CMAKE_OSX_INTERNAL_ARCHITECTURES")]) + + RunCMake(context, True, PNG_INSTALL_FOLDER, buildArgs + macArgs) PNG = Dependency(PNG_INSTALL_FOLDER, PNG_PACKAGE_NAME, InstallPNG, PNG_URL, "include/png.h") @@ -573,6 +655,10 @@ def InstallOpenSubdiv(context, force, buildArgs): # tbbmalloc. extraArgs.append('-DNO_TBB=ON') + # Use Metal for macOS and all Apple embedded systems. + if MacOS(): + extraArgs.append('-DNO_OPENGL=ON') + # Add on any user-specified extra arguments. extraArgs += buildArgs @@ -612,6 +698,7 @@ def InstallMaterialX(context, force, buildArgs): ############################################################ # USD + USD_URL = "https://github.com/autodesk-forks/USD/archive/refs/tags/v24.08-Aurora-v24.08.zip" USD_INSTALL_FOLDER = "USD" USD_PACKAGE_NAME = "pxr" @@ -619,18 +706,6 @@ def InstallMaterialX(context, force, buildArgs): def InstallUSD(context, force, buildArgs): with CurrentWorkingDirectory(DownloadURL(USD_URL, context, force)): -# USD_URL = "https://github.com/autodesk-forks/USD.git" -# USD_TAG = "v24.08-Aurora-v24.08" -# USD_FOLDER = "USD-" + USD_TAG -# USD_INSTALL_FOLDER = "USD" -# USD_PACKAGE_NAME = "pxr" - -# def InstallUSD(context, force, buildArgs): -# with CurrentWorkingDirectory(GitClone(USD_URL, USD_TAG, USD_FOLDER, context)): - - # We need to apply patch to make USD build with our externals configuration - # ApplyGitPatch(context, "USD.patch") - extraArgs = [] if Linux(): @@ -644,7 +719,10 @@ def InstallUSD(context, force, buildArgs): extraArgs.append('-DPXR_BUILD_EXAMPLES=OFF') extraArgs.append('-DPXR_BUILD_TUTORIALS=OFF') - extraArgs.append('-DPXR_ENABLE_VULKAN_SUPPORT=ON') + if MacOS(): + extraArgs.append('-DPXR_ENABLE_METAL_SUPPORT=ON') + else: + extraArgs.append('-DPXR_ENABLE_VULKAN_SUPPORT=ON') extraArgs.append('-DPXR_BUILD_USD_TOOLS=ON') @@ -653,12 +731,29 @@ def InstallUSD(context, force, buildArgs): extraArgs.append('-DPXR_ENABLE_OPENVDB_SUPPORT=OFF') extraArgs.append('-DPXR_BUILD_EMBREE_PLUGIN=OFF') extraArgs.append('-DPXR_BUILD_PRMAN_PLUGIN=OFF') - extraArgs.append('-DPXR_BUILD_OPENIMAGEIO_PLUGIN=ON') extraArgs.append('-DPXR_BUILD_OPENCOLORIO_PLUGIN=OFF') extraArgs.append('-DPXR_BUILD_USD_IMAGING=ON') - - extraArgs.append('-DPXR_BUILD_USDVIEW=ON') + if not MacOS(): + extraArgs.append('-DPXR_BUILD_OPENIMAGEIO_PLUGIN=ON') + extraArgs.append('-DPXR_BUILD_USDVIEW=ON') + extraArgs.append('-DPXR_ENABLE_PYTHON_SUPPORT=ON') + extraArgs.append('-DPXR_USE_PYTHON_3=ON') + pythonInfo = GetPythonInfo(context) + if pythonInfo: + # According to FindPythonLibs.cmake these are the variables + # to set to specify which Python installation to use. + extraArgs.append('-DPYTHON_EXECUTABLE="{pyExecPath}"' + .format(pyExecPath=pythonInfo[0])) + extraArgs.append('-DPYTHON_LIBRARY="{pyLibPath}"' + .format(pyLibPath=pythonInfo[1])) + extraArgs.append('-DPYTHON_INCLUDE_DIR="{pyIncPath}"' + .format(pyIncPath=pythonInfo[2])) + extraArgs.append('-DPXR_USE_DEBUG_PYTHON=OFF') + else: + extraArgs.append('-DPXR_ENABLE_PYTHON_SUPPORT=OFF') + extraArgs.append('-DPXR_USE_PYTHON_3=OFF') + extraArgs.append('-DPXR_BUILD_ALEMBIC_PLUGIN=OFF') extraArgs.append('-DPXR_BUILD_DRACO_PLUGIN=OFF') @@ -668,20 +763,6 @@ def InstallUSD(context, force, buildArgs): # Turn off the text system in USD (Autodesk extension) extraArgs.append('-DPXR_ENABLE_TEXT_SUPPORT=OFF') - extraArgs.append('-DPXR_ENABLE_PYTHON_SUPPORT=ON') - extraArgs.append('-DPXR_USE_PYTHON_3=ON') - pythonInfo = GetPythonInfo(context) - if pythonInfo: - # According to FindPythonLibs.cmake these are the variables - # to set to specify which Python installation to use. - extraArgs.append('-DPYTHON_EXECUTABLE="{pyExecPath}"' - .format(pyExecPath=pythonInfo[0])) - extraArgs.append('-DPYTHON_LIBRARY="{pyLibPath}"' - .format(pyLibPath=pythonInfo[1])) - extraArgs.append('-DPYTHON_INCLUDE_DIR="{pyIncPath}"' - .format(pyIncPath=pythonInfo[2])) - extraArgs.append('-DPXR_USE_DEBUG_PYTHON=OFF') - if Windows(): # Increase the precompiled header buffer limit. extraArgs.append('-DCMAKE_CXX_FLAGS="/Zm150"') @@ -702,23 +783,58 @@ def InstallUSD(context, force, buildArgs): "Release": '-DTBB_USE_DEBUG_BUILD=OFF', "RelWithDebInfo": '-DTBB_USE_DEBUG_BUILD=OFF', } + RunCMake(context, True, USD_INSTALL_FOLDER, extraArgs, configExtraArgs=tbbConfigs) USD = Dependency(USD_INSTALL_FOLDER, USD_PACKAGE_NAME, InstallUSD, USD_URL, "include/pxr/pxr.h") +############################################################ +# Premake + +PREMAKE_URL = "https://github.com/premake/premake-core/releases/download/v5.0.0-beta2/premake-5.0.0-beta2-macosx.tar.gz" +PREMAKE_INSTALL_FOLDER = "Premake" +PREMAKE_PACKAGE_NAME = "Premake" + +def InstallPremake(context, force, buildArgs): + DownloadURL(PREMAKE_URL, context, force, destDir=os.path.join(context.externalsInstDir, PREMAKE_INSTALL_FOLDER)) + +PREMAKE = Dependency(PREMAKE_INSTALL_FOLDER, PREMAKE_PACKAGE_NAME, InstallPremake, PREMAKE_URL, "premake5") + ############################################################ # Slang if Windows(): Slang_URL = "https://github.com/shader-slang/slang/releases/download/v0.24.35/slang-0.24.35-win64.zip" +elif MacOS(): + Slang_URL = "https://github.com/shader-slang/slang.git" else: Slang_URL = "https://github.com/shader-slang/slang/releases/download/v0.24.35/slang-0.24.35-linux-x86_64.zip" Slang_INSTALL_FOLDER = "Slang" Slang_PACKAGE_NAME = "Slang" def InstallSlang(context, force, buildArgs): - Slang_SRC_FOLDER = DownloadURL(Slang_URL, context, force, destDir="Slang") - CopyDirectory(context, Slang_SRC_FOLDER, Slang_INSTALL_FOLDER) + if MacOS(): + tag = 'v2024.1.19' + GitClone(Slang_URL, tag, "slang", context) + Slang_SRC_FOLDER = os.path.join(os.path.abspath(args.install_dir), "src", "slang") + with CurrentWorkingDirectory(Slang_SRC_FOLDER): + Run("git submodule update --init") + Run("{premakePath}/premake5 gmake2 --cc=gcc --deps=true --arch=aarch64".format( + premakePath=os.path.join(context.externalsInstDir, PREMAKE_INSTALL_FOLDER))) + Run("make -j{procs} config=release_aarch64 verbose=1".format(procs=context.numJobs)) + Slang_BUILD_COPY_DIRS = ["bin", "prelude"] + Slang_BUILD_COPY_FILES = ["LICENSE", "README.md", "slang-com-helper.h", "slang-com-ptr.h", "slang-gfx.h", "slang-tag-version.h", "slang.h"] + for dir in Slang_BUILD_COPY_DIRS: + CopyDirectory(context, os.path.join(Slang_SRC_FOLDER, dir), os.path.join(Slang_INSTALL_FOLDER, dir)) + for filename in Slang_BUILD_COPY_FILES: + CopyFiles(context, os.path.join(Slang_SRC_FOLDER, filename), Slang_INSTALL_FOLDER) + else: + Slang_SRC_FOLDER = DownloadURL(Slang_URL, context, force, destDir="Slang") + # Resolve Linux permission denied error. + if Linux(): + with CurrentWorkingDirectory(Slang_SRC_FOLDER): + Run('chmod +rwx ./bin/linux-x64/release/slangc') + CopyDirectory(context, Slang_SRC_FOLDER, Slang_INSTALL_FOLDER) SLANG = Dependency(Slang_INSTALL_FOLDER, Slang_PACKAGE_NAME, InstallSlang, Slang_URL, "slang.h") @@ -782,15 +898,29 @@ def InstallNRI(context, force, buildArgs): ############################################################ # GLEW -GLEW_URL = "https://github.com/nigels-com/glew/releases/download/glew-2.2.0/glew-2.2.0-win32.zip" +if Windows(): + GLEW_URL = "https://github.com/nigels-com/glew/releases/download/glew-2.2.0/glew-2.2.0-win32.zip" +elif MacOS(): + GLEW_URL = "https://github.com/nigels-com/glew/releases/download/glew-2.2.0/glew-2.2.0.zip" +else: + # TODO: Linux url ? + GLEW_URL = "https://github.com/nigels-com/glew/releases/download/glew-2.2.0/glew-2.2.0.zip" + + GLEW_INSTALL_FOLDER = "glew" GLEW_PACKAGE_NAME = "GLEW" def InstallGLEW(context, force, buildArgs): with CurrentWorkingDirectory(DownloadURL(GLEW_URL, context, force)): + if MacOS(): + Run('make SYSTEM=darwin') CopyDirectory(context, "include/GL", "include/GL", GLEW_INSTALL_FOLDER) - CopyFiles(context, "bin/Release/x64/*.dll", "bin", GLEW_INSTALL_FOLDER) - CopyFiles(context, "lib/Release/x64/*.lib", "lib", GLEW_INSTALL_FOLDER) + if Windows(): + CopyFiles(context, "bin/Release/x64/*.dll", "bin", GLEW_INSTALL_FOLDER) + CopyFiles(context, "lib/Release/x64/*.lib", "lib", GLEW_INSTALL_FOLDER) + if MacOS(): + CopyFiles(context, "lib/*.a", "lib", GLEW_INSTALL_FOLDER) + CopyFiles(context, "lib/*.dylib", "lib", GLEW_INSTALL_FOLDER) GLEW = Dependency(GLEW_INSTALL_FOLDER, GLEW_PACKAGE_NAME, InstallGLEW, GLEW_URL, "include/GL/glew.h") @@ -918,6 +1048,14 @@ def InstallGTEST(context, force, buildArgs): help=("Build variant for external libraries. " "(default: {})".format(BUILD_RELEASE))) +if MacOS(): + group.add_argument("--build-target", + default=apple_utils.GetBuildTargetDefault(), + choices=apple_utils.GetBuildTargets(), + help=("Build target for macOS cross compilation. " + "(default: {})".format( + apple_utils.GetBuildTargetDefault()))) + group.add_argument("--build-args", type=str, nargs="*", default=[], help=("Custom arguments to pass to build system when " "building libraries (see docs above)")) @@ -1007,6 +1145,17 @@ def __init__(self, args): if self.buildRelWithDebInfo: self.buildConfigs.append("RelWithDebInfo") + # Build target and code signing + if MacOS(): + self.buildTarget = args.build_target + apple_utils.SetTarget(self, self.buildTarget) + + self.macOSCodesign = \ + (args.macos_codesign if hasattr(args, "macos_codesign") + else False) + else: + self.buildTarget = "" + # Dependencies that are forced to be built self.forceBuildAll = args.force_all self.forceBuild = [dep.lower() for dep in args.force_build] @@ -1061,24 +1210,16 @@ def ForceBuildDependency(self, dep): # our own. This avoids potential issues where a host application loads an older version # of these librraies than the one we'd build and link our libraries against. # -# On Ubuntu 20.04, you can run the following command to install these libraries: -# sudo apt-get -y install zlib1g-dev libjpeg-turbo8-dev libtiff-dev libpng-dev libglm-dev libglew-dev libglfw3-dev libgtest-dev libgmock-dev -# -# The installed libraries likely have the following versions: -# zlib1g-dev: 1.2.11 -# libjpeg-turbo8-dev: 2.0.3 -# libtiff-dev: 4.1.0 -# libpng-dev: 1.6.37 -# libglm-dev: 0.9.9.7 -# libglew-dev: 2.1.0 -# libglfw3-dev: 3.3.2 -# libgtest-dev: 1.10.0 -# libgmock-dev: 1.10.0 +# On Ubuntu 22.04, you can run the following command to install these libraries: +# sudo apt-get -y install zlib1g-dev libjpeg-turbo8-dev libtiff-dev libpng-dev libglm-dev libglew-dev libglfw3-dev libgtest-dev libgmock-dev libxt-dev if Linux(): excludes = [ZLIB, JPEG, TIFF, PNG, GLM, GLEW, GLFW, GTEST] for lib in excludes: requiredDependencies.remove(lib) +if MacOS(): + requiredDependencies = [PREMAKE] + requiredDependencies + context.cmakePrefixPaths = set(map(lambda lib: os.path.join(context.externalsInstDir, lib.installFolder), requiredDependencies)) dependenciesToBuild = [] diff --git a/Scripts/installExternalsFunctions.py b/Scripts/installExternalsFunctions.py index 4a4003d..65d7592 100644 --- a/Scripts/installExternalsFunctions.py +++ b/Scripts/installExternalsFunctions.py @@ -88,6 +88,13 @@ def Windows(): return platform.system() == "Windows" def Linux(): return platform.system() == "Linux" +def MacOS(): + return platform.system() == "Darwin" +def Arm(): + return platform.processor() == "arm" + +if MacOS(): + import apple_utils def GetLocale(): return sys.stdout.encoding or locale.getdefaultlocale()[1] or "UTF-8" @@ -173,6 +180,11 @@ def _GetPythonLibraryFilename(context): version=sysconfig.get_config_var("py_version_nodot")) elif Linux(): return sysconfig.get_config_var("LDLIBRARY") + elif MacOS(): + return "libpython{version}.dylib".format( + version=(sysconfig.get_config_var('LDVERSION') or + sysconfig.get_config_var('VERSION') or + pythonVersion)) else: raise RuntimeError("Platform not supported") @@ -207,6 +219,9 @@ def _GetPythonLibraryFilename(context): _GetPythonLibraryFilename(context)) if os.path.isfile(pythonLibPath): break + elif MacOS(): + pythonLibPath = os.path.join(pythonBaseDir, "lib", + _GetPythonLibraryFilename(context)) else: raise RuntimeError("Platform not supported") @@ -252,6 +267,7 @@ def Run(cmd, logCommandOutput = True): # Let exceptions escape from subprocess calls -- higher level # code will handle them. + # TODO: Add space between arguments. if logCommandOutput: p = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.STDOUT) @@ -329,7 +345,7 @@ def CopyDirectory(context, srcDir, destDir, destPrefix = ''): shutil.copytree(srcDir, instDestDir) def FormatMultiProcs(numJobs, generator): - tag = "-j" + tag = "-j " # Xcode could not recognize -j{procs} but require -j {procs}. if generator: if "Visual Studio" in generator: tag = "/M:" # This will build multiple projects at once. @@ -379,6 +395,25 @@ def RunCMake(context, clean, instFolder= None, extraArgs = None, configExtraArg context.cmakePrefixPaths.add(instDir) + # On MacOS, enable the use of @rpath for relocatable builds. + osx_rpath = None + if MacOS(): + osx_rpath = "-DCMAKE_MACOSX_RPATH=ON" + + # For macOS cross compilation, set the Xcode architecture flags. + targetArch = apple_utils.GetTargetArch(context) + + if context.targetNative or targetArch == apple_utils.GetHostArch(): + extraArgs.append('-DCMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=YES') + else: + extraArgs.append('-DCMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=NO') + + extraArgs.append('-DCMAKE_OSX_ARCHITECTURES={0}'.format(targetArch)) + + # Ignore Homebrew packages when searching with the find...() commands. + extraArgs.append('-DCMAKE_IGNORE_PATH="/opt/homebrew"') + extraArgs.append('-DCMAKE_IGNORE_PREFIX_PATH="/opt/homebrew"') + with CurrentWorkingDirectory(buildDir): # We use -DCMAKE_BUILD_TYPE for single-configuration generators # (Ninja, make), and --config for multi-configuration generators @@ -389,6 +424,7 @@ def RunCMake(context, clean, instFolder= None, extraArgs = None, configExtraArg '-DCMAKE_PREFIX_PATH="{prefixPaths}" ' '-DCMAKE_BUILD_TYPE={config} ' '-DCMAKE_DEBUG_POSTFIX="d" ' + '{osx_rpath} ' '{generator} ' '{toolset} ' '{extraArgs} ' @@ -398,6 +434,7 @@ def RunCMake(context, clean, instFolder= None, extraArgs = None, configExtraArg prefixPaths=';'.join(context.cmakePrefixPaths), config=config, srcDir=srcDir, + osx_rpath=(osx_rpath or ""), generator=(generator or ""), toolset=(toolset or ""), extraArgs=(" ".join(extraArgs) if extraArgs else ""), @@ -528,6 +565,7 @@ def DownloadURL(url, context, force, extractDir = None, dontExtract = None, dest try: if tarfile.is_tarfile(filename): archive = tarfile.open(filename) + PrintInfo("Archive {0} is tarfile.".format(filename)) if extractDir: rootDir = extractDir else: @@ -537,6 +575,7 @@ def DownloadURL(url, context, force, extractDir = None, dontExtract = None, dest if not any((fnmatch.fnmatch(m.name, p) for p in dontExtract))) elif zipfile.is_zipfile(filename): + PrintInfo("Archive {0} is zipfile.".format(filename)) archive = zipfile.ZipFile(filename) if extractDir: rootDir = extractDir @@ -603,6 +642,14 @@ def GitClone(url, tag, cloneDir, context): elif not IsGitFolder(cloneDir): raise RuntimeError("Failed to clone repo {url} ({tag}): non-git folder {folder} exists".format( url=url, tag=tag, folder=cloneDir)) + elif os.path.isdir(cloneDir): + PrintInfo("{0} already exists, updating..." + .format(os.path.abspath(cloneDir))) + with CurrentWorkingDirectory(cloneDir): + Run("git fetch") + Run("git checkout {head}".format(head=tag)) + Run('git submodule update --init --recursive --jobs {procs}' + .format(procs=min(64, context.numJobs))) return os.path.abspath(cloneDir) except Exception as e: raise RuntimeError("Failed to clone repo {url} ({tag}): {err}".format( @@ -618,11 +665,19 @@ def GitCloneSHA(url, sha, cloneDir, context): Run("git checkout {sha}".format(sha=sha)) elif not IsGitFolder(cloneDir): raise RuntimeError("Failed to clone repo {url} ({tag}): non-git folder {folder} exists".format( - url=url, tag=tag, folder=cloneDir)) + url=url, tag=sha, folder=cloneDir)) + elif os.path.isdir(cloneDir): + PrintInfo("{0} already exists, updating..." + .format(os.path.abspath(cloneDir))) + with CurrentWorkingDirectory(cloneDir): + Run("git fetch") + Run("git checkout {head}".format(head=sha)) + Run('git submodule update --init --recursive --jobs {procs}' + .format(procs=min(64, context.numJobs))) return os.path.abspath(cloneDir) except Exception as e: raise RuntimeError("Failed to clone repo {url} ({tag}): {err}".format( - url=url, tag=tag, err=e)) + url=url, tag=sha, err=e)) def WriteExternalsConfig(context, externals): win32Header = """ diff --git a/Scripts/minifyShadersFolder.py b/Scripts/minifyShadersFolder.py index b425f0a..d802540 100644 --- a/Scripts/minifyShadersFolder.py +++ b/Scripts/minifyShadersFolder.py @@ -7,29 +7,35 @@ import sys import re import subprocess +import math +import platform # Dump usage and exit if we have incorrect number of args. -if(len(sys.argv)<3 or len(sys.argv)>4): - print("Usage: python minifyHLSLFolder.py inputFolder outputFile [outputNamespace] [slangCompiler] [slangCompiler]") +if(len(sys.argv) < 3 or len(sys.argv) > 6): + print("Usage: python minifyShadersFolder.py inputFolder outputFile [slangCompiler] [mainEntryPoint] [slangTarget]") print(" inputFolder - Folder containing Slang files") print(" outputMinifiedFile - Output minified C++ header file") print(" slangCompiler - Folder for slang executable to compile main entryPoint file (if omitted, just minifies no compilation)") print(" mainEntryPoint - Main entry point filename, also used for precompiled DXIL C++ header filename (if omitted, assumes MainEntryPoint)") + print(" slangTarget - Slangc compiling target (metal, dxil, spirv)") sys.exit(-1) # Parse the command line arguments. hlslFolder = sys.argv[1] outputFile = sys.argv[2] -nameSpaceName = os.path.splitext(os.path.basename(outputFile))[0] # Default namespace is output filename without extension or path. +nameSpaceName = os.path.splitext(os.path.basename(outputFile))[0] # Default namespace is output filename without extension or path. slangc = "" -if(len(sys.argv)==4): +if(len(sys.argv) == 4): slangc = sys.argv[3] mainEntryPoint = "MainEntryPoints" -if(len(sys.argv)==5): +if(len(sys.argv) == 5): mainEntryPoint = sys.argv[4] +target = "" +if(len(sys.argv) == 6): + mainEntryPoint = sys.argv[5] # Build list of files -files = glob.glob(hlslFolder+'/*.*sl*') +files = glob.glob(hlslFolder + '/*.*sl*') # See if any of the HLSL files are newer than output header file. try: @@ -38,7 +44,7 @@ except: outputModTime = 0 -#Compare the modified date on all the HLSL files in folder to output header file. +# Compare the modified date on all the HLSL files in folder to output header file. numFiles = len(files) n = 0 rebuildNeeded = False @@ -47,8 +53,8 @@ if(mainEntryPoint in hlslFile): entryPointFile = hlslFile fileModTime = os.stat(hlslFile).st_mtime - if(fileModTime>outputModTime): - rebuildNeeded=True + if(fileModTime > outputModTime): + rebuildNeeded = True # Early out, if nothing to be done. if(not rebuildNeeded): @@ -56,32 +62,63 @@ sys.exit(0) # If we have a slang compiler and entry point filename, then precompile it. -if(len(slangc)>0 and len(entryPointFile)>0): - compiledFile = os.path.dirname(outputFile) + "/"+mainEntryPoint +".h" - print("Compiling main entry point %s with Slang compiler %s to DXIL in header %s"%(entryPointFile, slangc, compiledFile)) - compiledTempFile = os.path.dirname(outputFile) +"/"+ mainEntryPoint +".dxil" - variableName = "g_s"+mainEntryPoint+"DXIL"; - cmd = [slangc, entryPointFile, "-DDIRECTX=1", "-DRUNTIME_COMPILE_EVALUATE_MATERIAL_FUNCTION=1", "-target", "dxil", "-profile","lib_6_3","-o", compiledTempFile]; - result = subprocess.run( cmd, capture_output=True) - if(result.returncode!=0): - print("Compliation failed on "+entryPointFile) +if(len(slangc) > 0 and len(entryPointFile) > 0): + # Use platform default target if not provided. + if (target != "metal" or target != "dxil" or target != "spirv"): + if(platform.system() == "Darwin"): + target = "metal" + elif(platform.system() == "Windows"): + target = "dxil" + elif(platform.system() == "Linux"): + target = "spirv" + else: + print("Unsupported platform: " + platform.system()) + sys.exit(-1) + + compiledFile = "" + compiledTempFile = "" + variableName = "" + cmd = [] + if (target == "metal"): + headerFileName = mainEntryPoint + ".h" + metalFileName = mainEntryPoint + ".metal" + compiledFile = os.path.join(os.path.dirname(outputFile), headerFileName) + print("Compiling main entry point %s with Slang compiler %s to MSL in header %s"%(entryPointFile, slangc, compiledFile)) + compiledTempFile = os.path.join(os.path.dirname(outputFile), metalFileName) + variableName = "g_s" + mainEntryPoint + "metal" + cmd = [slangc, entryPointFile, "-target", target, "-o", compiledTempFile] + # cmd = [slangc, entryPointFile, "-DRUNTIME_COMPILE_EVALUATE_MATERIAL_FUNCTION=1", "-target", "metal", "-profile", "lib_6_3", "-o", compiledTempFile]' + elif (target == "dxil"): + compiledFile = os.path.dirname(outputFile) + "/" + mainEntryPoint + ".h" + print("Compiling main entry point %s with Slang compiler %s to DXIL in header %s"%(entryPointFile, slangc, compiledFile)) + compiledTempFile = os.path.dirname(outputFile) +"/"+ mainEntryPoint + ".dxil" + variableName = "g_s" + mainEntryPoint + "DXIL" + cmd = [slangc, entryPointFile, "-DDIRECTX=1", "-DRUNTIME_COMPILE_EVALUATE_MATERIAL_FUNCTION=1", "-target", target, "-profile", "lib_6_3", "-o", compiledTempFile] + else: # "spirv" + compiledFile = os.path.dirname(outputFile) + "/" + mainEntryPoint + ".h" + print("Compiling main entry point %s with Slang compiler %s to SPIRV in header %s"%(entryPointFile, slangc, compiledFile)) + compiledTempFile = os.path.dirname(outputFile) +"/"+ mainEntryPoint + ".spv" + variableName = "g_s" + mainEntryPoint + "SPIRV" + cmd = [slangc, entryPointFile, "-target", "spirv", "-o", compiledTempFile] + + result = subprocess.run(cmd, capture_output=True) + if(result.returncode != 0): + print("Compliation failed on " + entryPointFile) print(result.stderr.decode()) - sys.exit(-1) - f = open(compiledTempFile, mode="rb") + sys.exit(-1) + f = open(compiledTempFile, mode = "rb") data = bytearray(f.read()) numBytes = len(data) - numWords = int(numBytes/4) - if(numWords*4 !=numBytes): - numWords=numWords+1; - headerStr = "static const array "+variableName+" = {\n"; + numWords = math.ceil(numBytes / 4) + headerStr = "static const array " + variableName + " = {\n" for i in range(numWords): - wordBytes = bytes([data[i*4+3],data[i*4+2],data[i*4+1],data[i*4+0]]) - headerStr += "0x"+str(wordBytes.hex()); - if(i '+directorySymbolName+' = {\n' +directoryString = directoryString + '\tstatic const std::map ' + directorySymbolName + ' = {\n' # Begin header file with namespace -headerOutput.write('// Minified HLSL header file.\n// Automatically generated by '+sys.argv[0]+' from '+str(numFiles)+' files in folder '+hlslFolder+'\n') -headerOutput.write('namespace '+nameSpaceName+' {\n') +headerOutput.write('// Minified HLSL header file.\n// Automatically generated by ' + sys.argv[0] + ' from ' + str(numFiles) + ' files in folder ' + hlslFolder + '\n') +headerOutput.write('namespace ' + nameSpaceName + ' {\n') # Minify all the HLSL files for hlslFile in files: # Print message - print("\t Minifying file %d of %d: %s" % ((n+1), numFiles, hlslFile)) + print("\t Minifying file %d of %d: %s" % ((n + 1), numFiles, hlslFile)) # Get base filename (with path) - baseFilename = os.path.basename(hlslFile); + baseFilename = os.path.basename(hlslFile) # Open pre-HLSL file (exit if open fails.) try: hlslFileStream = open(hlslFile, "r") except: - print("Failed to open:"+hlslFile) + print("Failed to open: " + hlslFile) sys.exit(-1) # Read all lines of HLSL to an array. lines = hlslFileStream.readlines() # Work out string symbol name from path (based filename without extension) - stringName = "g_s"+os.path.splitext(os.path.basename(hlslFile))[0]; + stringName = "g_s" + os.path.splitext(os.path.basename(hlslFile))[0] # Check we don't have a name collision with the directory map object. - if(stringName==directorySymbolName): - print("Invalid HLSL filename "+baseFilename+" name conflict with built-in directory map named "+directorySymbolName) + if(stringName == directorySymbolName): + print("Invalid HLSL filename " + baseFilename + " name conflict with built-in directory map named " + directorySymbolName) # Begin minified C string. - headerOutput.write('\n\t// Minified string created from '+hlslFile+'\n') - headerOutput.write('\tstatic const std::string '+stringName+' = \n') + headerOutput.write('\n\t// Minified string created from ' + hlslFile + '\n') + headerOutput.write('\tstatic const std::string ' + stringName + ' = \n') # Prepend a #line statement to help with debugging - lines.insert(0, '#line 1 \"'+re.sub(r"\\", "/", hlslFile)+'\"\n') + lines.insert(0, '#line 1 \"' + re.sub(r"\\", "/", hlslFile) + '\"\n') # Current header file output line and line number. currOutputStr = "" - lineNo=0; + lineNo = 0 # Iterate through all the lines. for ln in lines: @@ -153,27 +190,27 @@ ln = re.sub(r"\"", "\\\"", ln) # Increment line number. - lineNo=lineNo+1 + lineNo = lineNo + 1 # Append newline to end of file. - if(lineNo==len(lines)): - ln+="\\n"; + if(lineNo == len(lines)): + ln += "\\n" # Append to current line in header file string. currOutputStr += ln - # When current line longer than 100 chars, write to header string (wrapping in quotes and adding newline+backslash) - if(len(currOutputStr)>100): - headerOutput.write('\t\"'+currOutputStr+'\" \\\n') - currOutputStr="" + # When current line longer than 100 chars, write to header string (wrapping in quotes and adding newline + backslash) + if(len(currOutputStr) > 100): + headerOutput.write('\t\"' + currOutputStr + '\" \\\n') + currOutputStr = "" # Finish writing minified string. - headerOutput.write('\t\t\"'+currOutputStr+'\" \n\t;\n') + headerOutput.write('\t\t\"' + currOutputStr + '\" \n\t;\n') # Add entry to directory map string. - n=n+1 + n = n + 1 directoryString = directoryString + ('\t\t{ "%s", %s }'% (baseFilename, stringName)) - if(n==len(files)): + if(n == len(files)): directoryString = directoryString + "\n\t};\n" else: directoryString = directoryString + ",\n" diff --git a/Tests/Assets/Textures/pretville_street_24k.exr b/Tests/Assets/Textures/pretville_street_24k.exr deleted file mode 100644 index 801abc0..0000000 --- a/Tests/Assets/Textures/pretville_street_24k.exr +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8de17765b23fc43f611b8c5c0db4e4692a55fca09dd864f5767380e7e64a34f6 -size 3348299363 diff --git a/Tests/Aurora/CMakeLists.txt b/Tests/Aurora/CMakeLists.txt index 7ec907d..53ce071 100644 --- a/Tests/Aurora/CMakeLists.txt +++ b/Tests/Aurora/CMakeLists.txt @@ -41,6 +41,9 @@ set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${LIBRARY_OUTPUT_DIR}" ARCHIVE_OUTPUT_DIRECTORY "${LIBRARY_OUTPUT_DIR}" PDB_OUTPUT_DIRECTORY "${RUNTIME_OUTPUT_DIR}" + BUILD_WITH_INSTALL_RPATH TRUE + INSTALL_RPATH_USE_LINK_PATH TRUE + INSTALL_RPATH "${TBB_LIBRARY_DIR};${PXR_LIBRARY_DIRS};${INSTALL_RPATH}" VS_DEBUGGER_WORKING_DIRECTORY "${RUNTIME_OUTPUT_DIR}" VS_DEBUGGER_ENVIRONMENT "${VS_DEBUGGING_ENV}" XCODE_SCHEME_ENVIRONMENT "${XCODE_DEBUGGING_ENV}") @@ -88,9 +91,7 @@ if(WIN32) endif() # Run gtest discover tests function. -if(RUN_TESTS_FROM_PROJECT) - gtest_discover_tests(${PROJECT_NAME} - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${RUNTIME_OUTPUT_DIR}" - ) -endif() \ No newline at end of file +gtest_discover_tests(${PROJECT_NAME} + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${RUNTIME_OUTPUT_DIR}" +) diff --git a/Tests/Aurora/Tests/TestImage.cpp b/Tests/Aurora/Tests/TestImage.cpp index 0a53043..2415e8d 100644 --- a/Tests/Aurora/Tests/TestImage.cpp +++ b/Tests/Aurora/Tests/TestImage.cpp @@ -40,7 +40,11 @@ class ImageTest : public TestHelpers::FixtureBase }; // Basic image test. +#if defined(__APPLE__) +TEST_P(ImageTest, DISABLED_TestImageDefault) // This case cannot work on MacOS now. +#else TEST_P(ImageTest, TestImageDefault) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); @@ -71,7 +75,11 @@ TEST_P(ImageTest, TestImageDefault) // Basic image test. // TODO: Re-enable once samplers working. +#if defined(__APPLE__) +TEST_P(ImageTest, DISABLED_TestImageSamplers) // This case cannot work on MacOS now. +#else TEST_P(ImageTest, TestImageSamplers) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); @@ -140,7 +148,11 @@ TEST_P(ImageTest, TestImageSamplers) } // Basic image test. +#if defined(__APPLE__) +TEST_P(ImageTest, DISABLED_TestImageOpacity) // This case cannot work on MacOS now. +#else TEST_P(ImageTest, TestImageOpacity) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); @@ -170,7 +182,11 @@ TEST_P(ImageTest, TestImageOpacity) } // Add test for sRGB->linear conversion. +#if defined(__APPLE__) +TEST_P(ImageTest, DISABLED_TestGammaImage) // This case cannot work on MacOS now. +#else TEST_P(ImageTest, TestGammaImage) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); @@ -217,7 +233,11 @@ TEST_P(ImageTest, TestGammaImage) } // Normal map image test. +#if defined(__APPLE__) +TEST_P(ImageTest, DISABLED_TestNormalMapImage) // This case cannot work on MacOS now. +#else TEST_P(ImageTest, TestNormalMapImage) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); @@ -278,7 +298,7 @@ TEST_P(ImageTest, TestCreateImageAfterSceneCreation) bool loaded = false; // Set up the pixel data callback - imageDesc.getData = [&buffer, &loaded](ImageData& dataOut, AllocateBufferFunction alloc) { + imageDesc.getData = [&buffer, &loaded](ImageData& dataOut, [[maybe_unused]]AllocateBufferFunction alloc) { // Get address and size from buffer (assumes will be called from scope of test, so buffer // still valid) dataOut.pPixelBuffer = buffer.data(); diff --git a/Tests/Aurora/Tests/TestLight.cpp b/Tests/Aurora/Tests/TestLight.cpp index 504a8f4..a18ac0c 100644 --- a/Tests/Aurora/Tests/TestLight.cpp +++ b/Tests/Aurora/Tests/TestLight.cpp @@ -38,6 +38,12 @@ class LightTest : public TestHelpers::FixtureBase public: LightTest() {} ~LightTest() {} +#if defined(__APPLE__) +protected: + void SetUp() override { + GTEST_SKIP() << "Skipping all light tests on MacOS."; + } +#endif }; // Create test HDR lat-long environment map image data, interpolated from colors for on six diff --git a/Tests/Aurora/Tests/TestMaterial.cpp b/Tests/Aurora/Tests/TestMaterial.cpp index b49d32f..039afaa 100644 --- a/Tests/Aurora/Tests/TestMaterial.cpp +++ b/Tests/Aurora/Tests/TestMaterial.cpp @@ -220,8 +220,12 @@ static void clearAllProperties(Properties& props) props["displacement_image"].clear(); } -// Test material functionality using baseline image testing +// Test material functionality using baseline image testing. +#if defined(__APPLE__) +TEST_P(MaterialTest, DISABLED_TestMaterialClearMaterialProperty) // This case cannot work on MacOS now. +#else TEST_P(MaterialTest, TestMaterialClearMaterialProperty) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); @@ -302,8 +306,12 @@ Paths createTeapotGrid(TestHelpers::FixtureBase& pFixture, uint32_t gridWidth, u return pScene->addInstances(geometry, instDefs); } -// Test basic material properties using baseline image testing +// Test basic material properties using baseline image testing. +#if defined(__APPLE__) +TEST_P(MaterialTest, DISABLED_TestMaterialBasicMaterialProperties) // This case cannot work on MacOS now. +#else TEST_P(MaterialTest, TestMaterialBasicMaterialProperties) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); @@ -523,8 +531,12 @@ TEST_P(MaterialTest, TestMaterialBasicMaterialProperties) } } -// Set just the transmission value +// Set just the transmission value. +#if defined(__APPLE__) +TEST_P(MaterialTest, DISABLED_TestMaterialSetTransmission) // This case cannot work on MacOS now. +#else TEST_P(MaterialTest, TestMaterialSetTransmission) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); @@ -554,7 +566,11 @@ TEST_P(MaterialTest, TestMaterialSetTransmission) } // Test emission properties. +#if defined(__APPLE__) +TEST_P(MaterialTest, DISABLED_TestMaterialEmission) // This case cannot work on MacOS now. +#else TEST_P(MaterialTest, TestMaterialEmission) +#endif { // Create the default scene and renderer. auto pScene = createDefaultScene(); @@ -595,8 +611,12 @@ TEST_P(MaterialTest, TestMaterialEmission) ASSERT_BASELINE_IMAGE_PASSES_IN_FOLDER(currentTestName() + "EmissionImage", "Materials"); } -// Test more advanced material properties using baseline image testing +// Test more advanced material properties using baseline image testing. +#if defined(__APPLE__) +TEST_P(MaterialTest, DISABLED_TestMaterialAdvancedMaterialProperties) // This case cannot work on MacOS now. +#else TEST_P(MaterialTest, TestMaterialAdvancedMaterialProperties) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); @@ -992,7 +1012,11 @@ TEST_P(MaterialTest, TestMaterialX) } // Test material creation using MaterialX file dumped from HdAurora. +#if defined(__APPLE__) +TEST_P(MaterialTest, DISABLED_TestHdAuroraMaterialX) // This case cannot work on MacOS now. +#else TEST_P(MaterialTest, TestHdAuroraMaterialX) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); @@ -1027,7 +1051,11 @@ TEST_P(MaterialTest, TestHdAuroraMaterialX) } // Test material creation using MaterialX file dumped from HdAurora that has a texture. +#if defined(__APPLE__) +TEST_P(MaterialTest, DISABLED_TestHdAuroraTextureMaterialX) // This case cannot work on MacOS now. +#else TEST_P(MaterialTest, TestHdAuroraTextureMaterialX) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); @@ -1311,7 +1339,11 @@ TEST_P(MaterialTest, TestMaterialXImageNode) ASSERT_BASELINE_IMAGE_PASSES_IN_FOLDER(currentTestName(), "Materials"); } +#if defined(__APPLE__) +TEST_P(MaterialTest, DISABLED_TestMaterialTransparency) // This case cannot work on MacOS now. +#else TEST_P(MaterialTest, TestMaterialTransparency) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); @@ -1365,7 +1397,11 @@ TEST_P(MaterialTest, TestMaterialTransparency) } // TODO: Re-enable test when shadow anyhit shaders are working. +#if defined(__APPLE__) +TEST_P(MaterialTest, DISABLED_TestMaterialShadowTransparency) // This case cannot work on MacOS now. +#else TEST_P(MaterialTest, TestMaterialShadowTransparency) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); @@ -1388,7 +1424,6 @@ TEST_P(MaterialTest, TestMaterialShadowTransparency) Path imagePath = loadImage(txtName); // Constant colors. - vec3 color0(0.5f, 1.0f, 0.3f); vec3 opacity0(0.5f, 0.5f, 0.3f); // Create geometry for teapot and plane geometry. @@ -1732,7 +1767,7 @@ TEST_P(MaterialTest, TestMaterialMaterialXLayerTransforms) pScene->setGeometryDescriptor(kDecalUVGeomPath, geomDesc); } - for (int layer = 0; layer < materialLayers.size(); layer++) + for (size_t layer = 0; layer < materialLayers.size(); layer++) { const Path kDecalUVGeomPath = "DecalUVGeomPath0"; geometryLayers.push_back(kDecalUVGeomPath); @@ -1753,7 +1788,11 @@ TEST_P(MaterialTest, TestMaterialMaterialXLayerTransforms) } // Normal map image test. +#if defined(__APPLE__) +TEST_P(MaterialTest, DISABLED_TestNormalMapMaterialX) // This case cannot work on MacOS now. +#else TEST_P(MaterialTest, TestNormalMapMaterialX) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); diff --git a/Tests/Aurora/Tests/TestPaths.cpp b/Tests/Aurora/Tests/TestPaths.cpp index f600766..d9395d6 100644 --- a/Tests/Aurora/Tests/TestPaths.cpp +++ b/Tests/Aurora/Tests/TestPaths.cpp @@ -84,7 +84,11 @@ class PathTest : public TestHelpers::FixtureBase }; // Basic path test. +#if defined(__APPLE__) +TEST_P(PathTest, DISABLED_TestPathDefault) +#else TEST_P(PathTest, TestPathDefault) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); diff --git a/Tests/Aurora/Tests/TestRenderer.cpp b/Tests/Aurora/Tests/TestRenderer.cpp index 37bdf8e..d96b085 100644 --- a/Tests/Aurora/Tests/TestRenderer.cpp +++ b/Tests/Aurora/Tests/TestRenderer.cpp @@ -74,9 +74,12 @@ TEST_P(RendererTest, TestRendererDebugDevice) } // Test creating, destroying renderer then rendering. +#if defined(__APPLE__) +TEST_P(RendererTest, DISABLED_TestRendererCreateDestroyThenRenderFull) // This case cannot work on MacOS now. +#else TEST_P(RendererTest, TestRendererCreateDestroyThenRenderFull) +#endif { - // TODO: Should test assert message when creating renderer when not supported. if (!backendSupported()) return; @@ -116,7 +119,11 @@ TEST_P(RendererTest, TestRendererCreateDestroyThenRenderFull) } // Test renderer options. +#if defined(__APPLE__) +TEST_P(RendererTest, DISABLED_TestRendererOptions) // This case cannot work on MacOS now. +#else TEST_P(RendererTest, TestRendererOptions) +#endif { if (!backendSupported()) return; @@ -151,9 +158,12 @@ TEST_P(RendererTest, TestRendererOptions) // Render with increasing values of sampleCount. // Should have no effect on rasterizer at all +#if defined(__APPLE__) +TEST_P(RendererTest, DISABLED_TestRendererLargeSampleCount) // This case cannot work on MacOS now. +#else TEST_P(RendererTest, TestRendererLargeSampleCount) +#endif { - // Create the default scene with 256x256 frame size (also creates renderer) IRendererPtr pRenderer = createDefaultRenderer(256, 256); IScenePtr pScene = createDefaultScene(); @@ -261,7 +271,11 @@ TEST_P(RendererTest, TestRendererDestroyRenderBufferFirst) } // Test a completely empty scene. +#if defined(__APPLE__) +TEST_P(RendererTest, DISABLED_TestRendererEmptyScene) // This case cannot work on MacOS now. +#else TEST_P(RendererTest, TestRendererEmptyScene) +#endif { // Create the default scene. (also creates renderer) IRendererPtr pRenderer = createDefaultRenderer(); @@ -287,8 +301,12 @@ TEST_P(RendererTest, TestRendererEmptyScene) ASSERT_NO_FATAL_FAILURE(pRenderer->render()); } -// Test background the same between two identical renders +// Test background the same between two identical renders. +#if defined(__APPLE__) +TEST_P(RendererTest, DISABLED_TestRenderBackgroundTheSameBetweenRenders) // This case cannot work on MacOS now. +#else TEST_P(RendererTest, TestRenderBackgroundTheSameBetweenRenders) +#endif { // Create the default scene (also creates renderer) IScenePtr pScene = createDefaultScene(); @@ -435,9 +453,12 @@ TEST_P(RendererTest, DISABLED_TestRendererInvalidBounds) } // Ensure can render empty scene with no bounds. +#if defined(__APPLE__) +TEST_P(RendererTest, DISABLED_TestRendererEmptySceneBounds) // This case cannot work on MacOS now. +#else TEST_P(RendererTest, TestRendererEmptySceneBounds) +#endif { - // Create the default scene and renderer. Aurora::IRendererPtr pRenderer = createDefaultRenderer(); @@ -457,7 +478,11 @@ TEST_P(RendererTest, TestRendererEmptySceneBounds) // Test ground plane. // TODO: Re-enable once ground plane re-enabled. +#if defined(__APPLE__) +TEST_P(RendererTest, DISABLED_TestRendererGroundPlane) // This case cannot work on MacOS now. +#else TEST_P(RendererTest, TestRendererGroundPlane) +#endif { auto pScene = createDefaultScene(); auto pRenderer = defaultRenderer(); @@ -494,9 +519,12 @@ TEST_P(RendererTest, TestRendererGroundPlane) } // Test null environment. +#if defined(__APPLE__) +TEST_P(RendererTest, DISABLED_TestRendererSetNullEnvironment) // This case cannot work on MacOS now. +#else TEST_P(RendererTest, TestRendererSetNullEnvironment) +#endif { - // Create the default scene and renderer. IRendererPtr pRenderer = createDefaultRenderer(); @@ -523,7 +551,11 @@ TEST_P(RendererTest, TestRendererSetNullEnvironment) } // Test instance properties environment. +#if defined(__APPLE__) +TEST_P(RendererTest, DISABLED_TestRendererInstanceProperties) // This case cannot work on MacOS now. +#else TEST_P(RendererTest, TestRendererInstanceProperties) +#endif { auto pScene = createDefaultScene(); auto pRenderer = defaultRenderer(); @@ -556,8 +588,12 @@ TEST_P(RendererTest, TestRendererInstanceProperties) ASSERT_BASELINE_IMAGE_PASSES(currentTestName()); } -// Test non-indexed geom +// Test non-indexed geom. +#if defined(__APPLE__) +TEST_P(RendererTest, DISABLED_TestRendererNonIndexedGeom) +#else TEST_P(RendererTest, TestRendererNonIndexedGeom) +#endif { auto pScene = createDefaultScene(); auto pRenderer = defaultRenderer(); @@ -620,7 +656,11 @@ TEST_P(RendererTest, TestRendererNonIndexedGeom) } // Test remove instance. +#if defined(__APPLE__) +TEST_P(RendererTest, DISABLED_TestRendererRemoveInstance) // This case cannot work on MacOS now. +#else TEST_P(RendererTest, TestRendererRemoveInstance) +#endif { auto pScene = createDefaultScene(); auto pRenderer = defaultRenderer(); @@ -656,7 +696,11 @@ TEST_P(RendererTest, TestRendererRemoveInstance) // Test instance with layer materials // TODO: Re-enable test when layers are working. +#if defined(__APPLE__) +TEST_P(RendererTest, DISABLED_TestRendererMaterialLayers) +#else TEST_P(RendererTest, TestRendererMaterialLayers) +#endif { auto pScene = createDefaultScene(); auto pRenderer = defaultRenderer(); @@ -1094,7 +1138,11 @@ TEST_P(RendererTest, TestLocales) } // Test orthographic projection. +#if defined(__APPLE__) +TEST_P(RendererTest, DISABLED_TestRendererOrthographicProjection) // This case cannot work on MacOS now. +#else TEST_P(RendererTest, TestRendererOrthographicProjection) +#endif { // Create the default scene and renderer. Aurora::IScenePtr pScene = createDefaultScene(); @@ -1165,7 +1213,11 @@ TEST_P(RendererTest, TestRendererAlpha) } // Ensure lighting behind an opaque surface has no effect. +#if defined(__APPLE__) +TEST_P(RendererTest, DISABLED_TestRendererBackFaceLighting) // This case cannot work on MacOS now. +#else TEST_P(RendererTest, TestRendererBackFaceLighting) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); @@ -1201,7 +1253,11 @@ TEST_P(RendererTest, TestRendererBackFaceLighting) // Normal map image test. +#if defined(__APPLE__) +TEST_P(RendererTest, DISABLED_TestDebugNormals) // This case cannot work on MacOS now. +#else TEST_P(RendererTest, TestDebugNormals) +#endif { // Create the default scene (also creates renderer) auto pScene = createDefaultScene(); diff --git a/Tests/AuroraInternals/CMakeLists.txt b/Tests/AuroraInternals/CMakeLists.txt index dc01663..2705ca5 100644 --- a/Tests/AuroraInternals/CMakeLists.txt +++ b/Tests/AuroraInternals/CMakeLists.txt @@ -78,6 +78,9 @@ set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${LIBRARY_OUTPUT_DIR}" ARCHIVE_OUTPUT_DIRECTORY "${LIBRARY_OUTPUT_DIR}" PDB_OUTPUT_DIRECTORY "${RUNTIME_OUTPUT_DIR}" + BUILD_WITH_INSTALL_RPATH TRUE + INSTALL_RPATH_USE_LINK_PATH TRUE + INSTALL_RPATH "${TBB_LIBRARY_DIR};${PXR_LIBRARY_DIRS};${INSTALL_RPATH}" VS_DEBUGGER_WORKING_DIRECTORY "${RUNTIME_OUTPUT_DIR}" VS_DEBUGGER_ENVIRONMENT "${VS_DEBUGGING_ENV}" XCODE_SCHEME_ENVIRONMENT "${XCODE_DEBUGGING_ENV}") diff --git a/Tests/AuroraInternals/Common/TestMaterialGenerator.cpp b/Tests/AuroraInternals/Common/TestMaterialGenerator.cpp index b2716ba..138a57b 100644 --- a/Tests/AuroraInternals/Common/TestMaterialGenerator.cpp +++ b/Tests/AuroraInternals/Common/TestMaterialGenerator.cpp @@ -38,7 +38,13 @@ class MaterialGeneratorTest : public ::testing::Test // Test for the existence of the ADSK materialX libraries (in the working folder for the tests) bool adskMaterialXSupport() { return std::filesystem::exists("MaterialX/libraries/adsk"); } +#if defined(__APPLE__) protected: + void SetUp() override { + GTEST_SKIP() << "Skipping all material generator tests on MacOS."; + } +#endif + std::string _dataPath; }; diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index d1192f9..c1fdd70 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -42,6 +42,14 @@ endif() # Enable testing in CMake enable_testing() +# Include GoogleTest CMake module +include(GoogleTest) +if(APPLE) + # Xcode delays the signature after the “Run Script” build phase. + # So the default POST_BUILD command added by gtest_discover_tests cannot run. + # Refer to https://cmake.org/cmake/help/latest/module/GoogleTest.html for more information. + set(CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE PRE_TEST) +endif() # Add variable to locate the test helpers. set(TEST_HELPERS_FOLDER ${CMAKE_CURRENT_LIST_DIR}/Helpers) diff --git a/Tests/Foundation/CMakeLists.txt b/Tests/Foundation/CMakeLists.txt index 29fa1df..9e08a33 100644 --- a/Tests/Foundation/CMakeLists.txt +++ b/Tests/Foundation/CMakeLists.txt @@ -30,6 +30,9 @@ set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${LIBRARY_OUTPUT_DIR}" ARCHIVE_OUTPUT_DIRECTORY "${LIBRARY_OUTPUT_DIR}" PDB_OUTPUT_DIRECTORY "${RUNTIME_OUTPUT_DIR}" + BUILD_WITH_INSTALL_RPATH TRUE + INSTALL_RPATH_USE_LINK_PATH TRUE + INSTALL_RPATH "${TBB_LIBRARY_DIR};${PXR_LIBRARY_DIRS};${INSTALL_RPATH}" VS_DEBUGGER_WORKING_DIRECTORY "${RUNTIME_OUTPUT_DIR}" VS_DEBUGGER_ENVIRONMENT "${VS_DEBUGGING_ENV}" XCODE_SCHEME_ENVIRONMENT "${XCODE_DEBUGGING_ENV}") diff --git a/Tests/HdAurora/CMakeLists.txt b/Tests/HdAurora/CMakeLists.txt index 4c3db62..ce13cf4 100644 --- a/Tests/HdAurora/CMakeLists.txt +++ b/Tests/HdAurora/CMakeLists.txt @@ -44,6 +44,9 @@ set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${LIBRARY_OUTPUT_DIR}" ARCHIVE_OUTPUT_DIRECTORY "${LIBRARY_OUTPUT_DIR}" PDB_OUTPUT_DIRECTORY "${RUNTIME_OUTPUT_DIR}" + BUILD_WITH_INSTALL_RPATH TRUE + INSTALL_RPATH_USE_LINK_PATH TRUE + INSTALL_RPATH "${TBB_LIBRARY_DIR};${PXR_LIBRARY_DIRS};${INSTALL_RPATH}" VS_DEBUGGER_WORKING_DIRECTORY "${RUNTIME_OUTPUT_DIR}" VS_DEBUGGER_ENVIRONMENT "${VS_DEBUGGING_ENV}" XCODE_SCHEME_ENVIRONMENT "${XCODE_DEBUGGING_ENV}") @@ -73,6 +76,13 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${HDAURORA_SOURCE_DIR} ${TEST # Add default compile definitions (set in root CMakefile) target_compile_definitions(${PROJECT_NAME} PRIVATE ${DEFAULT_COMPILE_DEFINITIONS}) +if(APPLE) + # Copy glew dylib to the runtime directory as it cannot be loaded through rpath. + add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${GLEW_ROOT}/lib/*.dylib ${RUNTIME_OUTPUT_DIR} + ) +endif() + # Run gtest discover tests function. gtest_discover_tests(${PROJECT_NAME} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" diff --git a/Tests/HdAurora/Tests/TestStability.cpp b/Tests/HdAurora/Tests/TestStability.cpp index 2da11ba..e1b87b3 100644 --- a/Tests/HdAurora/Tests/TestStability.cpp +++ b/Tests/HdAurora/Tests/TestStability.cpp @@ -90,25 +90,6 @@ TEST_F(StabilityTest, TestTextures) // Ensure no crash when resource activated. pAuroraRenderDelegate->setAuroraEnvironmentLightImagePath(resPath); pAuroraRenderDelegate->UpdateAuroraEnvironment(); - -// TODO: To pass the extreme-sized tests, the corresponding fix in USD (hiooiio) is required. -// Enable the following tests once USD is upgraded. -#ifdef ENABLE_EXTREME_SIZE_TEST - // Test extreme-sized textures. /////////////////////////////////////////// - const std::string environmentImage = _dataPath + "/Textures/pretville_street_24k.exr"; - - resPath = pAuroraRenderDelegate->imageCache().acquireImage(environmentImage, true, false); - EXPECT_FALSE(resPath.empty()); - // Ensure no crash when resource activated. - pAuroraRenderDelegate->setAuroraEnvironmentLightImagePath(resPath); - pAuroraRenderDelegate->UpdateAuroraEnvironment(); - - resPath = pAuroraRenderDelegate->imageCache().acquireImage(environmentImage, true, true); - EXPECT_FALSE(resPath.empty()); - // Ensure no crash when resource activated. - pAuroraRenderDelegate->setAuroraEnvironmentLightImagePath(resPath); - pAuroraRenderDelegate->UpdateAuroraEnvironment(); -#endif } } // namespace diff --git a/Tests/Helpers/AuroraTestHelpers.cpp b/Tests/Helpers/AuroraTestHelpers.cpp index 32490f2..a73d350 100644 --- a/Tests/Helpers/AuroraTestHelpers.cpp +++ b/Tests/Helpers/AuroraTestHelpers.cpp @@ -178,7 +178,7 @@ Aurora::Path FixtureBase::loadImage(const string& filename, bool linearize) Path path = "TestImage:" + filename + "-linearize=" + to_string(linearize); // Set up the pixel data callback - imageDesc.getData = [this, path, filename](ImageData& dataOut, AllocateBufferFunction alloc) { + imageDesc.getData = [path, filename](ImageData& dataOut, AllocateBufferFunction alloc) { // Use STB to load image file. int width, height, components; unsigned char* pReadPixels = stbi_load(filename.c_str(), &width, &height, &components, 0);